2012-07-12 17 views
6

साझा करने वाले दो भूखंड मैं कोर प्लॉट के साथ प्रदान किए गए एपलॉट नमूने के समान दो चार्ट सेट अप करने का प्रयास कर रहा हूं। इसमें मूल रूप से एक स्टॉक चार्ट होता है, जो लगभग सही ढंग से दिखाया जाता है और दूसरा चार्ट (वॉल्यूम चार्ट), जिसे स्टॉक चार्ट के नीचे सीधे रखा जाना चाहिए। दोनों चार्टों को एक ही एक्स अक्ष साझा करना चाहिए।कोर प्लॉट: एक ही एक्स अक्ष

दुर्भाग्य से वॉल्यूम चार्ट का डेटा मेरे ऐप में प्लॉट नहीं किया जा रहा है।

भले ही मैंने अपने साथ नमूना स्रोत कोड की तीव्रता से तुलना की, मुझे मेरी त्रुटि का स्रोत नहीं मिला।

क्या आप मुझे सही दिशा में इंगित कर सकते हैं?

यह मेरा कोड है: के बजाय:

- (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

जब तुम सिर्फ [volumePlot _graph addPlot] तो क्या होगा [addPlot toPlotSpace _graph: volumePlotSpace]?

मुझे लगता है कि आपने उन सभी प्लॉट रिक्त स्थानों का उपयोग करके कुछ अतिरिक्त संयम जोड़े हैं और यह आपके दोनों भूखंडों को दिखने से रोक रहा है।

मुझे ईमानदार होने के बावजूद पूरी तरह से यकीन नहीं है, मैं अभी भी कोर प्लॉट सीख रहा हूं, मेरे द्वारा आने वाले अधिकांश समाधान आस-पास खेलने और गुगल करने के परिणाम हैं। अगर मैं कुछ और सोचता हूं तो मैं इस पोस्ट को संपादित करूंगा।

+0

कोड की रेखा को बदलते समय समस्या वही रहती है। असल में, मैंने सिर्फ एप्लोट नमूना से स्रोत कोड पोर्ट किया है, लेकिन यह मेरे सेट-अप में काम नहीं करता है। – AlexR

+0

मुझे पता है कि प्लॉट्स को कैसे सेट अप करने की आवश्यकता है, इसके बीच कुछ अंतर हैं, लेकिन आप वॉल्यूम प्लॉट को ग्राफ की सीमाओं के साथ प्रारंभ नहीं करते हैं। साथ ही, क्या आपने डीबगर के माध्यम से भाग लिया है, क्या आपका वॉल्यूम प्लॉट वास्तव में मौजूद है या जानकारी है? –

+0

वॉल्यूमप्लॉट के लिए डेटा मौजूद है, डेटासॉर सही डेटा प्रदान करता है। मैंने वॉल प्लॉट नमूना में वॉल्यूम प्लॉट (मेरे कोड में: वैल्यूएशन प्लॉट) स्थापित किया है। – AlexR