2011-11-07 13 views
7

का उचित प्रारूपण डेटा का एक सेट ग्राफ़ करने के लिए कोरप्लॉट का उपयोग कर रहा हूं। मेरे एक्स-अक्ष के लिए डेटा में तिथियां होती हैं, जबकि मेरे वाई-अक्ष के डेटा में फ्लोट होते हैं (जो मैं फिर NSNumber में बदल जाता हूं)। मुझे फ़ीड से डेटा मिल रहा है, और फ़ीड बड़ी संख्या में दशमलव के साथ संख्या देता है, उदाहरण के लिए: 0.46673718852844, 4.59392222219, 353.1293012045। मैं कोड का निम्न भाग का उपयोग कर रहा ठीक से y- अक्ष फ़ॉर्मेट करने के लिए:आईफोन कोरप्लॉट वाई-अक्ष

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[numberFormatter setMaximumFractionDigits:3]; 
[numberFormatter setPositiveFormat:@"###0.000"];  
CPTXYAxis *y = axisSet.yAxis; 
y.labelingPolicy = CPTAxisLabelingPolicyAutomatic; 
y.minorTicksPerInterval = 1; 
y.preferredNumberOfMajorTicks = 5; 
y.labelFormatter = numberFormatter; 

ज्यादातर मामलों में, सब कुछ ठीक काम करता है। हालांकि, कभी-कभी यह धुरी के साथ कई स्थितियों पर एक ही मान प्रदर्शित करता है। नीचे चित्र देखें:

enter image description here

मूल्यों को सही ढंग से प्रस्तुत कर रहे हैं, मैं सिर्फ अनावश्यक (0.466) लेबल से बचने के लिए चाहते हैं। मैं भी numberForPlot विधि में 3 दशमलव के संख्या पूर्णांक बनाना की कोशिश की है:

if(fieldEnum == CPTScatterPlotFieldY) 
{ 
     float floatNum = r.value; 
     floatNum *= 1000; 
     int intValue = (int) floatNum; 
     float decimal = floatNum - intValue; 
     if (decimal > 0.5) { 
      intValue++; 
     } 
     floatNum = intValue /1000.0; 
     return [NSNumber numberWithFloat:floatNum]; 

} 

लेकिन वहाँ लेबल में कोई अंतर नहीं है।

उत्तर

1

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

+0

समस्या यह है कि यह मेरे आवेदन में एकमात्र ग्राफ नहीं है, और 5 टिक आमतौर पर सर्वश्रेष्ठ दिखते हैं। अंक के साथ एक ही चीज़ - तीन आमतौर पर पर्याप्त है, 4 अंकों को दिखाने की आवश्यकता नहीं है। आह, अनुमान है कि मुझे ग्राफ के कुछ मैन्युअल सेटअप करना होगा। धन्यवाद वैसे भी – Maggie

+0

मेरा समाधान अक्ष श्रेणी के आधार पर गतिशीलता की संख्या को गतिशील रूप से बदलना था। – Jackson

0

मेरा मानना ​​है कि क्योंकि आपने कहा है कि आप 5 प्रमुख टिक चाहते हैं, यही वह है जो आप प्राप्त करने जा रहे हैं, भले ही वाई अक्ष मान कितने करीब हों। यदि आप समझते हैं कि मान एक साथ बहुत करीब हैं, तो आपको शायद अपनी पसंदीदा NumberOfMajorTicks प्रॉपर्टी को समायोजित करना होगा।

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

+0

लेबलिंग मैन्युअल रूप से लेबल सेट करने के लिए आप किस लेबलिंग का उपयोग करते हैं? – Maggie

+0

@ मैगी थोड़ा देर हो चुकी है, लेकिन यह होगा: सीपीटीएक्सिस लेबलिंग पॉलिसीन –

0

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

  CPTXYAxis *y   = axisSet.yAxis; 
      { 
       y.preferredNumberOfMajorTicks = round([newYRange.length floatValue]/0.001); 
      } 

मुझे उम्मीद है कि इससे मदद मिलती है।