Core Plot如何使图例仅显示绘制的线条

时间:2013-03-30 23:55:52

标签: core-plot legend

我使用相同的散点图来显示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个)?

1 个答案:

答案 0 :(得分:2)

+legendWithGraph:方法使用在调用之前添加到图表中的所有绘图构建图例。如果您在没有先删除不需要的图表的情况下在图表上调用它,它们出现在图例中。我看到了几个选项:

  1. 如评论中所述,在不使用图表时从图表中删除图表,并根据需要创建新图例。

  2. 使用+legendWithPlots:创建图例。传递您想要在图例中表示的图表数组。

  3. CPTLegend的{​​{1}}和-addPlot:方法与-removePlot:中的方法类似。使用它们可以根据需要更新现有图例,而不是每次都创建新图例。