2011-02-25 8 views
7

आईफोन में कोर-प्लॉट में ग्रेडियंट स्कैटर प्लॉट में नकारात्मक मूल्यों के लिए क्षेत्र ढाल रंग कैसे बदलें?आईफोन: कोर प्लॉट में नकारात्मक मूल्यों के लिए ढाल रंग कैसे बदलें?

मैं नीचे के रूप में ढाल रंग हैं: ऋणात्मक मानों लाल होने के लिए सकारात्मक मूल्यों ग्रीन

  • होने की

    • लिए।

    मुझे यह कैसे करना चाहिए?

  • +0

    संभवत: आपको अपने मूल्यों को सामान्य बनाने की आवश्यकता होगी। जो मैं देख सकता हूं, सीपीजीडेंट केवल 'CGFloat 0 - 1' स्वीकार करता है। इसलिए यदि आपके मान -1024 से +1024 तक हैं, तो आपको कुल सीमा से ऑफ़सेट जोड़ने और विभाजित करने की आवश्यकता होगी। यह आपको 0-1 से एक नंबर देगा। मैं निश्चित रूप से उत्तर नहीं दे सकता, बी/सी मैंने कोरप्लॉट के साथ कभी काम नहीं किया है। –

    +0

    @ स्टीफन फर्लानी: इनपुट के लिए धन्यवाद। मैं तुमने कहा के बारे में स्पष्ट नहीं हूँ। क्या आप कृपया इसे विस्तार से समझा सकते हैं –

    +0

    आप जानते हैं, या तो समय से पहले, या अपने डेटा सेट को देखकर, कि सभी मान 'n' ऐसे हैं जैसे 'j ≤ n ≤ k'। फिर, आप ढाल मान को '(एन - जे)/(के - जे) 'के रूप में प्राप्त कर सकते हैं, जो कि' [0-1]' श्रेणी में होगा। यह रैखिक रूप से 'j' और' k' के बीच इंटरपोलेट करता है। – tJener

    उत्तर

    3

    बस को लागू CPBarPlotDataSource के लिए निम्न विधि ठीक है:

    - (CPFill *)barFillForBarPlot:(CPBarPlot *)barPlot recordIndex:(NSUInteger)index 
    { 
        if (barPlot.identifier == @"profit") { 
         id item = [self.profits objectAtIndex:index]; 
         double profit = [[item objectForKey:@"profit"] doubleValue]; 
    
         if (profit < 0.0) { 
          return [CPFill fillWithGradient:[CPGradient gradientWithBeginningColor:[CPColor redColor] endingColor:[CPColor blackColor]]]; 
         } 
        } 
    
        return nil; 
    } 
    

    आशा मदद करने के लिए :)

    +0

    मुझे यकीन नहीं है कि इस उत्तर को प्रश्न के रूप में स्वीकार किए जाने के रूप में चिह्नित क्यों किया गया है एक बिखरने वाली साजिश के बारे में है। जब मैं '-barFillForBarPlot को लागू करता हूं: recordIndex: 'स्कैटर प्लॉट का उपयोग करते समय, विधि को कभी नहीं कहा जाता है। इस मुद्दे को कैसे ठीक किया? – simonbs

    2

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

    CPScatterPlot *positivePlot = [[[CPScatterPlot alloc] init] autorelease]; 
    positivePlot.identifier = @"PositivePlot"; 
    positivePlot.dataSource = self; 
    [graph addPlot:positivePlot]; 
    
    CPScatterPlot *negativevePlot = [[[CPScatterPlot alloc] init] autorelease]; 
    negativevePlot.identifier = @"NegativePlot"; 
    negativePlot.dataSource = self; 
    [graph addPlot:negativePlot]; 
    

    अब, अगर आप अपने plotSpaces ठीक से कॉन्फ़िगर, आप धनात्मक और ऋणात्मक मानों को अलग करने और प्रत्येक भूखंड ठीक से कॉन्फ़िगर कर सकते हैं, क्षेत्र ढाल सहित:

    CPXYPlotSpace *positivePlotSpace = [graph newPlotSpace]; 
    positivePlotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0) 
                  length:CPDecimalFromFloat(100)]; 
    positivePlotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0) 
                  length:CPDecimalFromFloat(100)]; 
    
    CPXYPlotSpace *negativevePlotSpace = [graph newPlotSpace]; 
    negativePlotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-100) 
                  length:CPDecimalFromFloat(100)]; 
    negativePlotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0) 
                  length:CPDecimalFromFloat(100)]; 
    
    
    // Plots configuration 
    
    
    //POSITIVE VALUES 
    positivePlot.plotSpace = positivePlotSpace; 
    
    // Green for positive 
    CPColor *areaColor = [CPColor colorWithComponentRed:0.0 
                  green:1.0 
                  blue:0.0 
                  alpha:1.0]; 
    CPGradient *areaGradient = [CPGradient gradientWithBeginningColor:areaColor 
                    endingColor:[CPColor clearColor]]; 
    areaGradient.angle = -90.0f; 
    CPFill *areaGradientFill = [CPFill fillWithGradient:areaGradient]; 
    positivePlot.areaFill = areaGradientFill; 
    
    
    //NEGATIVE VALUES 
    negativePlot.plotSpace = negativePlotSpace; 
    
    // Red for negative 
    areaColor = [CPColor colorWithComponentRed:1.0 
                green:0.0 
                 blue:0.0 
                alpha:1.0]; 
    areaGradient = [CPGradient gradientWithBeginningColor:areaColor 
                  endingColor:[CPColor clearColor]]; 
    areaGradient.angle = -90.0f; 
    areaGradientFill = [CPFill fillWithGradient:areaGradient]; 
    negativePlot.areaFill = areaGradientFill; 
    

    नोट: इस के ऊपर से है मेरे सिर, क्योंकि मेरे पास कोर-प्लॉट दस्तावेज़ नहीं हैं, या इस में परीक्षण करने के लिए एक कार्यप्रणाली कॉन्फ़िगरेशन है, इसलिए वाक्यविन्यास या कुछ बंद हो सकता है, लेकिन मुझे लगता है कि सामान्य अवधारणा को काम करना चाहिए।

    चीयर्स

    संबंधित मुद्दे