[英]Python/matplotlib: how do I change the color and/or symbol of every nth data point in a plot?
我對 Python 的體驗非常基礎。 我編寫了 Python 代碼來從外部文件導入數據並執行計算。 我的結果看起來像這樣(實際上要大得多)。
1 1
1 1957
1 0.15
2 346
2 0.90
2 100
3 1920
3 100
3 40
我要做的是 plot 這兩列作為一個系列,然后根據一定的模式區分每個數據點。 我知道這聽起來不必要地復雜,但我需要做一些事情來幫助將使用我的代碼的人。 不幸的是,我的 Python 技能在這里失敗了。 進一步來說:
1.第一列有“1”、“2”或“3”。 所以首先我想讓所有的“1”數據點變成圓形(例如),所有的“2”數據點都是其他符號,同樣的“3”數據點也是如此。
2.接下來。 每個不同的數字有三行。 所以對於“1”,第二列的“0.15”是平均值,“1957”是最大值,“1”是最小值。 我想將與每個數字的平均值(每個數字的頂行)關聯的數據點設為綠色(例如)。 我希望最大值和最小值也有自己的 colors。
所以我最終會得到一個 plot 只顯示一個系列,但每個數據點看起來不同。 如果有人能指出我正確的方向,我將不勝感激。 如果我沒有說清楚,請告訴我,我會再試一次!
對於不同的標記 styles 您當前需要創建不同的 plot 實例(請參閱此 github 問題)。 使用不同的 colors 可以通過傳遞一個數組作為color
參數來完成。 例如:
import matplotlib.pyplot as plt
import numpy as np
data = np.array([
[1, 0.15],
[1, 1957],
[1, 1],
[2, 346],
[2, 0.90],
[2, 100],
[3, 1920],
[3, 100],
[3, 40],
])
x, y = np.transpose(data)
symbols = ['o', 's', 'D']
colors = ['blue', 'orange', 'green']
for value, marker in zip(np.unique(x), symbols):
mask = (x == value)
plt.scatter(x[mask], y[mask], marker=marker, color=colors)
plt.show()
我要做的是將數據分成三個不同的列,這樣你就有了幾個系列。 然后我會使用帶有不同標記的 plt.scatter 來獲得所需的效果。
代碼
import matplotlib.pyplot as plt
import numpy as np
# Fixing random state for reproducibility
np.random.seed(19680801)
N = 100
r0 = 0.6
x = 0.9 * np.random.rand(N)
y = 0.9 * np.random.rand(N)
area = (20 * np.random.rand(N))**2 # 0 to 10 point radii
c = np.sqrt(area)
r = np.sqrt(x ** 2 + y ** 2)
area1 = np.ma.masked_where(r < r0, area)
area2 = np.ma.masked_where(r >= r0, area)
plt.scatter(x, y, s=area1, marker='^', c=c)
plt.scatter(x, y, s=area2, marker='o', c=c)
# Show the boundary between the regions:
theta = np.arange(0, np.pi / 2, 0.01)
plt.plot(r0 * np.cos(theta), r0 * np.sin(theta))
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.