【问题标题】:Colorbar for errorbar on matplotlibmatplotlib 上错误栏的颜色栏
【发布时间】:2017-08-09 21:25:13
【问题描述】:

我有一个数量的一维数组,比如 T。我有数据点 (X, Y) 要用误差线绘制并用 T 进行颜色编码。

我将误差线绘制为:

import numpy as np
import matplotlib.pyplot as plt 
import matplotlib.pylab as pylab
import matplotlib

X = np.linspace(0, 10, 50) 
Y = np.random.normal(0, 1, 50)                                                                                                               
E = np.random.normal(0, 0.1, 50) 

norm = matplotlib.colors.Normalize(vmin=0, vmax=0.5)
c_m  = matplotlib.cm.jet
s_m  = matplotlib.cm.ScalarMappable(cmap=c_m, norm=norm)
s_m.set_array([])

plt.figure()
for i in range(0, len(Y)):
    plt.errorbar(X[i], Y[i], color=s_m.to_rgba(E[i]), yerr=[E[i], E[i]], capsize=3, ls='none')
plt.grid()
plt.show()

这似乎不起作用。说:

err must be [ scalar | N, Nx1 or 2xN array-like ]

对于 plt.plot,如果我说 N 条曲线,每条曲线都有 M 个点,我必须用 T 对每条曲线进行颜色编码,(尺寸:X[M],Y[N][M],T[N] )

我执行以下操作:

norm = matplotlib.colors.Normalize(
vmin=0,
vmax=32)

# choose a colormap
c_m = matplotlib.cm.jet
# create a ScalarMappable and initialize a data structure
s_m = matplotlib.cm.ScalarMappable(cmap=c_m, norm=norm)
s_m.set_array([])

plt.figure()
for i in range(0, N):
    plt.plot(X, Y[i], color=s_m.to_rgba(T[i]))
plt.grid()
plt.show()

此方案适用于情节!但似乎不适用于错误栏和一维数组。

但是,由于在绘图 (2D) 和误差条 (1D) 的情况下数组维度不同,因此我不确定比较好到什么程度。

编辑:

找到解决方案。它根本与彩条无关。只是 yerr 阵列需要 2XN 阵列。

因此 yerr=[[E[i]], [E[i]]] 修复它。

【问题讨论】:

  • “用于颜色参数的 s_m.to_rgba(T)”是什么意思并不清楚。我建议您使用 plt.plot 提供一个可行的解决方案,这将清楚您如何使用它。然后我们可以将它扩展到错误栏。
  • 添加了进程。

标签: python matplotlib


【解决方案1】:

我仍然没有发现问题。用plt.errorbar 替换plt.plot 就可以了:

import matplotlib.pyplot as plt
import matplotlib.colors
import matplotlib.cm
import numpy as np

N=3
x=np.arange(10)
Y = np.random.rand(len(x),N)
a = np.ones_like(x)*0.1
T = np.array([5,12,27])

plt.figure()

norm = matplotlib.colors.Normalize(vmin=0,vmax=32)
# choose a colormap
c_m = matplotlib.cm.jet
# create a ScalarMappable and initialize a data structure
s_m = matplotlib.cm.ScalarMappable(cmap=c_m, norm=norm)
s_m.set_array([])

for i in range(0, N):
    plt.errorbar(x, Y[:,i], yerr=[a,a], color=s_m.to_rgba(T[i]),  capsize=3, ls='none')
plt.grid()
plt.grid()

plt.show()

【讨论】:

  • 非常感谢。但是,对于误差线的情况,我有 X、Y 的一维数组。对于绘图,我有数据的二维数组。因此,我试图将后者的代码用于前者。很抱歉之前没有说清楚。我现在已经编辑了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多