Python 如何将散点图中的错误条(x和y)与数据集(nd.数组)进行彩色映射?

Python 如何将散点图中的错误条(x和y)与数据集(nd.数组)进行彩色映射?,python,matplotlib,scatter-plot,color-mapping,Python,Matplotlib,Scatter Plot,Color Mapping,我试图创建一个带有x和y错误的散点图,这些错误在四个部分中具有不同的标记和错误条颜色(例如,红色表示x=0到x=2,蓝色表示x=2到c=5,等等)。我已经为标记使用了带边界的颜色贴图,但是我还不能为错误条做类似的事情。我曾尝试使用将标记、错误栏和大写设置为散射颜色贴图中的相同颜色,但我无法使其用于我的代码(出现了一个关于数据长度不匹配或无法转换为元组的错误)。我想我还没有能够正确地修改我用于标记的颜色贴图,或者这不是获得正确结果的最佳方式 这是一个包含一些虚构数据的示例: import nump

我试图创建一个带有x和y错误的散点图,这些错误在四个部分中具有不同的标记和错误条颜色(例如,红色表示x=0到x=2,蓝色表示x=2到c=5,等等)。我已经为标记使用了带边界的颜色贴图,但是我还不能为错误条做类似的事情。我曾尝试使用将标记、错误栏和大写设置为散射颜色贴图中的相同颜色,但我无法使其用于我的代码(出现了一个关于数据长度不匹配或无法转换为元组的错误)。我想我还没有能够正确地修改我用于标记的颜色贴图,或者这不是获得正确结果的最佳方式

这是一个包含一些虚构数据的示例:

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

bounds = [0,1.5,3,4.5,5]
colors = ["r", "b", "g", "y"]
cmap = matplotlib.colors.ListedColormap(colors)
norm = matplotlib.colors.BoundaryNorm(bounds, len(colors))

x = np.array([0.0, 0.0, 1.0, 2.0, 2.0, 3.0,  4.0,  4.0, 5.0, 5.0])
y = np.array([0.0, 0.1, 0.8, 0.9, 0.7, 0.1, -0.8, -0.5, -1.0, -0.7])
x_err = np.array([0.05, 0.06, 0.04, 0.045, 0.04, 0.06, 0.05, 0.055, 0.02, 0.05])
y_err = np.array([0.04, 0.05, 0.03, 0.055, 0.145, 0.065, 0.045, 0.15, 0.015, 0.17])

plt.scatter(x, y, marker='D', c=x, cmap=cmap, norm=norm)
plt.errorbar(x, y, xerr=x_err, yerr=y_err, fmt='.', lw=2, capsize=3, alpha=0.7, zorder=0)

plt.show()


如何使错误条具有与散点图中使用的相同的颜色映射?

这当然不是最快的方法,但它可以工作:使用获取每个x值的颜色,然后逐点绘制错误条(对于大型数据阵列可能较慢):

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

bounds = [0,1.5,3,4.5,5]
colors = ["r", "b", "g", "y"]
cmap = matplotlib.colors.ListedColormap(colors)
norm = matplotlib.colors.BoundaryNorm(bounds, len(colors))

x = np.array([0.0, 0.0, 1.0, 2.0, 2.0, 3.0,  4.0,  4.0, 5.0, 5.0])
y = np.array([0.0, 0.1, 0.8, 0.9, 0.7, 0.1, -0.8, -0.5, -1.0, -0.7])
x_err = np.array([0.05, 0.06, 0.04, 0.045, 0.04, 0.06, 0.05, 0.055, 0.02, 0.05])
y_err = np.array([0.04, 0.05, 0.03, 0.055, 0.145, 0.065, 0.045, 0.15, 0.015, 0.17])

plt.scatter(x, y, marker='D', c=x, cmap=cmap, norm=norm)

colors = matplotlib.cm.ScalarMappable(norm,cmap).to_rgba(x)
for i,_ in enumerate(x):
  plt.errorbar(x[i], y[i], xerr=x_err[i], yerr=y_err[i], fmt='.', lw=2, capsize=3, alpha=0.7, zorder=0, ecolor=colors[i])  

plt.show()