1

2つの棒グラフ(例:AとB)のグラフがあります。

1時間ごとに、2つのバープロットがあります。

凡例を設定すると、1時間ごとに見本とテキストが表示され、棒グラフが表示されます。

例:私のチャートでは4時間あると、私の凡例は次のようになります

AAAA

BBBB

そして私はただ欲しい

AB

なぜなら、毎時、バーは同じ意味です。これどうやってするの ??

私はこれを実現するためにあらゆることを試みましたが、今まで成功しませんでした。

ベローは私の

// CPTLegend *theLegend = [CPTLegend legendWithGraph:barChart];
CPTLegend *theLegend = [CPTLegend legendWithPlots:[NSArray arrayWithObjects:[barChart plotAtIndex:0],[barChart plotAtIndex:1], nil]];
theLegend.numberOfRows    = 1;
theLegend.numberOfColumns = 2;//[horas count] +1 / 2;
//theLegend.fill  = [CPTFill fillWithColor:[CPTColor colorWithGenericGray:0.15]];

//theLegend.borderLineStyle = barLineStyle;
theLegend.cornerRadius    = 10.0;
theLegend.swatchSize      = CGSizeMake(15, 15);
//whiteTextStyle.fontSize     = 16.0;
//theLegend.textStyle         = whiteTextStyle;
theLegend.rowMargin       = 10.0;
theLegend.paddingLeft     = 12.0;
theLegend.paddingTop      = 12.0;
theLegend.paddingRight    = 12.0;
theLegend.paddingBottom   = 12.0;

//theLegend.equalColumns = YES;
//theLegend.equalRows = YES;
theLegend.delegate = self;

barChart.legend = theLegend;

-(NSString *)legendTitleForBarPlot:(CPTBarPlot *)barPlot recordIndex:(NSUInteger)index {

if ( [barPlot.identifier isEqual:@"Embarque"] ) {
    if (index == 0) 
    {
        return @"Embarque";
    }else {
        return @"";
    } 
}else {
    if (index == 0) 
    {
        return @"Desembarque";
    }else {
        return @"";
    }
}   

}-(BOOL)legend:(CPTLegend *)legend shouldDrawSwatchAtIndex:(NSUInteger)index forPlot:(CPTPlot *)plot inRect:(CGRect)rect inContext:(CGContextRef)context {

if (index == 0) {
    return YES;
}else{
    return NO;
}    

}

4

2 に答える 2

1

-legendTitleForBarPlot:recordIndex:バーごとに個別のラベルが必要でない限り、このメソッドを実装しないでください。プロパティを使用しtitleて、プロットの単一の凡例タイトルを設定します。

この-legend:shouldDrawSwatchAtIndex:forPlot:inRect:inContext:メソッドは、デフォルトの見本の描画を何らかの方法で変更したい場合にのみ必要です。

于 2012-04-04T23:27:51.760 に答える
0

-(void) exibirGraficoEmbarqueDescarga {

// Create barChart from theme
barChart = [[CPTXYGraph alloc] initWithFrame:CGRectZero];
CPTTheme *theme = [CPTTheme themeNamed:kCPTPlainWhiteTheme];
[barChart applyTheme:theme];
//CPTGraphHostingView *hostingView = (CPTGraphHostingView *)self.view;
//hostingView.hostedGraph = barChart;


barChart.delegate = self;

if (chartView == nil)
{
    chartView = [[CPTGraphHostingView alloc] initWithFrame:CGRectMake(-15, 30, 350, 320)];
   // chartView = [[CPTGraphHostingView alloc] initWithFrame:CGRectMake(0, 35, 510, 280)];
    [self.view addSubview:chartView];  

} 

chartView.hostedGraph = barChart;

// Border
barChart.plotAreaFrame.borderLineStyle = nil;
barChart.plotAreaFrame.cornerRadius    = 0.0f;

// Paddings
barChart.paddingLeft   = 0.0f;
barChart.paddingRight  = 0.0f;
barChart.paddingTop    = 0.0f;
barChart.paddingBottom = 0.0f;

barChart.plotAreaFrame.paddingLeft   = 70.0;
barChart.plotAreaFrame.paddingTop    = 20.0;
barChart.plotAreaFrame.paddingRight  = 20.0;
barChart.plotAreaFrame.paddingBottom = 80.0;

// Graph title
barChart.title = @"Embarque / Descarga";
CPTMutableTextStyle *textStyle = [CPTTextStyle textStyle];
textStyle.color                   = [CPTColor grayColor];
textStyle.fontSize                = 16.0f;
textStyle.textAlignment           = CPTTextAlignmentCenter;
barChart.titleTextStyle           = textStyle;
barChart.titleDisplacement        = CGPointMake(1.0f, -20.0f);
barChart.titlePlotAreaFrameAnchor = CPTRectAnchorTop;

// Add plot space for horizontal bar charts

CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)barChart.defaultPlotSpace;
Apoio *apoio = [[Apoio alloc] init];

plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) length:CPTDecimalFromFloat([apoio retornaMaiorDadosGrafico:qtdEmb :qtdDesc])];
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) length:CPTDecimalFromFloat(16.0f)];

CPTXYAxisSet *axisSet = (CPTXYAxisSet *)barChart.axisSet;
CPTXYAxis *x          = axisSet.xAxis;

CPTMutableLineStyle *marcacaoLineStyle = [CPTLineStyle lineStyle];
marcacaoLineStyle.lineColor = [CPTColor lightGrayColor];
marcacaoLineStyle.lineWidth = 1;


x.axisLineStyle               = marcacaoLineStyle;
x.majorTickLineStyle          = marcacaoLineStyle;
x.minorTickLineStyle          = marcacaoLineStyle;
x.majorIntervalLength         = CPTDecimalFromString(@"5");
x.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0");
//x.title                         = @"Horas";
//x.titleLocation                 = CPTDecimalFromFloat(15.0f);
//x.titleOffset               = 55.0f;

// Define some custom labels for the data elements
x.labelingPolicy = CPTAxisLabelingPolicyNone;
NSArray *customTickLocations = posicao;//[NSArray arrayWithObjects:[NSDecimalNumber numberWithFloat:0.7], [NSDecimalNumber numberWithFloat:2.7], [NSDecimalNumber numberWithFloat:4.7], nil];
NSArray *xAxisLabels         = horas;//[NSArray arrayWithObjects:@"10", @"11", @"12", nil];
NSUInteger labelLocation     = 0;
NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:[xAxisLabels count]];
for ( NSNumber *tickLocation in customTickLocations ) {
    CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithText:[xAxisLabels objectAtIndex:labelLocation++] textStyle:x.labelTextStyle];
    newLabel.tickLocation = [tickLocation decimalValue];
    newLabel.offset       = x.labelOffset; //+ x.majorTickLength;
    [customLabels addObject:newLabel];
}


x.axisLabels = [NSSet setWithArray:customLabels];


CPTXYAxis *y = axisSet.yAxis;
y.axisLineStyle               = marcacaoLineStyle;
y.majorTickLineStyle          = marcacaoLineStyle;
y.minorTickLineStyle          = marcacaoLineStyle;
y.majorIntervalLength         = CPTDecimalFromInt([apoio retornaMaiorDadosGrafico:qtdEmb :qtdDesc]/7); //CPTDecimalFromString(@"5");
y.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0");
y.title = @"Containers";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setMaximumFractionDigits:0];  
y.labelFormatter = formatter; 

CPTMutableLineStyle *majorGridLineStyle = [CPTMutableLineStyle lineStyle];
majorGridLineStyle.lineWidth = 0.75;
majorGridLineStyle.lineColor = [CPTColor lightGrayColor ];

y.majorGridLineStyle = majorGridLineStyle  ;
y.preferredNumberOfMajorTicks = 10;

CPTMutableTextStyle *EixostextStyle = [CPTTextStyle textStyle];
EixostextStyle.fontSize               = 12.0f;

y.labelTextStyle = EixostextStyle;
x.labelTextStyle = EixostextStyle;

// Embaque
CPTBarPlot *barPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor darkGrayColor] horizontalBars:NO];
barPlot.baseValue  = CPTDecimalFromString(@"0");
barPlot.dataSource = self;
barPlot.delegate = self;
barPlot.barOffset  = CPTDecimalFromFloat(0.25f);
barPlot.identifier = @"Embarque";
barPlot.title = @"Embarque";
barPlot.labelOffset = 0;
[barChart addPlot:barPlot toPlotSpace:plotSpace];

//Descarga
CPTBarPlot *barPlot2 = [CPTBarPlot tubularBarPlotWithColor:[CPTColor blueColor] horizontalBars:NO];
barPlot2.baseValue  = CPTDecimalFromString(@"0");
barPlot2.dataSource = self;
barPlot2.delegate = self;
//barPlot2.barOffset  = CPTDecimalFromFloat(25f);
barPlot2.identifier     = @"Descarga";
barPlot2.title = @"Descarga";
barPlot2.labelOffset = 0;
[barChart addPlot:barPlot2 toPlotSpace:plotSpace];

CPTLegend *theLegend = [CPTLegend legendWithGraph:barChart];
theLegend.numberOfRows    = 1;
theLegend.numberOfColumns = 2;
theLegend.cornerRadius    = 10.0;
theLegend.swatchSize      = CGSizeMake(15, 15);
//whiteTextStyle.fontSize     = 16.0;
//theLegend.textStyle         = whiteTextStyle;
theLegend.rowMargin       = 10.0;
theLegend.paddingLeft     = 12.0;
theLegend.paddingTop      = 12.0;
theLegend.paddingRight    = 12.0;
theLegend.paddingBottom   = 12.0;

//theLegend.equalColumns = YES;
//theLegend.equalRows = YES;
 barChart.legend = theLegend;

}

-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot{
return [horas count];}


-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index

{ NSDecimalNumber *num = nil;

if ( [plot isKindOfClass:[CPTBarPlot class]] ) {
    switch ( fieldEnum ) {
        case CPTBarPlotFieldBarLocation:                
            if ( [plot.identifier isEqual:@"Embarque"] ) {
                num = (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index*2];
            } else{
                num = (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:(index*2+1)];
            }
            break;                
        case CPTBarPlotFieldBarTip:
            if ( [plot.identifier isEqual:@"Embarque"] ) {
                num = [qtdEmb objectAtIndex:index];
            } else{
                num = [qtdDesc objectAtIndex:index];
            }                
            break;                      
    }
}

return num;

}

-(CPTFill *)barFillForBarPlot:(CPTBarPlot *)barPlot recordIndex:(NSUInteger)index

{ if ( [barPlot.identifier isEqual:@"Embarque"] ) { return [CPTFill fillWithColor:[CPTColor colorWithComponentRed:(175/255.0) green:(238/255.0) blue:(238/255.0) alpha:1.0]]; }

if ( [barPlot.identifier isEqual:@"Descarga"] ) {
    return [CPTFill fillWithColor:[CPTColor colorWithComponentRed:(255./255.0 )  green:(228.0/255.0) blue:(181.0/255.0)  alpha:1.0]]; 
}    

}

-(CPTLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)index 
{
int  valor; 
if ( [plot.identifier isEqual:@"Embarque"] ) 
{
    valor = [qtdEmb objectAtIndex:index];
}else{
    valor =  [qtdDesc objectAtIndex:index];
}

CPTTextLayer *newLayer = [[CPTTextLayer alloc] initWithText:[[NSString alloc] initWithFormat:@"%@",valor]];  
CPTMutableTextStyle *estiloTexto = [[CPTMutableTextStyle alloc] init];
estiloTexto.color = [CPTColor blackColor];
estiloTexto.fontSize = 10;    

newLayer.textStyle = estiloTexto;
return newLayer;   

}

于 2012-04-09T14:16:05.883 に答える