पायथन में स्कैटर प्लॉट और कलर मैपिंग


91

मेरे पास अंक x की एक सीमा है और y को खस्ता सरणियों में संग्रहीत किया गया है। वे एक्स (टी) और वाई (टी) का प्रतिनिधित्व करते हैं जहां टी = 0 ... टी -1

मैं एक तितर बितर साजिश का उपयोग कर रहा हूँ

import matplotlib.pyplot as plt

plt.scatter(x,y)
plt.show()

मैं समय का प्रतिनिधित्व करने वाला एक कॉलोर्माप होना चाहता हूं (इसलिए अंक के आधार पर अंकों को रंग देना)

ऐसा करने का सबसे आसान तरीका क्या है?

जवाबों:


168

यहाँ एक उदाहरण है

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(100)
y = np.random.rand(100)
t = np.arange(100)

plt.scatter(x, y, c=t)
plt.show()

यहां आप इंडेक्स के आधार पर रंग सेट कर रहे हैं t, जो सिर्फ एक सरणी है [1, 2, ..., 100]यहाँ छवि विवरण दर्ज करें

शायद आसानी से समझ में आने वाला उदाहरण थोड़ा सरल है

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)
y = x
t = x
plt.scatter(x, y, c=t)
plt.show()

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

ध्यान दें कि आप जिस सरणी से गुजरते हैं, cउसे किसी विशेष क्रम या प्रकार की आवश्यकता नहीं है, अर्थात उसे इन उदाहरणों की तरह क्रमबद्ध या पूर्णांक बनाने की आवश्यकता नहीं है। प्लॉटिंग रूटीन, कॉलोर्मैप को मापता है जैसे कि कॉलोर्मैप cके निचले / शीर्ष के अनुरूप न्यूनतम / अधिकतम मान ।

Colormaps

आप कॉलोरामैप को जोड़कर बदल सकते हैं

import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.cmap_name)

आयात matplotlib.cmकरना वैकल्पिक है क्योंकि आप कॉलॉर्मैप को भी कॉल कर सकते हैं cmap="cmap_name"। कॉलॉर्मैप का एक संदर्भ पृष्ठ है जिसमें दिखाया गया है कि प्रत्येक कैसा दिखता है। यह भी जान लें कि आप एक कॉलॉर्मैप को केवल इसे कॉल करके रिवर्स कर सकते हैं cmap_name_r। तो या तो

plt.scatter(x, y, c=t, cmap=cm.cmap_name_r)
# or
plt.scatter(x, y, c=t, cmap="cmap_name_r")

काम करेगा। उदाहरण हैं "jet_r"या cm.plasma_r। यहां नया 1.5 कॉलोरम वर्जिन के साथ एक उदाहरण दिया गया है:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)
y = x
t = x
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.scatter(x, y, c=t, cmap='viridis')
ax2.scatter(x, y, c=t, cmap='viridis_r')
plt.show()

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

colorbars

आप का उपयोग करके एक colorbar जोड़ सकते हैं

plt.scatter(x, y, c=t, cmap='viridis')
plt.colorbar()
plt.show()

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

ध्यान दें कि अगर आप आंकड़े और subplots उपयोग कर रहे हैं स्पष्ट रूप से (उदाहरण के लिए fig, ax = plt.subplots()या ax = fig.add_subplot(111)), एक colorbar जोड़ने थोड़ा और अधिक शामिल हो सकता है। एक सिंगल सबप्लॉट कलरबार के लिए और यहां 2 सबप्लोट्स 1 कलरबार के लिए अच्छे उदाहरण मिल सकते हैं ।


1
आप plt.colorbar()कमांड के साथ रंगों के लिए एक किंवदंती प्राप्त कर सकते हैं ।
ड्रेविको जूल

कोड यहाँ बदल गया प्रतीत होता है। cmap = cm.colormap_name अब cmap = cm.cmapname होना चाहिए।
क्रिस

@ cmarti1138 मुझे यकीन नहीं है कि आपका क्या मतलब है, cm.colormap_nameऔर cm.cmapnameवास्तविक चर नहीं matplotlib.cm; यह बस के लिए cm.jetcm.veridis_r
छद्मकोड है

क्या पहले से प्लॉट किए गए वक्र की सूची cmapया परिवर्तन का कोई तरीका है c?
गुइमूटे

10

ऊपर wflynny के उत्तर को जोड़ने के लिए, आप यहां उपलब्ध कॉलवर्म पा सकते हैं

उदाहरण:

import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.jet)

या वैकल्पिक रूप से,

plt.scatter(x, y, c=t, cmap='jet')

3

सबप्लॉट कलरबार

तितर बितर के लिए सबप्लॉट्स के लिए, आप एक माध्यमिक आकृति की मदद से "मैपेबल" का निर्माण करके और फिर इसे अपने मूल प्लॉट में जोड़कर अपने अक्षों पर एक रंगीन पट्टी को रौंद सकते हैं।

उपरोक्त उदाहरण की निरंतरता के रूप में:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y = x
t = x
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.scatter(x, y, c=t, cmap='viridis')
ax2.scatter(x, y, c=t, cmap='viridis_r')


# Build your secondary mirror axes:
fig2, (ax3, ax4) = plt.subplots(1, 2)

# Build maps that parallel the color-coded data
# NOTE 1: imshow requires a 2-D array as input
# NOTE 2: You must use the same cmap tag as above for it match
map1 = ax3.imshow(np.stack([t, t]),cmap='viridis')
map2 = ax4.imshow(np.stack([t, t]),cmap='viridis_r')

# Add your maps onto your original figure/axes
fig.colorbar(map1, ax=ax1)
fig.colorbar(map2, ax=ax2)
plt.show()

COLORBAR के साथ स्कैटर सबप्लॉट

ध्यान दें कि आप एक द्वितीयक आंकड़ा भी आउटपुट करेंगे जिसे आप अनदेखा कर सकते हैं।

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