2011-11-20 6 views
100

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

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

जहां डब्ल्यू और एम datapoints हैं और पी चर मैं के संबंध में छाया करना चाहते हैं।
हालांकि मैं इसे रंग के बजाय ग्रेस्केल में करना चाहता हूं। क्या कोई मदद कर सकता है?

उत्तर

19

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

फिर आप अपने तीसरे चर को इस सीमा के अंदर एक मान में परिवर्तित कर सकते हैं और अपने बिंदुओं को रंगने के लिए इसका उपयोग कर सकते हैं।

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

enter image description here

+2

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

+1

डाउनवोट क्यों? – joaquin

+0

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

101

मैन्युअल रंग सेट करने के लिए कोई ज़रूरत नहीं है:
निम्न उदाहरण में मैं मूल्य उस रंग को निर्धारित करता है के रूप में बिंदु के y स्थिति का इस्तेमाल किया। इसके बजाय, एक ग्रेस्केल रंग मैप निर्दिष्ट ...

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

enter image description here

या, यदि आप एक wider range of colormaps करना चाहते तो भी scatter करने के लिए cmap kwarg निर्दिष्ट कर सकते हैं। इनमें से किसी के उलट संस्करण का उपयोग करने के लिए, उनमें से किसी के "_r" संस्करण को निर्दिष्ट करें। जैसे gray_rgray के बजाय। प्री-मेड (उदाहरण के लिए 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' के रूप में भी उपलब्ध है। – heltonbiker

+0

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

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