2010-01-13 22 views
5

संपादित करें: मुझे लगता है कि मेरा प्रश्न बेहतर वाक्यांश है: मेरे पास वाई-अक्ष कैसे हो सकती है जो शून्य से शुरू नहीं होती है? ऐसा लगता है कि x-axis हमेशा y = 0 पर रखा जाता है, लेकिन मैं एक्स-अक्ष को वाई-अक्ष पर कुछ सकारात्मक संख्या पर होना चाहता हूं।आईफोन पर कोर-प्लॉट के साथ मेरा एक्स-अक्ष क्यों नहीं दिखाएगा?

यहाँ अधिक नियमित रूप से डेटा के साथ एक ग्राफ है ... मैं सिर्फ इच्छा x- अक्ष के बजाय, साजिश (लगभग 77) के लिए न्यूनतम y- मान में रखा गया था 0.

alt text पर

यहां वह फ़ंक्शन है जिसका उपयोग मैं ग्राफ बनाने के लिए करता हूं।

यह कोड का एक पूरा समूह है, और मुझे पूरा यकीन नहीं है कि एक्स-अक्ष प्रदर्शित करने के लिए कौन सा टुकड़ा बंद हो सकता है।

क्या एक्स-अक्ष प्रदर्शित नहीं हो सकता है मेरे डेटा के साथ कुछ करना है?

- (void) showGraph:(SavedDetailScreen*)dataSource { 

    // create the graph and add it to the view 
    CPXYGraph *graph = [[CPXYGraph alloc] initWithFrame: CGRectZero]; 
    graph.plotArea.masksToBorder = NO; 
    CPLayerHostingView *graphView = [[CPLayerHostingView alloc] initWithFrame:CGRectMake(0,0, 280, 240)]; 
    [self addSubview:graphView]; 
    graphView.hostedLayer = graph; 
    graph.paddingLeft = 50.0; 
    graph.paddingTop = 20.0; 
    graph.paddingRight = 10.0; 
    graph.paddingBottom = 40.0;    

    // set up the ranges for the graph axis 
    float minElevation = dataSource.track.tbStats.minAlt; 
    float maxElevation = dataSource.track.tbStats.maxAlt-dataSource.track.tbStats.minAlt; 
    float minDistance = 0.0f; 
    float maxDistance = dataSource.track.tbStats.totalDistance; 
    CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace; 
    plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(minDistance) 
              length:CPDecimalFromFloat(maxDistance)]; 
    plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(minElevation) 
               length:CPDecimalFromFloat(maxElevation)]; 

    // style the graph with white text and lines 
    CPTextStyle *whiteText = [CPTextStyle textStyle]; 
    whiteText.color = [CPColor whiteColor];    
    CPLineStyle *whiteStyle = [CPLineStyle lineStyle]; 
    whiteStyle.lineColor = [CPColor whiteColor]; 
    whiteStyle.lineWidth = 2.0f; 

    // set up the axis 
    CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet;  
    CPXYAxis *x = axisSet.xAxis; 
    CPXYAxis *y = axisSet.yAxis;    
    x.majorIntervalLength = CPDecimalFromFloat(maxDistance/10.0f); 
    x.minorTicksPerInterval = 0; 
    x.majorTickLineStyle = whiteStyle; 
    x.minorTickLineStyle = whiteStyle; 
    x.axisLineStyle = whiteStyle; 
    x.minorTickLength = 5.0f; 
    x.majorTickLength = 10.0f; 
    x.labelOffset = 3.0f; 
    x.labelTextStyle = whiteText; 
    y.majorIntervalLength = CPDecimalFromFloat(maxElevation/5.0f); 
    y.minorTicksPerInterval = 0; 
    y.majorTickLineStyle = whiteStyle; 
    y.minorTickLineStyle = whiteStyle; 
    y.axisLineStyle = whiteStyle; 
    y.minorTickLength = 5.0f; 
    y.majorTickLength = 10.0f; 
    y.labelOffset = 3.0f; 
    y.labelTextStyle = whiteText; 

    CPScatterPlot *plot = [[[CPScatterPlot alloc] initWithFrame:graph.bounds] autorelease]; 
    plot.dataLineStyle.lineWidth = 2.0f; 
    plot.dataLineStyle.lineColor = [CPColor blueColor]; 
    plot.dataSource = dataSource; 
    [graph addPlot:plot]; 
    CPPlotSymbol *greenCirclePlotSymbol = [CPPlotSymbol ellipsePlotSymbol]; 
    greenCirclePlotSymbol.fill = [CPFill fillWithColor:[CPColor greenColor]]; 
    greenCirclePlotSymbol.size = CGSizeMake(2.0, 2.0); 
    plot.plotSymbol = greenCirclePlotSymbol;     

} 

alt text

उत्तर

5

अक्ष के निरंतर कोऑर्डिनेट वैल्यू प्रॉपर्टी का उपयोग करके आप ऑर्थोगोनल धुरी पर धुरी की स्थिति सेट करते हैं। बस एक्स अक्ष पर उस संपत्ति को y के सकारात्मक मान पर सेट करें, और अक्ष को ऊपर जाना चाहिए।

1

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

+0

डेटा सब ठीक है। ग्राफ दिखाता है, वाई-अक्ष दिखाता है, वाई-अक्ष लेबल दिखाता है, साजिश दिखाती है ... बस एक्स-अक्ष दिखाई नहीं देती है, न ही इसके लेबल। डेटा के साथ एकमात्र समस्या वाई-मान कभी-कभी न्यूनतम वाई-मान से कम हो सकती है। क्या वह गड़बड़ चीजें होगी? –

+0

क्षमा करें, इस ढांचे के साथ बहुत परिचित नहीं है। लेकिन, आपके पास इस विधि के बारे में क्या है: plotRangeWithLocation: CPDecimalFromFloat (minDistance) लंबाई: CPDecimalFromFloat (maxDistance)]; क्या यह लंबाई के लिए सही मूल्य है? उदाहरण के लिए। alt के साथ आपके पास अधिकतम डेटा अधिकतम और अधिकतम के बीच अंतर है, लेकिन दूरी के लिए आपके पास 0 और डेटासॉर अधिकतम के बीच है। –

+0

इसके अलावा, एक सामान्य अवलोकन के रूप में, ऐसा लगता है कि पूरा ग्राफ वहां हो सकता है लेकिन कुछ कम वाई मानों के कारण एक्स अक्ष काटा जा रहा है। क्या आप डेटा का एक अधिक सरल डमी सेट बना सकते हैं (शायद जहां सभी क्षैतिज रेखा उत्पन्न करने के लिए समान हैं) यह देखने के लिए कि क्या एक्स अक्ष दिखाई देती है? –

6

मुझे कल/आज एक ही समस्या है और समाधान धुरी पर ऑर्थोगोनल कोऑर्डिनेटडिमल संपत्ति का उपयोग कर रहा है। उदाहरण के लिए:

graph.axisSet.xAxis.orthogonalCoordinateDecimal = CPDecimalFromFloat(minHeight); 
+0

मिनीहेइट क्या है? –

3

https://github.com/djw/core-plot/tree/9282845bddbb8c40ff314bbfa158beff797c91f7/examples

यह कहा गया है कि isFloatingAxis संपत्ति कम से कम संस्करण 0.9 से हटा दिया गया।

मैं भी रूप में अच्छी तरह http://code.google.com/p/core-plot/issues/detail?id=125

चर्चा समूह में इस पाया कुछ शिकार के बाद, यह एक धुरी फ्लोट करने के लिए नया तरीका की तरह लग रहा इस तरह दिखता है:

x.axisConstraints = [CPTConstraints constraintWithUpperOffset:132]; 
संबंधित मुद्दे