2012-07-12 177 views
6

我试图设置两个图表,类似于Core绘图提供的AAPlot示例。 它基本上包含一个几乎正确显示的股票图表和一个应放置在股票图表正下方的第二个图表(交易量图表)。两个图表应该共享相同的x轴。核心绘图:共享相同x轴的两个绘图

不幸的是,体积图的数据没有被绘制在我的应用程序中。

尽管我强烈地将示例源代码与我的比较,但我没有发现我的错误的来源。

请你指点我正确的方向?

这是我的代码:代替:当你只是做[volumePlot _graph addPlot]

- (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]]; 
} 

回答

1

您从未设置卷绘图空间的绘图空间范围。它仍然有默认的x和y范围[0,1]。

3

会发生什么[_graph addPlot toPlotSpace:volumePlotSpace]?

我在想你可能已经使用所有这些不同的情节空间添加了一些额外的限制,并且保持你的情节不会出现。

虽然说实话,我也不是很确定,但我刚刚也在学习Core Plot,我提出的大多数解决方案都是大量玩弄和搜索的结果。如果我想到别的东西,我会编辑这篇文章。

+0

更改代码行时问题仍然存在。基本上,我只是从AAPlot示例中移植源代码,但它在我的设置中不起作用。 – AlexR 2012-07-12 19:51:31

+0

我知道如何设置绘图有一些区别,但是您不用图的边界初始化容积图。另外,你是否运行过调试器,你的volumePlot是否存在或包含信息? – 2012-07-12 19:59:13

+0

volumePlot的数据确实存在,数据源提供正确的数据。我已经在Core Plot示例中设置了体积图(在我的代码:评估图中)。 – AlexR 2012-07-12 20:20:30