it-swarm.dev

مبعثر مؤامرة ورسم الخرائط اللون في بيثون

لدي مجموعة من النقاط x و y المخزنة في صفائف numpy. يمثلان x(t) و y(t) حيث t = 0 ... T-1

أنا أرسم مؤامرة مبعثرة باستخدام

import matplotlib.pyplot as plt

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

أرغب في الحصول على صورة نقطية تمثل الوقت (وبالتالي تلوين النقاط اعتمادًا على الفهرس في الصفائف السيئة)

ما هي أسهل طريقة للقيام بذلك؟

69
Vincent

هنا مثال

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]enter image description here

ولعل مثال أسهل للفهم هو أبسط قليلاً

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

enter image description here

لاحظ أن الصفيف الذي تمرره كـ c لا يحتاج إلى أي ترتيب أو نوع معين ، أي أنه لا يحتاج إلى فرز أو أعداد صحيحة كما هو موضح في هذه الأمثلة. سيؤدي روتين التخطيط إلى تغيير حجم الصورة النقطية بحيث تتطابق القيم الدنيا/القصوى في c مع الجزء السفلي/أعلى الصورة النقطية.

Colormaps

يمكنك تغيير colormap عن طريق إضافة

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

استيراد matplotlib.cm اختياري ، حيث يمكنك استدعاء colormaps كـ cmap="cmap_name" أيضًا. هناك صفحة مرجعية من colormaps تظهر كيف يبدو كل منهما. اعلم أيضًا أنه يمكنك عكس colormap بمجرد تسميته كـ 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 الجديد من colormap viridis:

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

 enter image description here 

Colorbars

يمكنك إضافة colorbar باستخدام

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

 enter image description here 

لاحظ أنه إذا كنت تستخدم الأشكال والرموز الفرعية بشكل صريح (على سبيل المثال ، fig, ax = plt.subplots() أو ax = fig.add_subplot(111)) ، فإن إضافة شريط لون يمكن أن يكون أكثر قليلاً من المشاركة. يمكن العثور على أمثلة جيدة هنا لشريط color subplot واحد و هنا لشريطين فرعيين 1 colourbar .

129
wflynny

للإضافة إلى إجابة wflynny أعلاه ، يمكنك العثور على colormaps المتاحة هنا

مثال:

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

أو بدلا من ذلك،

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