2012-04-04 28 views
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)インデックス{

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

} - (BOOL)凡例:(CPTLegend *)凡例shouldDrawSwatchAtIndex:(NSUInteger)インデックスforPlot:(CPTPlot *)プロットinRect:(CGRect)RECT inContext :あなたは、各バーに別々のラベルを使用する場合に限り(CGContextRef)コンテキスト{

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

}

答えて

1

-legendTitleForBarPlot:recordIndex:メソッドを実装しないでください。 titleプロパティを使用して、プロットの単一の凡例タイトルを設定します。

-legend:shouldDrawSwatchAtIndex:forPlot:inRect:inContext:メソッドは、何らかの方法でデフォルトのスウォッチ図面を変更する場合にのみ必要です。

+0

おかげエリック、 Iは-legendTitleForBarPlotコメント:recordIndex:方法と-legend:shouldDrawSwatchAtIndex:forPlot:inRect:inContext:方法。 私は両方のプロットのtitleプロパティを設定しました。 しかしこれまでと同じことが起こっています。 numberOfRowsを1に、numberOfCollounsを2に変更しようとしましたが、凡例が重なりました。 http://3.bp.blogspot.com/-QQa9LKUaJHY/T32WTHFcfOI/AAAAAAAAAGI/xpruAySamrQ/s1600/Captura+de+Tela+2012-04-05+às+怒鳴る印刷画面上で見てみてください。 09.50.31+(2).png –

+0

データソースに '-barFillForBarPlot:recordIndex:'メソッドを実装しましたか?それはまた、伝説の行動を引き起こすでしょう。あなたのスクリーンショットから、それはあなたのように見えません。 –

+0

はい、私はしました。 私は完全なコードを別の答えに掲載しました。 ありがとうございました –

0

- (ボイド)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 =ゼロ、

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"]){ リターン[CPTFill fillWithColor:[CPTColor colorWithComponentRed:(175/255.0)緑:(238/255.0)青:(238/255.0)アルファ: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; 

}

関連する問題