Note that there are some explanatory texts on larger screens.

plurals
  1. POMoving date on x-axis
    primarykey
    data
    text
    <p>I have been playing with Core Plot and trying to create a dynamic date x-axis. From the date plot example I have managed to create a static date axis, but would like to create a two-minute window at any time and update the xRange values. I am not sure on how to pass dates as the xRange min and length values and display time on the x-axis.</p> <p>I have looked at examples, but I haven't been able to utilize <code>NSTimeInterval</code> (if this is how to do it...). </p> <p>Below is the picture (if it helps)</p> <p><img src="https://i.stack.imgur.com/uB1aW.png" alt="enter image description here"></p> <p>Below is my attempt so far; can someone please advise me on how to achieve this?</p> <pre><code>- (void)loadView { // Alloc &amp; Init Main View and since the display resolution is 1024x768 take 20 off for labels later UIView *tmpView = [ [ UIView alloc ] initWithFrame:CGRectMake(0, 0, 1024.0,768.0) ]; [ tmpView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ]; [ tmpView setBackgroundColor:[ UIColor redColor ] ]; // Alloc Graph View graphView = [ [ CPGraphHostingView alloc ] initWithFrame:CGRectMake(0, 0, 1024.0,768.0) ]; [ tmpView addSubview:[ graphView autorelease ] ]; // Set MainView [ self setView:[ tmpView autorelease ] ]; } -(void)viewDidLoad{ [super viewDidLoad]; NSDate *refDate = [NSDate date]; // NSTimeInterval oneDay = 24 * 60 * 60; NSTimeInterval oneHour = 60 * 60; NSTimeInterval fivemin= 5 * 60; // Create graph from theme graph = [(CPXYGraph *) [CPXYGraph alloc] initWithFrame:self.view.bounds]; CPTheme *theme = [CPTheme themeNamed:kCPDarkGradientTheme]; [graph applyTheme:theme]; graphView.hostedGraph = graph; //padding graph.paddingLeft = 20.0; graph.paddingTop = 20.0; graph.paddingRight = 20.0; graph.paddingBottom = 20.0; graph.plotAreaFrame.paddingTop=10.0; graph.plotAreaFrame.paddingLeft=50.0; graph.plotAreaFrame.paddingRight=35.0; graph.plotAreaFrame.paddingBottom=50.0; // Setup scatter plot space CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace; NSTimeInterval xLow = 0.0f; plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(xLow) length:CPDecimalFromFloat(oneHour)]; plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0.0f) length:CPDecimalFromFloat(100.0f)]; //Line Styles CPLineStyle *lineStyle = [CPLineStyle lineStyle]; lineStyle.lineColor = [CPColor redColor]; lineStyle.lineWidth = 2.0f; CPLineStyle *majorGridLineStyle = [CPLineStyle lineStyle]; majorGridLineStyle.lineWidth = 0.75; majorGridLineStyle.lineColor = [[CPColor colorWithGenericGray:0.2] colorWithAlphaComponent:0.75]; CPLineStyle *minorGridLineStyle = [CPLineStyle lineStyle]; minorGridLineStyle.lineWidth = 0.25; minorGridLineStyle.lineColor = [[CPColor whiteColor] colorWithAlphaComponent:0.1]; CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet; // X-Axes formatting CPXYAxis *x = axisSet.xAxis; x.majorIntervalLength = CPDecimalFromFloat(oneHour); x.orthogonalCoordinateDecimal = CPDecimalFromString(@"0"); x.minorTicksPerInterval = 0; x.labelOffset=0; NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; dateFormatter.dateStyle = kCFDateFormatterShortStyle; CPTimeFormatter *timeFormatter = [[[CPTimeFormatter alloc] initWithDateFormatter:dateFormatter] autorelease]; timeFormatter.referenceDate = refDate; x.labelFormatter = timeFormatter; x.majorGridLineStyle = majorGridLineStyle; x.minorGridLineStyle = minorGridLineStyle; x.title=@"Time Axis"; //Y-Axes formatting CPXYAxis *y = axisSet.yAxis; y.majorIntervalLength = [ [ NSDecimalNumber decimalNumberWithString:@"10.0" ] decimalValue ]; y.orthogonalCoordinateDecimal = CPDecimalFromString(@"0"); y.minorTicksPerInterval = 5; y.labelOffset = 0.0; y.majorGridLineStyle = majorGridLineStyle; y.minorGridLineStyle = minorGridLineStyle; y.preferredNumberOfMajorTicks = 10; y.minorTickLineStyle = nil; y.labelTextStyle = nil; y.visibleRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0.0f) length:CPDecimalFromFloat(100.0f)]; CPConstraints yConstraints = {CPConstraintFixed, CPConstraintFixed}; y.isFloatingAxis=YES; y.constraints=yConstraints; // Create a plot that uses the data source method CPScatterPlot *dataSourceLinePlot = [[[CPScatterPlot alloc] init] autorelease]; dataSourceLinePlot.identifier = @"Date Plot"; dataSourceLinePlot.dataLineStyle = lineStyle; dataSourceLinePlot.dataSource = self; [graph addPlot:dataSourceLinePlot]; mydata = [[NSMutableArray alloc]initWithObjects: [NSDecimalNumber numberWithInt:0], nil ]; //a timer to re-load the graph every 2 seconds and re-draw x-axis Timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(testingTimer:) userInfo:nil repeats:YES]; } -(NSUInteger)numberOfRecordsForPlot:(CPPlot *)plot { return mydata.count; } -(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index { switch ( fieldEnum ) { case CPScatterPlotFieldX: return (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index]; case CPScatterPlotFieldY: return [mydata objectAtIndex:index]; } return nil; } -(void) testingTimer: (NSTimer *) Timer{ //generating random number and add to mydata array testdata=arc4random() % 100; [mydata addObject:[NSNumber numberWithInt:testdata]]; [graph reloadData]; count++; CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace; plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(count) length:CPDecimalFromFloat(5*30.0f)]; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload