Python 带Colobar的散点图
我试图绘制一些更复杂的数据,但为了举例,我简化了,以显示我正在尝试做什么,但不起作用。请参阅下面的代码和输出图像。注意,我有一个部分被注释掉了。我基本上想在顶部绘制注释部分,但我得到一个错误: ValueError:to_rgba:无效的rgba参数“0.0” to_rgb:无效的rgb参数“0.0” 无法将参数转换为rgb序列Python 带Colobar的散点图,python,matplotlib,scatter,Python,Matplotlib,Scatter,我试图绘制一些更复杂的数据,但为了举例,我简化了,以显示我正在尝试做什么,但不起作用。请参阅下面的代码和输出图像。注意,我有一个部分被注释掉了。我基本上想在顶部绘制注释部分,但我得到一个错误: ValueError:to_rgba:无效的rgba参数“0.0” to_rgb:无效的rgb参数“0.0” 无法将参数转换为rgb序列 import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import make_axes_locata
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
x1=[1.0,1.5,2.2,1.8]
y1=[1.1,1.4,2.0,1.75]
x2=[1.5,2.5,3.0,3.5,3.6]
y2=[1.3,2.2,3.3,3.4,3.5]
height=[0.0,1.0,2.0,3.0,4.0]
fig = plt.figure(figsize=(8, 8))
ax=plt.subplot()
divider=make_axes_locatable(ax)
sc=plt.scatter(x2, y2, c=height, vmin=np.min(height)-0.5,
vmax=np.max(height)+0.5, marker='o', s=40,
cmap=plt.cm.get_cmap('jet', len(height)))
#sc=plt.scatter(x1, y1, c=height, vmin=np.min(height)-0.5,
# vmax=np.max(height)+0.5, marker='o', s=40,
# cmap=plt.cm.get_cmap('jet', len(height)))
cax=divider.append_axes("right", size='5%', pad=0.05)
cbar=plt.colorbar(sc, cax=cax, ticks=np.arange(np.min(height),np.max(height)+1,1.0))
我确实对这个错误有一些想法。因为第二组数据与第一组数据的长度不相同,反之亦然,所以颜色编码会变得混乱。有没有办法做到这一点
散布
的c
参数需要一个颜色说明符(例如'blue'
)或一系列颜色说明符(例如['blue'、'red'、…]
)或一系列使用颜色映射映射的数字(例如[1、2、3、4,…]
,正如您在这里使用的那样)
但是,在您注释掉的情况下,您提供的序列与您的数据不匹配,因此scatter
不知道如何处理它。你想用它做什么
你可以试试看
height1 = np.arange(len(x1))
sc=plt.scatter(x1, y1, c=height1, vmin=np.min(height1)-0.5,
vmax=np.max(height1)+0.5, marker='o', s=40,
cmap=plt.cm.get_cmap('jet', len(height)))
编辑:其工作方式如下:每个数据点(x,y)与c中的一个元素相关联,即c[i]
被分配给(x[i],y[i])
处的标记。这就是为什么c
、x
和y
都必须具有相同的长度,否则匹配将不起作用<代码>NaN
c中的值在这里没有帮助。但是,c
中的值仅使用指定的颜色映射转换为颜色。颜色映射的范围由vmin
和vmax
确定。因此,为了确保您的颜色对所有数据集使用相同的数据范围,只需在使用所有数据打印之前预计算vmin
和vmax
,并相应地进行设置
因此,在你的情况下:
h1 = np.arange(len(x1))
h2 = np.arange(len(x2))
minval = min([np.min(h) for h in [h1, h2]])
maxval = max([np.max(h) for h in [h1, h2]])
nh = len(np.arange(minval, maxval+1, 1))
然后
sc=plt.scatter(x1, y1, c=h1, marker='o', s=40,
vmin=minval-0.5, vmax=maxval+0.5,
cmap=plt.cm.get_cmap('jet', nh)
)
还有颜色条
cbar=plt.colorbar(sc, cax=cax, ticks=np.arange(minval, maxval+1,1.0))
scatter
的c
参数需要一个颜色说明符(例如'blue'
)或一系列颜色说明符(例如['blue'、'red'、…]
)或一系列使用颜色映射映射的数字(例如[1、2、3、4,…])
但是,在您注释掉的情况下,您提供的序列与您的数据不匹配,因此scatter
不知道如何处理它。你想用它做什么
你可以试试看
height1 = np.arange(len(x1))
sc=plt.scatter(x1, y1, c=height1, vmin=np.min(height1)-0.5,
vmax=np.max(height1)+0.5, marker='o', s=40,
cmap=plt.cm.get_cmap('jet', len(height)))
编辑:其工作方式如下:每个数据点(x,y)与c中的一个元素相关联,即c[i]
被分配给(x[i],y[i])
处的标记。这就是为什么c
、x
和y
都必须具有相同的长度,否则匹配将不起作用<代码>NaN
c中的值在这里没有帮助。但是,c
中的值仅使用指定的颜色映射转换为颜色。颜色映射的范围由vmin
和vmax
确定。因此,为了确保您的颜色对所有数据集使用相同的数据范围,只需在使用所有数据打印之前预计算vmin
和vmax
,并相应地进行设置
因此,在你的情况下:
h1 = np.arange(len(x1))
h2 = np.arange(len(x2))
minval = min([np.min(h) for h in [h1, h2]])
maxval = max([np.max(h) for h in [h1, h2]])
nh = len(np.arange(minval, maxval+1, 1))
然后
sc=plt.scatter(x1, y1, c=h1, marker='o', s=40,
vmin=minval-0.5, vmax=maxval+0.5,
cmap=plt.cm.get_cmap('jet', nh)
)
还有颜色条
cbar=plt.colorbar(sc, cax=cax, ticks=np.arange(minval, maxval+1,1.0))
我明白这是怎么回事了,我现在试过了,效果很好。问题是在我的数据集中,我不确定我的x1的大小,因为我将有很多,但对于所有映射和打印的数据集,颜色栏和贴图需要相同。例如,c参数需要保持不变,并将颜色映射到数据集,而不管数据集的大小。有办法吗?我可以添加NaN作为替代品吗?谢谢你的帮助。我知道这是如何工作的,我现在尝试了这个,它工作了。问题是在我的数据集中,我不确定我的x1的大小,因为我将有很多,但对于所有映射和打印的数据集,颜色栏和贴图需要相同。例如,c参数需要保持不变,并将颜色映射到数据集,而不管数据集的大小。有办法吗?我可以添加NaN作为替代品吗?谢谢你的帮助。