私は非常に乱雑なプロットを持っているので、それを整理するために、アルファ値を減らして、エラーバーが大きいポイントの重要性を低くしたいと考えています。できれば、エラーバーのサイズに応じて、アルファ値の連続スケール(カラーマップなど)を各ポイントとそのエラーバーにマッピングしたいと思います-これを行うための最良/効率的な方法が何であるかはあまりわかりません.
質問する
3796 次
2 に答える
3
確かにエラーバーのアルファを設定できますが、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()
ただし、作成した効果がデータを誤って表している可能性があるかどうかを検討する必要がある場合があります (つまり、小さなエラー バーを持つポイントのみを強調することにより、実際よりも正確に見えるようにします)。
于 2015-12-21T14:22:00.427 に答える
1
散布図の 3 番目の変数として色を設定できます (この回答を参照してください)。アルファを変更するには、スケーリングされた範囲に基づいて色の 4 番目の値 (透明度) のみを変更できます。最小限の例として、
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()
于 2015-12-21T12:44:08.253 に答える