6

CorePlotで提供されているAAPlotサンプルに似た2つのチャートを設定しようとしています。これは基本的に、ほぼ正しく表示される株価チャートと、株価チャートのすぐ下に配置する必要がある2番目のチャート(ボリュームチャート)で構成されます。両方のチャートは同じx軸を共有する必要があります。

残念ながら、ボリュームチャートのデータは私のアプリにプロットされていません。

サンプルのソースコードを自分のものと徹底的に比較しましたが、エラーの原因が見つかりません。

正しい方向に向けてください。

これは私のコードです:

- (void)configureChart
{
    self.graph = [[CPTXYGraph alloc] initWithFrame:self.hostView.bounds];
    self.hostView.hostedGraph = self.graph;
    self.graph.paddingLeft = 0.0f;
    self.graph.paddingTop = 0.0f;
    self.graph.paddingRight = 0.0f;
    self.graph.paddingBottom = 0.0f;
    self.graph.axisSet = nil;

    // 2 - Set up text style
    CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle];
    textStyle.color = [CPTColor grayColor];
    textStyle.fontName = @"Helvetica-Bold";
    textStyle.fontSize = 16.0f;

    // 3 - Configure title
    NSString *title = self.issue.company.companyName;
    _graph.title = title;    
    _graph.titleTextStyle = textStyle;
    _graph.titlePlotAreaFrameAnchor = CPTRectAnchorTop;    
    _graph.titleDisplacement = CGPointMake(0.0f, -12.0f);      

    // 4 - Set theme
    [self.graph applyTheme:[CPTTheme themeNamed:kCPTStocksTheme]];

    _graph.plotAreaFrame.cornerRadius  = 0.0f;
    CPTMutableLineStyle *borderLineStyle = [CPTMutableLineStyle lineStyle];
    borderLineStyle.lineColor           = [CPTColor whiteColor];
    borderLineStyle.lineWidth           = 2.0f;
    _graph.plotAreaFrame.borderLineStyle = borderLineStyle;


    // Axes
    CPTXYAxisSet *xyAxisSet        = (id)self.graph.axisSet;
    CPTXYAxis *xAxis               = xyAxisSet.xAxis;
    CPTMutableLineStyle *lineStyle = [xAxis.axisLineStyle mutableCopy];
    lineStyle.lineCap   = kCGLineCapButt;
    xAxis.axisLineStyle = lineStyle;
    xAxis.labelingPolicy = CPTAxisLabelingPolicyNone;

    CPTXYAxis *yAxis = xyAxisSet.yAxis;
    yAxis.axisLineStyle = nil;

    // OHLC plot
    CPTMutableLineStyle *whiteLineStyle = [CPTMutableLineStyle lineStyle];
    whiteLineStyle.lineColor = [CPTColor whiteColor];
    whiteLineStyle.lineWidth = 1.0f;
    CPTTradingRangePlot *ohlcPlot = [[CPTTradingRangePlot alloc] initWithFrame:self.graph.bounds];
    ohlcPlot.identifier = @"OHLC";
    ohlcPlot.lineStyle  = whiteLineStyle;
    CPTMutableTextStyle *whiteTextStyle = [CPTMutableTextStyle textStyle];
    whiteTextStyle.color    = [CPTColor whiteColor];
    whiteTextStyle.fontSize = 8.0;
    ohlcPlot.labelTextStyle = whiteTextStyle;
    ohlcPlot.labelOffset    = 5.0;
    ohlcPlot.stickLength    = 2.0f;
    ohlcPlot.dataSource     = self;
    ohlcPlot.plotStyle      = CPTTradingRangePlotStyleOHLC;
    [self.graph addPlot:ohlcPlot];

    // Add volume plot space
    CPTXYPlotSpace *volumePlotSpace = [[CPTXYPlotSpace alloc] init];
    volumePlotSpace.identifier = @"Volume";
    [_graph addPlotSpace:volumePlotSpace];

    CPTBarPlot *volumePlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor whiteColor] horizontalBars:NO];
    volumePlot.dataSource = self;

    lineStyle            = [volumePlot.lineStyle mutableCopy];
    lineStyle.lineColor  = [CPTColor whiteColor];
    volumePlot.lineStyle = lineStyle;

    volumePlot.fill       = nil;
    volumePlot.barWidth   = CPTDecimalFromFloat(1.0f);
    volumePlot.identifier = @"Volume Plot";
    [_graph addPlot:volumePlot toPlotSpace:volumePlotSpace];


    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) self.graph.defaultPlotSpace;
    [plotSpace scaleToFitPlots:[self.graph allPlots]];
}
4

2 に答える 2

3

[_graph addPlot toPlotSpace:volumePlotSpace]の代わりに[_graph addPlot:volumePlot]を実行するとどうなりますか?

これらのさまざまなプロットスペースをすべて使用して、いくつかの追加の制限を追加した可能性があり、それによって両方のプロットが表示されないようになっていると思います。

正直なところ、私は完全にはわかりませんが、Core Plotも学んでいます。私が思いついたほとんどの解決策は、たくさん遊んだりグーグルしたりした結果です。他に何か考えたら、この投稿を編集します。

于 2012-07-12T19:38:22.533 に答える
1

ボリューム プロット スペースのプロット スペース範囲を設定することはありません。[0, 1] のデフォルトの x および y 範囲がまだあります。

于 2012-07-13T13:28:33.950 に答える