1

複数のグラフを描画する必要があります.1つのY値を赤、青のグラフに、Y2軸の値を緑のグラフに考慮する必要があります.コアプラットライブラリを使用しています......以下のようなことを行い、下の画像のようなグラフを取得します.しかし、y と y2 に異なる値を設定する必要があります。ここに画像の説明を入力描き方がわかりません...助けてください...

CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace;
    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(self.xRangeMinVal) length:CPTDecimalFromInt(self.xRangeMaxVal)];
    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(self.yRangeMinVal) length:CPTDecimalFromInt(self.yRangeMaxVal)];
    //plotSpace.allowsUserInteraction = YES;
    //plotSpace.delegate = self;

    // Grid line styles
    CPTMutableLineStyle *majorGridLineStyle = [CPTMutableLineStyle lineStyle];
    majorGridLineStyle.lineWidth = 0.75;
    majorGridLineStyle.dashPattern = [NSArray arrayWithObjects:[NSNumber numberWithFloat:2.0f], nil];
    majorGridLineStyle.lineColor = [[CPTColor colorWithGenericGray:0.4] colorWithAlphaComponent:0.4];
    CPTMutableLineStyle *minorGridLineStyle = [CPTMutableLineStyle lineStyle];
    minorGridLineStyle.lineWidth = 0.25;
    minorGridLineStyle.lineColor = [[CPTColor colorWithGenericGray:0.4] colorWithAlphaComponent:0.1];    

    CPTMutableTextStyle *textStyle = [CPTTextStyle textStyle];
    textStyle.color                   = [CPTColor blackColor];
    textStyle.fontSize                = 16.0f;
    textStyle.textAlignment           = CPTTextAlignmentCenter;


    CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle];
    axisLineStyle.lineWidth = 3.0;
    axisLineStyle.lineCap   = kCGLineCapRound;
    // Axes
    // Label x axis with a fixed interval policy
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.graph.axisSet;
    CPTXYAxis *x = axisSet.xAxis;
    x.majorIntervalLength = CPTDecimalFromString(@"2.0");
    x.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0.0");
    x.minorTicksPerInterval = 1;
    x.majorGridLineStyle = majorGridLineStyle;
    x.minorGridLineStyle = minorGridLineStyle;
    //x.preferredNumberOfMajorTicks=;

    x.labelingPolicy = CPTAxisLabelingPolicyAutomatic;
    //x.title = [NSString stringWithFormat:@"goat"];
    //x.titleOffset = 10.0;
    //x.titleLocation = CPTDecimalFromString(@"0.0");
    x.title = self.xLineTitle;
    x.axisLineStyle            = axisLineStyle;
    x.titleTextStyle = textStyle;

    CPTMutableLineStyle *dottedStyle=[CPTMutableLineStyle lineStyle];


    x.minorGridLineStyle=dottedStyle;

    // Label y with an automatic label policy. 
    CPTXYAxis *y = axisSet.yAxis;
    y.labelingPolicy = CPTAxisLabelingPolicyAutomatic;
   // y.orthogonalCoordinateDecimal = CPTDecimalFromString(@"-10.0");
    y.minorTicksPerInterval = 2;
    y.preferredNumberOfMajorTicks = 8;
    y.majorGridLineStyle = majorGridLineStyle;
    y.minorGridLineStyle = minorGridLineStyle;
    //y.labelOffset = 1.0;
    y.title = self.yLineTitle;
    y.titleTextStyle = textStyle;
    y.axisLineStyle            = axisLineStyle;
    y.titleRotation = M_PI * 0.5;
    y.minorGridLineStyle=dottedStyle;


    CPTXYPlotSpace *plotSpace1 = (CPTXYPlotSpace *)self.graph.defaultPlotSpace;
   // CPTXYPlotSpace *plotSpace1 = [[[CPTXYPlotSpace alloc] init] autorelease];
    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(self.xRangeMinVal) length:CPTDecimalFromInt(self.xRangeMaxVal)];
    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0) length:CPTDecimalFromInt(60)];
    CPTXYAxis *y2 = [[[CPTXYAxis alloc] init] autorelease];
    y2.coordinate                  = CPTCoordinateY;
    y2.plotSpace                   = plotSpace1;
    y2.majorGridLineStyle          = majorGridLineStyle;
    y2.minorGridLineStyle          = minorGridLineStyle;
    y2.orthogonalCoordinateDecimal = CPTDecimalFromDouble(self.xRangeMaxVal);
    y2.labelingPolicy              = CPTAxisLabelingPolicyAutomatic;
    //y2.separateLayers            = NO;
    y2.preferredNumberOfMajorTicks = 7;
    y2.minorTicksPerInterval       = 2;//
    y2.tickDirection               = CPTSignPositive;
    y2.axisLineStyle               = axisLineStyle;
    //y2.majorTickLength               = 6.0;
    y2.majorTickLineStyle          = axisLineStyle;
    //y2.minorTickLength               = 4.0;
    y2.title                       = @"Y2 Axis";
    //y2.titleTextStyle            = axisTitleTextStyle;
    y2.titleOffset                 = 40.0;

    //graph.axisSet.axes = [NSArray arrayWithObjects:x, y, y2, nil];
    self.graph.axisSet.axes = [NSArray arrayWithObjects:x, y,y2,nil];
4

2 に答える 2

1

1 つのプロット スペースに複数の x 軸または y 軸を追加することはできません。

あなたがしたいことは何でも、プロットで動的なy軸またはx軸を作成するだけです。

y 軸の最大値がこれであり、x 軸の最大値があることを計算するだけです。

ただし、同じプロット スペースに対して y 軸と x 軸を 1 つだけ使用する必要があります。

于 2012-06-04T07:09:11.673 に答える
0

問題は、両方のプロット スペースを self.graph.defaultPlotSpace に追加している可能性があります。CPTGraph で addPlotSpace メソッドを使用してみてください。また、CPTPlotSpaces ごとに一意の CPTPlotSpace 識別子属性を使用してみてください。

于 2012-06-04T06:20:53.527 に答える