0

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

4

1 回答 1

2

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

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

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

  3. CPTLegendhas-addPlot:-removePlot:方法类似于CPTGraph. 使用它们根据需要更新现有图例,而不是每次都创建新图例。

于 2013-04-01T00:09:14.647 回答