2011-12-07 19 views
2

ココアのコアプロットでCPTBarPlotに問題があります。 つまり、バーのステップ幅を制御することはできません。 X軸のティックは通常1から無限大の整数として設定され、スキャッタプロットを描画します。コアプロットのCPTBarPlotの棒がX軸に一致しない

しかし、棒グラフを描くと、最初のティックで最初の列だけが開始されます(もちろん、適切なオフセットが適用されます)。第二のスクリーンショットに示すように第3であり、他のすべてのビットは、さらに、そのティックを形成している:私は、しかし、これを制御するための任意のプロパティを発見していない

enter image description here

、私は、そのデータソース方法を見出し

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

散布図を描画するときとは異なる動作をします。つまり、CPTBarPlotBindingBarTipsであり、他の定数を列挙しない整数3のみを列挙します。特にCPTBarPlotBindingBarLocationsがない場合には気になります。

私がPlot Gallery mac demoプロジェクトからVerticalBarChartを起動した場合、私は同じ方法が3,4と2の定数を同じ順序で列挙していることを確認しました。

私はCore Plot 0.9を使用しています。つまり、このデモと同じと思います。まだ...

これを解決するには?

ここにX軸のラベルとティックの完全なコードを示します。

x.labelRotation = M_PI/4; 
    x.labelingPolicy = CPTAxisLabelingPolicyNone; 
    x.labelOffset = 0.0; 

    CPTMutableTextStyle *labelStyle = [CPTMutableTextStyle textStyle]; 
    labelStyle.fontSize = 9.0; 
    x.labelTextStyle = labelStyle; 

// NSMutableArray *dateArray = [dataSeries objectAtIndex:0]; 
    NSMutableArray *customTickLocations = [NSMutableArray array]; 
    NSMutableArray *xAxisLabels = [NSMutableArray array]; 

    for (int i=0;i<[dataSeries count];i++) { 

     [customTickLocations addObject:[NSDecimalNumber numberWithInt:i+1]]; 
     [xAxisLabels addObject:[dataSeries objectAtIndex:i]]; 

    } 

    // [customTickLocations addObject:[NSDecimalNumber numberWithInt:[dateArray count]]]; 

    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; 
     newLabel.rotation = M_PI/4; 
     [customLabels addObject:newLabel]; 
     [newLabel release]; 
    } 

    [x setMajorTickLocations:[NSSet setWithArray:customTickLocations]]; 

    x.axisLabels = [NSSet setWithArray:customLabels]; 

私は散布図は、同じプロットのスペース上に描画されたときと同じティックが使用されていることを追加する必要があり、それは完全に一致した....

答えて

2

fieldパラメータは、この列挙型のメンバーのいずれかになります:プロットのplotRangeプロパティがnil(デフォルト)である

typedef enum _CPTBarPlotField { 
    CPTBarPlotFieldBarLocation = 2, ///< Bar location on independent coordinate axis. 
    CPTBarPlotFieldBarTip  = 3, ///< Bar tip value. 
    CPTBarPlotFieldBarBase  = 4 ///< Bar base (used only if barBasesVary is YES). 
} CPTBarPlotField; 

場合、プロットは各バーの場所とヒントのためのデータソースを要求します。 barBasesVary == YESの場合、各バーの基準値も求められます。

+0

ご迷惑をおかけして申し訳ありません。あなたがここに書いたことが働きます。 barBasesVaryがyesでない場合、CPTBarPlotFieldBarTipだけがデリゲートによって反復され、他の2つの列挙は反復されません。しかし、これを実装しても、バーステップオフセットの問題は解決しません...とにかくありがとうございます。 – mbpro

+0

あなたのバーの場所と大目盛りの位置が並んでいません。ソリューションは、使用している軸のラベル付けポリシーと、データソースがバーの位置をどのように計算するかによって異なります。プロットセットアップとデータソースコードを投稿して、修正方法の具体的な提案をしてください。 –

+0

私はコードを追加しました、ごめんなさい。 samコードが同じデータを持つ散布図に完全にマッチするという事実に注意してください。 – mbpro

関連する問題