簡體   English   中英

matplotlib 顏色線根據大小

[英]matplotlib color lines according to magnitude

我有一些線,線上的每個點都被分配了一定的大小。 我想用與該幅度相對應的顏色繪制線條。 有一種方法可以用 scatter 做類似的事情,但這只會繪制顏色編碼的點。

我更喜歡散點圖來顯示線條,因為它會使放大時看起來更好。增加點數對我來說不是一個選擇,因為在我的現實世界問題中,這在計算上太昂貴了。 點之間的插值可以通過相鄰點之間的簡單插值來完成。

散點圖的小例子

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
z = np.cos(x)
y2 = np.sin(x)+0.4
z2 = 0.5*np.cos(2*x)
x3 = np.hstack((x,x))
y3 = np.hstack((y,y2))
z3=np.hstack((z,z2))

fig = plt.figure()
ax = fig.add_subplot(111)
#ax.scatter(x, y, c=z)
#ax.scatter(x, y2, c=z2)
sc = ax.scatter(x3, y3, c=z3)
cbar = fig.colorbar(sc)
plt.show()

您可以將線條分割成一些小段,然后根據某個值為每個段設置不同的顏色。 出於性能原因,您可以使用LineCollection 以下代碼供您參考:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.collections as mcollection
import matplotlib.colors as mcolors

def seg_plot(ax, X, Y, Z, cmap=None, alpha=None, **kargs):
    if cmap is None:
        cmap = plt.get_cmap()
    P = np.array([X, Y]).T.reshape(-1, 1, 2)
    S = np.concatenate([P[:-1], P[1:]], axis=1)
    norm = mcolors.Normalize(vmin=Z.min(), vmax=Z.max())
    C = cmap(norm(Z))
    L = mcollection.LineCollection(S, color=C, alpha=alpha, **kargs)
    ax.add_collection(L)
    ax.set_xlim(X.min(), X.max())
    ax.set_ylim(1.1*Y.min(), 1.1*Y.max())

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
z = np.cos(x)
y2 = np.sin(x)+0.4
z2 = 0.5*np.cos(2*x)

fig, ax = plt.subplots()
seg_plot(ax, x, y, z, linewidth=2)
seg_plot(ax, x, y2, z2, linewidth=2)
ax.set_ylim([-2, 2])

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM