माटप्लोटलिब स्कैप्लोट; एक तीसरे चर के एक समारोह के रूप में रंग


152

मैं एक स्कैटलप्लॉट (मैटप्लोटलिब का उपयोग करके) बनाना चाहता हूं जहां अंक एक तीसरे चर के अनुसार छायांकित होते हैं। मैं इसके साथ बहुत करीब हो गया हूं:

plt.scatter(w, M, c=p, marker='s')

जहाँ w और M डेटापॉइंट हैं और p वह वेरिएबल है जिसे मैं सम्मान के साथ शेड करना चाहता हूँ।
हालाँकि मैं इसे रंग के बजाय ग्रीस्केल में करना चाहता हूं। क्या कोई मदद कर सकता है?

जवाबों:


156

रंगों को मैन्युअल रूप से सेट करने की कोई आवश्यकता नहीं है। इसके बजाय, एक स्केल कॉलॉर्मैप निर्दिष्ट करें ...

import numpy as np
import matplotlib.pyplot as plt

# Generate data...
x = np.random.random(10)
y = np.random.random(10)

# Plot...
plt.scatter(x, y, c=y, s=500)
plt.gray()

plt.show()

यहाँ छवि विवरण दर्ज करें

या, यदि आप कॉलोरामैप्स की एक विस्तृत श्रृंखला पसंद करते हैं, तो आप cmapkwarg को भी निर्दिष्ट कर सकते हैं scatter। इनमें से किसी के उल्टे संस्करण का उपयोग करने के लिए, बस _rउनमें से किसी के " " संस्करण को निर्दिष्ट करें। के gray_rबजाय gray। ऐसे कई विभिन्न ग्रेस्केल colormaps पूर्व निर्मित (उदाहरण के लिए कर रहे हैं gray, gist_yarg, binary, आदि)।

import matplotlib.pyplot as plt
import numpy as np

# Generate data...
x = np.random.random(10)
y = np.random.random(10)

plt.scatter(x, y, c=y, s=500, cmap='gray')
plt.show()

1
धन्यवाद! क्या कुल वजन के एक निश्चित राशि वाले इन बिंदुओं को गोल करने के लिए वैसे भी है?
थॉमस कॉललेट

6
mpl.cmके रूप में भी सीधे उपलब्ध है plt.cm
हेल्टनबिकर

@ थोमस कोललेट: यदि आप कॉन्ट्रोवर्सीज करना चाहते हैं, तो आपको डेटा को एक 2 डी मैट्रिक्स के पॉइंट के रूप में प्रक्षेपित करना होगा, फिर उस प्लॉट का उपयोग करना चाहिए plt.contour()या plt.contourf()- लेकिन यह एक अलग प्रश्न है
Zak

आप लेजेंड में लेबल कैसे जोड़ सकते हैं? इस मामले में निरंतर संख्याओं के साथ, मुझे संदेह है कि आप कलरबार का उपयोग करेंगे। असतत मूल्यों के मामले में क्या है? उदाहरण के लिए मैं अपनी तीन श्रेणियों के लिए किंवदंती में 3 लेबल जोड़ सकता हूं?
नैट

26

मैटप्लोटलिब में ग्रे रंगों को 0-1 के बीच संख्यात्मक मूल्य की एक स्ट्रिंग के रूप में दिया जा सकता है।
उदाहरण के लिएc = '0.1'

फिर आप अपने तीसरे चर को इस रेंज के अंदर एक मान में बदल सकते हैं और इसका उपयोग अपने बिंदुओं को रंगने के लिए कर सकते हैं।
निम्नलिखित उदाहरण में मैंने बिंदु की y स्थिति का उपयोग उस मूल्य के रूप में किया है जो रंग निर्धारित करता है:

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [125, 32, 54, 253, 67, 87, 233, 56, 67]

color = [str(item/255.) for item in y]

plt.scatter(x, y, s=500, c=color)

plt.show()

यहाँ छवि विवरण दर्ज करें


3
यदि आप cचौथे कॉलम में अल्फा मान के साथ तर्क के रूप में (n, 4) आकार का सरणी प्रदान करते हैं, तो रिकॉर्ड के लिए, आप एक कॉलोर्म के रूप में अल्फा लागू कर सकते हैं । यदि तीसरा चर Z के साथ है shape=(n,1), तो colors = numpy.hstack((numpy.zeros_like(z), numpy.zeros_like(z), numpy.ones_like(z), z/z.max()))एक बहुत अच्छा प्रभाव देता है (निश्चित रूप से इसे ट्विक किया जा सकता है)।
हेलटनबीकर

मुझे एक त्रुटि मिलती है: 'आरजीबीए अनुक्रम की लंबाई 3 या 4 होनी चाहिए'
मैटचोक्रैन

1
@MattClimbs मुझे संदेह है कि आप उदाहरण के रूप में plt.scatter के बजाय plt.plot कह रहे हैं।
स्मैशब्रॉन

आप इस प्लॉट में एक कलरबार कैसे जोड़ते हैं?
फाकॉफी

2
@ फाफाजी plt.colorbar()ऐसा करेंगे
मैथ्यू सैवेज

10

कभी-कभी आपको एक्स-मूल्य मामले के आधार पर रंग को सटीक रूप से प्लॉट करने की आवश्यकता हो सकती है । उदाहरण के लिए, आपके पास 3 प्रकार के चर और कुछ डेटा बिंदुओं के साथ एक डेटाफ्रेम हो सकता है। और आप निम्नलिखित करना चाहते हैं,

  • लाल में भौतिक चर 'ए' के ​​अनुरूप प्लॉट अंक।
  • ब्लू में भौतिक चर 'बी' के अनुरूप प्लॉट अंक।
  • GREEN में भौतिक चर 'C' के अनुरूप प्लॉट अंक।

इस स्थिति में, आपको एक सूची के रूप में संबंधित रंग नामों के लिए x-मानों को मैप करने के लिए लघु फ़ंक्शन को लिखना होगा और फिर उस सूची को plt.scatterकमांड में पास करना होगा।

x=['A','B','B','C','A','B']
y=[15,30,25,18,22,13]

# Function to map the colors as a list from the input list of x variables
def pltcolor(lst):
    cols=[]
    for l in lst:
        if l=='A':
            cols.append('red')
        elif l=='B':
            cols.append('blue')
        else:
            cols.append('green')
    return cols
# Create the colors list using the function above
cols=pltcolor(x)

plt.scatter(x=x,y=y,s=500,c=cols) #Pass on the list created by the function here
plt.grid(True)
plt.show()

रंग परिवर्तन प्लॉट एक्स चर के एक समारोह के रूप में


कैसे इस साजिश के लिए एक रंग पट्टी बनाने के लिए?
मरियम रहमानी मोघदाम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.