带颜色条的散点图
Scatter Plot with Colobar
我正在尝试绘制一些更复杂的数据,但为了举例,我已经简化以显示我正在尝试做但不起作用的事情。请参阅下面的代码和输出图像。请注意,我有一个部分被注释掉了。我基本上想在顶部绘制评论部分,但出现错误:
ValueError:to_rgba:无效的 rgba arg“0.0”
to_rgb: 无效的 rgb 参数“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))
我确实对错误有所了解。由于第二组数据与第一组数据的长度不同,反之亦然,颜色编码变得混乱。有没有办法做这样的事情?
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))
我正在尝试绘制一些更复杂的数据,但为了举例,我已经简化以显示我正在尝试做但不起作用的事情。请参阅下面的代码和输出图像。请注意,我有一个部分被注释掉了。我基本上想在顶部绘制评论部分,但出现错误:
ValueError:to_rgba:无效的 rgba arg“0.0” to_rgb: 无效的 rgb 参数“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))
我确实对错误有所了解。由于第二组数据与第一组数据的长度不同,反之亦然,颜色编码变得混乱。有没有办法做这样的事情?
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))