我使用相同的散点图来显示5行或4行,具体取决于要显示的数据类型。将行放在散点图上的代码是:
if (typeSelector.selectedSegmentIndex == 0) {
if ([plot.identifier isEqual:@"Hotel"]) { nums = valuesQT1; }
if ([plot.identifier isEqual:@"Retail"]) { nums = valuesQT2; }
if ([plot.identifier isEqual:@"Office"]) { nums = valuesQT3; }
if ([plot.identifier isEqual:@"Industrial"]) { nums = valuesQT4; }
if ([plot.identifier isEqual:@"Apartment"]) { nums = valuesQT5; }
}
else {
if ([plot.identifier isEqual:@"East"]) { nums = valuesQR1; }
if ([plot.identifier isEqual:@"South"]) { nums = valuesQR2; }
if ([plot.identifier isEqual:@"Midwest"]) { nums = valuesQR3; }
if ([plot.identifier isEqual:@"West"]) { nums = valuesQR4; }
}
因此,当typeSelector为0时,图例应显示酒店,零售,办公室,工业和公寓的样本和标签,并且当typeSelector为1时,应显示东,南,中西部和西部的样本和标签
所有散点图都使用相同的折线图:
lineChart = [[CPTXYGraph alloc] initWithFrame:CGRectZero];
linePlotView.hostedGraph = lineChart;
每个数据集都添加到lineChart中:
[lineChart addPlot:amtPlot1];
[lineChart addPlot:amtPlot2];
[lineChart addPlot:amtPlot3];
等等。
标签代码如下:
// Add legend
if (typeSelector.selectedSegmentIndex == 0) {
CPTLegend *theLegend = [CPTLegend legendWithGraph:lineChart];
theLegend.swatchSize = CGSizeMake(30.0, 20.0);
CPTMutableTextStyle *blackTextStyle = [CPTMutableTextStyle textStyle];
blackTextStyle.color = [CPTColor blackColor];
blackTextStyle.fontSize = 12.0;
theLegend.numberOfRows = 5;
lineChart.legend = theLegend;
lineChart.legend.fill = [CPTFill fillWithColor:[CPTColor whiteColor]];
lineChart.legendAnchor = CPTRectAnchorLeft;
lineChart.legendDisplacement = CGPointMake(100.0, 0.0);
}
这适用于散点图上第一组5行。但是,当我在第二组4行上使用类似代码时,第一组中的图例样本和标签与第二组一起显示。
我只想要一个带有5个样本和第一组标签的图例,以及带有4个样本和第二组标签的图例。
这是否可能无需创建两个单独的图表,如lineChart1(前5个)和lineChart2(后者4个)?
答案 0 :(得分:2)
+legendWithGraph:
方法使用在调用之前添加到图表中的所有绘图构建图例。如果您在没有先删除不需要的图表的情况下在图表上调用它,它们将出现在图例中。我看到了几个选项:
如评论中所述,在不使用图表时从图表中删除图表,并根据需要创建新图例。
使用+legendWithPlots:
创建图例。传递您想要在图例中表示的图表数组。
CPTLegend
的{{1}}和-addPlot:
方法与-removePlot:
中的方法类似。使用它们可以根据需要更新现有图例,而不是每次都创建新图例。