(X, y) की एक सूची प्लॉटिंग अजगर मेपलोटलिब में समन्वयित करता है


110

मेरे पास उन जोड़ों की एक सूची है (a, b)जिन्हें मैं matplotlibअजगर के साथ वास्तविक xy निर्देशांक के रूप में साजिश करना चाहता हूं । वर्तमान में, यह दो प्लॉट बना रहा है, जहां सूची का सूचकांक एक्स-कोऑर्डिनेट करता है, और पहले प्लॉट के y मान aजोड़े में s हैं और दूसरे प्लॉट के y मान bजोड़े में s हैं ।

स्पष्ट करने के लिए, मेरा डेटा इस तरह दिखता है: li = [(a,b), (c,d), ... , (t, u)] मैं एक-लाइनर करना चाहता हूं जो सिर्फ plt.plot()गलत कहता है। अगर मुझे एक-लाइनर की आवश्यकता नहीं है तो मैं तुच्छता से कर सकता हूं:

xs = [x[0] for x in li]
ys = [x[1] for x in li]
plt.plot(xs, ys)

मैं कैसे xy निर्देशांक के रूप में इन जोड़ियों को प्लॉट करने के लिए matplotlib प्राप्त कर सकता हूं?

जवाबों:


180

इस उदाहरण के अनुसार :

import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)

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

उत्पादन करेंगे:

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

सूचियों के उपयोग में जोड़े से अपने डेटा को अनपैक करने के लिए zip:

x, y = zip(*li)

तो, एक-लाइनर:

plt.scatter(*zip(*li))

7
एक 2-स्तंभ numpy सरणी के लिए, plt.scatter( * xy.T )काम करता है: छोटे और के लिए अस्पष्टx, y = xy.T; plt.scatter( x, y )
Denis

2
x, y = zip(*li)वास्तव में सुंदर अजगर कोड है! मैं प्रत्येक लाइन पर एक सूची संपीड़न के साथ कोड के अधिक सीधे-आगे दो पंक्तियों को कर रहा हूं (मूल प्रश्न की तरह)
ट्रेवर बॉयड स्मिथ

1
यह इस तरह का भ्रम है कि plt.scatterप्रश्न के साथ यादृच्छिक उदाहरण का क्या करना है।
jamesdlin

36

यदि आपके पास एक सुस्पष्ट सरणी है तो आप यह कर सकते हैं:

import numpy as np
from matplotlib import pyplot as plt

data = np.array([
    [1, 2],
    [2, 3],
    [3, 6],
])
x, y = data.T
plt.scatter(x,y)
plt.show()

1
तो वहाँ एक है करने के लिए कोई रास्ता नहीं है np.arrayकी data=np.array([[x1,y1],[x2,y2],etc.])और का उपयोग कर plt.plot(data)। मुझे हमेशा सरणियों के सरणियों के बजाय दो सरणियाँ देनी होंगी?
मैक्स कोपलान

1
@MaxCoplan, यह सही है, लेकिन आप उपयोग कर सकते हैं plt.plot(*data.T)जो ऊपर के समान है लेकिन मध्यवर्ती चरण को छोड़ देता है।
ज़वेदीएंड

7

यदि आप सूची में सभी बिंदुओं को जोड़ने वाली एक पंक्ति को प्लॉट करना चाहते हैं

plt . plot ( li [ : ] )

plt . show ( )

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


3
वह एक भी लाइन नहीं बनाना चाहता था, वह "वन-लाइनर" (कोड की एक पंक्ति) के साथ साजिश करना चाहता था। उत्तर वह खोज रहा था (और 3 साल पहले मिला) का उपयोग करना था scatter()
डार्टमाउथ

8
चूंकि यह उत्तर उस स्थिति को बताता है जिसके तहत यह काम करता है अर्थात "यदि आप सूची में सभी बिंदुओं को जोड़ने वाली एक ही लाइन को प्लॉट करना चाहते हैं", तो क्या यह वास्तव में डाउन वोट के लायक है?
गाथाईड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.