1

こんにちは、誰かが私が遭遇したこの問題を手伝ってくれませんか

棒グラフの幅が等しくないことを意味するコアプロットで棒グラフをプロットできますか? X 軸の間隔が 1 単位で、棒グラフの幅を同じ 1 単位に設定したとします。しかし、x軸の値が0.5単位で変化する特定のポイントがあり、バーの幅を変化が発生した幅と等しくしたい. そして、データは動的に変化しています。私が使用でき、まだ棒グラフのように見える他の解決策はありますか? バーを使用する唯一の理由は、プロット スペースを埋める必要があるからです。

CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)barChart.defaultPlotSpace;
        plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromInt(0) 
                                                       length:CPDecimalFromInt(rangeY)];
        plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-0.5f) 
                                                       length:CPDecimalFromFloat(rangeX)];

        CPXYAxisSet *axisSet = (CPXYAxisSet *)barChart.axisSet;
        CPXYAxis *x = axisSet.xAxis;
        x.axisLineStyle = nil;
        x.majorTickLineStyle = nil;
        x.minorTickLineStyle = nil;
        x.majorIntervalLength = CPDecimalFromString(@"1");
        x.orthogonalCoordinateDecimal = CPDecimalFromString(@"0");

        x.title = [[[tempCol colName] componentsSeparatedByString:@"*@"] objectAtIndex:0];
        x.titleLocation = CPDecimalFromFloat((rangeX-1)/2);
        x.titleOffset = 25.0f;

        // Define some custom labels for the data elements
        x.labelRotation = 0;
        x.labelingPolicy = CPAxisLabelingPolicyNone;
        NSMutableArray *customTickLocations = [[NSMutableArray alloc] init];
        NSMutableArray *xAxisLabels = [[NSMutableArray alloc] init];
        for (int i = 0; i < [tempGraph.d2pArray count]; i++) {
            tempD2P = [tempGraph.d2pArray objectAtIndex:i];
            [customTickLocations addObject:[NSNumber numberWithInt:i]];
            [xAxisLabels addObject:[tempD2P d2pName]];
        }
        NSUInteger labelLocation = 0;
        NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:[xAxisLabels count]];
        for (NSNumber *tickLocation in customTickLocations) {
            CPAxisLabel *newLabel = [[CPAxisLabel alloc] 
                                     initWithText:[xAxisLabels objectAtIndex:labelLocation++] 
                                     textStyle:x.labelTextStyle];
            newLabel.tickLocation = [tickLocation decimalValue];
            newLabel.offset = 0;
            newLabel.rotation = 0;
            newLabel.alignment = CPAlignmentCenter;     
            [customLabels addObject:newLabel];
            [newLabel release];
            newLabel = nil;
        }
        [xAxisLabels release];
        xAxisLabels = nil;
        [customTickLocations release];
        customTickLocations = nil;
        x.axisLabels =  [NSSet setWithArray:customLabels];

        CPXYAxis *y = axisSet.yAxis;
        CPLineStyle *majorGridLineStyle = [CPLineStyle lineStyle];
        majorGridLineStyle.lineWidth = 0.75;
        majorGridLineStyle.lineColor = [CPColor colorWithCGColor:[[UIColor grayColor] CGColor]];
        y.axisLineStyle = nil;
        y.majorTickLineStyle = nil;
        y.majorGridLineStyle = majorGridLineStyle;
        y.minorTickLineStyle = nil;
        y.majorIntervalLength = CPDecimalFromInt(rangeY/8);
        y.orthogonalCoordinateDecimal = CPDecimalFromString(@"-0.5");
        y.title = [[[tempCol colName] componentsSeparatedByString:@"*@"] objectAtIndex:1];
        y.titleOffset = 30 + 5*log10(mult);
        y.titleLocation = CPDecimalFromInt(rangeY/2);
        NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
        [formatter setMaximumFractionDigits:0];
        y.labelFormatter = formatter;
        [formatter release];
        formatter = nil;
        char firstChar = 'F';
        CPBarPlot *barPlot;
        // First bar plot
        for (int i = 0; i < noOfBarCharts; i++) {
            static CPTextStyle *whiteText = nil;
            if ( !whiteText ) {
                whiteText = [[CPTextStyle alloc] init];
                whiteText.color = [CPColor whiteColor];
                whiteText.fontSize = 14;
            }
            barPlot = [CPBarPlot tubularBarPlotWithColor:[CPColor colorWithComponentRed:[[[rgbArray objectAtIndex:0] objectAtIndex:i] floatValue]/255.0 
                                                                                  green:[[[rgbArray objectAtIndex:1] objectAtIndex:i] floatValue]/255.0 
                                                                                   blue:[[[rgbArray objectAtIndex:2] objectAtIndex:i] floatValue]/255.0 
                                                                                  alpha:1.0] 
                                          horizontalBars:NO];
            barPlot.baseValue = CPDecimalFromString(@"0");
            barPlot.dataSource = self;
            barPlot.barOffset = ([tempGraph.graType rangeOfString:@"GROUPED"].location != NSNotFound)?(i+0.5)-(noOfBarCharts/2):0;
            barPlot.labelOffset = 0;
            barPlot.barWidth = 20;
            barPlot.identifier = [NSString stringWithFormat:@"%d%c", [tempGraph.graID intValue], (firstChar - noOfBarCharts +1 + i)];
            barPlot.delegate = self;




            [barChart addPlot:barPlot 
                  toPlotSpace:plotSpace];
4

2 に答える 2

1

棒グラフを使用する代わりに、ステップグラフを使用した散布図を使用して、自分でそれを見つけました。

Plot.interpolation = CPTScatterPlotInterpolationStepped;

そしてプロットを次のように埋めました:

Plot.areaFill = [CPTFill fillWithColor:[CPTColor blueColor]];
Plot.areaBaseValue = CPTDecimalFromInteger(0);
于 2012-07-13T20:59:50.937 に答える
0

バーに境界線を配置しない場合は、バーの幅をバー間の距離の半分にして、幅の広いバーを 2 倍にすることができます。

于 2012-07-12T00:53:33.823 に答える