python - Colobar 散点图
问题描述
我正在尝试绘制一些更复杂的数据,但为了举例,我已经简化以显示我正在尝试做但没有工作的内容。请参阅下面的代码和输出图像。注意我有一个部分被注释掉了。我本质上想将注释部分绘制在顶部,但出现错误:
ValueError: to_rgba: Invalid rgba arg "0.0" to_rgb: Invalid 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))
我确实对错误有某种想法。由于第二组数据的长度与第一组不同,反之亦然,因此颜色编码会混淆。有没有办法做这样的事情?
解决方案
的c
参数scatter
需要单个颜色说明符(例如'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))
推荐阅读
- c++ - std :: 数组的目的是什么
? - excel - 如果 activeworkbook.name = "inventariogen.xls" 代码存储在个人宏工作簿中并在 workbook_open 时触发,则运行时出现错误 91
- angular - 离子/角度与 Angular 9 不兼容
- apache-kafka - Consumer.subscribe()时会发生什么,即使kafka中没有broker
- ios - Revenuecat React-Native iPad Purchases.purchasePackage - 承诺不会解决
- rxjs - 同步 RxJs 取消订阅不起作用
- python - python中的错误:使用if/else时不会存储变量
- scala - Scala:reduceByKey 用于在元组中查找最大值
- salesforce - 我们可以在 Lightning SalesForce 中创建新的搜索布局吗?
- reactjs - 如何修复错误的动作调度