核心绘图折线图 - 将鼠标悬停/单击图表以查看值 - macOS



我正在使用CorePlot在我的macOS应用程序中绘制一个简单的折线图。

CPTXYGraph *newGraph = [[CPTXYGraph alloc] initWithFrame:CGRectZero];
CPTTheme *theme      = [CPTTheme themeNamed:kCPTDarkGradientTheme];
[newGraph applyTheme:theme];
self.graph = newGraph;
self.hostView.hostedGraph = newGraph;
newGraph.plotAreaFrame.paddingTop   = 10.0;
newGraph.plotAreaFrame.paddingBottom   = 30.0;
newGraph.plotAreaFrame.paddingLeft   = 40.0;
newGraph.plotAreaFrame.paddingRight  = 10.0;
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)newGraph.defaultPlotSpace;
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@(1.0) length:[NSNumber numberWithUnsignedInteger:[dataArray count]-1]];
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@102.0];
plotSpace.allowsUserInteraction = YES;
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)newGraph.axisSet;
CPTXYAxis *x          = axisSet.xAxis;
//x.majorIntervalLength   = @1;
x.majorIntervalLength   = [NSNumber numberWithInt:numberOfIntervalsX];
x.orthogonalPosition    = @(0);
x.minorTicksPerInterval = 0;
x.labelOffset  = 0;
CPTXYAxis *y = axisSet.yAxis;
y.majorIntervalLength   = @5;
y.minorTicksPerInterval = 0;
y.orthogonalPosition    = @(1.0);
y.labelOffset  = 0.0;
CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init];
CPTMutableLineStyle *lineStyle = [dataSourceLinePlot.dataLineStyle mutableCopy];
lineStyle.lineWidth              = 2.;
lineStyle.lineColor              = [CPTColor greenColor];
dataSourceLinePlot.dataLineStyle = lineStyle;

dataSourceLinePlot.dataSource = self;
[newGraph addPlot:dataSourceLinePlot];

我预计悬停/单击以查看值将是默认行为,但看起来不是。我尝试搜索论坛,但没有运气。我假设这将是非常简单的。不确定我是否错过了什么。

据我所知,你的印象是正确的,没有内置的数据值叠加。 但是,您可以自己制作。 CorePlot 具有indexOfVisiblePointClosestToPlotAreaPoint:功能,它应该为您提供向图表添加带点值的标签所需的参考。

  • (NSUInteger) indexOfVisiblePointClosestToPlotAreaPoint:

返回最近点的索引,如果没有可见点,则返回 NSNotFound 的索引。

然后,您可以对图形托管视图进行子类化,实现鼠标移动事件以捕获鼠标坐标,并从那里执行您想要选择如何显示点的任何逻辑。

我不会说它特别容易实现,但至少它是直截了当的。 我希望它有所帮助!

引用:

http://core-plot.github.io/MacOS/interface_c_p_t_scatter_plot.html#a57eacc8261a4d4a1399f1196be786cff https://stackoverflow.com/a/21819342/357288

最新更新