与Colobar的散点图

时间:2018-06-04 19:56:23

标签: python matplotlib scatter

我正在尝试绘制一些更复杂的数据但是为了举例,我已经简化了以显示我想要做但却无法正常工作。请参阅以下代码和输出图像。请注意我有一个注释掉的部分。我基本上想要将评论部分绘制在顶部,但我收到错误:

ValueError:to_rgba:无效的rgba arg“0.0” to_rgb:无效的rgb arg“0.0” 无法将参数转换为rgb序列

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))

我确实对错误有所了解。因为第二组数据与第一组数据的长度不同,反之亦然,因此颜色编码会混淆。有没有办法做这样的事情?

A simple plot from above code

1 个答案:

答案 0 :(得分:2)

c的{​​{1}}参数需要单个颜色说明符(例如scatter)或一系列颜色说明符(例如'blue')或一系列数字使用色彩映射进行映射(例如['blue', 'red', ...],就像你在这里使用的那样)。

但是,在您注释掉的情况下,您提供的系列与您的数据无法匹配,因此[1, 2, 3, 4, ...]不知道如何处理它。你想用它做什么?

你可能会,例如尝试

scatter

编辑:其工作方式如下:每个数据点(x,y)都与c中的元素相关联,即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))) 被分配给{的标记{1}}。这就是c[i](x[i], y[i])c都必须具有相同长度的原因,否则匹配不起作用。 c中的x值对此无效。但是,y中的值只能使用您指定的色彩映射转换为颜色。并且色彩映射的范围由NaNc确定。因此,为了确保您的颜色对所有数据集使用相同的数据范围,只需在使用所有数据进行绘图之前预先计算vminvmax,然后相应地进行设置。

所以在你的情况下:

vmin

然后

vmax

和colorbar

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))