如何使用coreplot在两个散点图之间添加偏移量

时间:2012-02-13 14:38:11

标签: ios core-plot

我添加了两个带有barOffset的条形图,以便两个条形图并排显示。

我还想使用相同的数据添加两个散点图,每个散点图分别触及每个条形图的尖端。

以下是我添加两个散点图的方法。

//Add line graph 1
    CPTScatterPlot *dataSourceLinePlot = [[[CPTScatterPlot alloc] init] autorelease];
    dataSourceLinePlot.identifier = @"Scatter-Plot-1";

    CPTMutableLineStyle *lineStyle = [[dataSourceLinePlot.dataLineStyle mutableCopy] autorelease];
    lineStyle.miterLimit = 1.0f;
    lineStyle.lineWidth = 3.0f;
    lineStyle.lineColor = [CPTColor orangeColor];
    dataSourceLinePlot.dataLineStyle = lineStyle;

    dataSourceLinePlot.dataSource = self;
    [graph addPlot:dataSourceLinePlot toPlotSpace:barPlotSpace];

    //Add line graph 2
    CPTScatterPlot *dataSourceLinePlot2 = [[[CPTScatterPlot alloc] init] autorelease];
    dataSourceLinePlot2.identifier = @"Scatter-Plot-2";

    CPTMutableLineStyle *lineStyle2 = [[dataSourceLinePlot.dataLineStyle mutableCopy] autorelease];
    lineStyle2.miterLimit = 1.0f;
    lineStyle2.lineWidth = 3.0f;
    lineStyle2.lineColor = [CPTColor greenColor];

    dataSourceLinePlot2.dataLineStyle = lineStyle2;
    dataSourceLinePlot2.dataSource = self;
    [graph addPlot:dataSourceLinePlot2 toPlotSpace:barPlotSpace];

但是现在当数据值相同时,两个散点图都从第一个条形图本身开始

我希望他们每个人都只触摸条形图。

我该怎么做?是否有某种事情barOffset分散移动它?

我正确实现了代理,数据也正确显示

2 个答案:

答案 0 :(得分:0)

如果barWidthsAreInViewCoordinates为NO(默认值),则只需在数据源的x或y坐标中添加或减去barOffset

答案 1 :(得分:0)

您也可以调整plotSpace的偏移量 例如从0.4开始 - barPlotSpace.xRange = CPTPlotRange(位置:0.5,长度:NSNumber(值:结束)) 但在这种情况下,你的整个情节正在转变。

或者如上所述更好: 在数据源'号'

public func number(for plot: CPTPlot, field: UInt, record: UInt) -> Any?
{
    let idt = plot.identifier as! NSString;

    switch CPTBarPlotField(rawValue: Int(field))! {
    case .barLocation:
        if idt.compare("Scatter-Plot-1") == .orderedSame {
            // This will shift the Scatter-Plot-1 to the left
            return NSNumber(value: Double(record) + 0.5)
        } else {
            return record as NSNumber
        }
    case .barTip:
        //Enter your code
        return nil

    default:
        return nil
    }
}