簡體   English   中英

使用matplotlib中的大小縮放誤差條透明度

[英]Scale errorbar transparency with the size in matplotlib

我有一個非常混亂的情節,所以,為了整理它,我想通過減少它們的alpha值使那些具有較大誤差條的點不太重要。 最好,我想根據它們的錯誤欄大小將連續的alpha值(如顏色圖)映射到每個點及其錯誤欄 - 我不太確定這樣做的最佳/有效方法是什么。

您當然可以設置錯誤欄的alpha,但我認為您需要單獨繪制每個,因為Matplotlib不會將垂直線和線條的不透明度(或顏色)設置為序列(據我所知)。

如果您希望標記的不透明度與錯誤欄匹配,則可能更容易根據某些標准化構建一系列顏色:

import numpy as np
import matplotlib.pyplot as plt

n = 20
x = np.linspace(1, 10, n)
y = x - x**2
minerr = 2
yerr = abs(np.random.randn(n) * 15) + minerr
maxerr = max(yerr)
err_range = maxerr - minerr

alphas = [1 - (err-minerr)/(err_range) for err in yerr]
colors = np.asarray([(1,0,0, alpha) for alpha in alphas])

plt.scatter(x,y, c=colors, edgecolors=colors)
for pos, ypt, err, color in zip(x, y, yerr, colors):
    plotline, caplines, (barlinecols,) = plt.errorbar(pos, ypt, err, lw=2, color=color, capsize=5, capthick=2)

plt.xlim(0,11)
plt.show()

在此輸入圖像描述

但是,您可能想要考慮您創建的效果是否可能錯誤地表示您的數據(即通過僅強調具有小誤差條的點來使其看起來比它更准確)。

您可以將顏色設置為散點圖上的第三個變量(請參閱此答案 )。 要更改Alpha,您可以根據縮放范圍僅更改顏色的第四個值(透明度)。 作為一個最小的例子,

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 20, 100)
y = np.sin(x)
z = x + 20 * y

scaled_z = (z - z.min()) / z.ptp()
colors = [[0., 0., 0., i] for i in scaled_z]

plt.scatter(x, y, marker='x', edgecolors=colors, s=150, linewidths=4)
plt.show()

看起來像 在此輸入圖像描述

暫無
暫無

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

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