简体   繁体   English

Python 带有误差条的颜色条

[英]Python colorbar with errorbar

I am trying to plot x vs y data and trying to see the variation of x and y with respect to z using a colorbar.我正在尝试 plot x vs y 数据,并尝试使用颜色条查看 x 和 y 相对于 z 的变化。

x = [1,2,3,4,5]
x_err = [0.1,0.2,0.3,0.4,0.5]
y = [5,6,7,8,9]
y_err = [0.5,0.6,0.7,0.8,0.9]
z = [3,4,5,6,7]

fig, ax = plt.subplots()

ax.errorbar(x, y, x_err, y_err, fmt='*', elinewidth = 0.9, ecolor='black')

scatter = ax.scatter(x, y, c=z, s=5)
cbar = fig.colorbar(scatter,cmap='viridis')
cbar.set_label('z')

I need the errorbar to have the same color as that of the datapoint.我需要错误栏具有与数据点相同的颜色。

在此处输入图像描述

You could compute the ecolor from the same cmap.您可以从同一个 cmap 计算ecolor Not sure there aren't any solution to do that for you, but it doesn't cost much不确定是否有任何解决方案可以为您做到这一点,但它不会花费太多

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

x = [1,2,3,4,5]
x_err = [0.1,0.2,0.3,0.4,0.5]
y = [5,6,7,8,9]
y_err = [0.5,0.6,0.7,0.8,0.9]
z = [3,4,5,6,7]

fig, ax = plt.subplots()

# Rest of your code is yours. Only this line is added (and next line modified to use this "col" as ecolor
col=cm.viridis((np.array(z)-min(z))/(max(z)-min(z))) # RGBA colors from z
ax.errorbar(x, y, x_err, y_err, ecolor=col, fmt='*', elinewidth = 0.9)

scatter = ax.scatter(x, y, c=z, s=5)
cbar = fig.colorbar(scatter,cmap='viridis')
cbar.set_label('z')

plt.show()

Result结果在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM