我对matplotlib很新,我想创建一个绘图和一个范围从0到1的比例;标记与标尺颜色相同。我在使用colorbar方法的散点图中完成了它,但必须指定另一个imshow来绘制颜色条。麻烦的是我得到一个0到0.5的矩形,与标记的颜色相同,经过几天的尝试后,我无法设置它(不会损坏颜色条/比例)。
任何帮助都会非常苛刻!
import matplotlib.pyplot as plt
import matplotlib.cm as cm
data =[0,0.7]
for l in data:
cmap1 = cm.RdYlBu_r(l)
fig = plt.figure(dpi=300)
ax = fig.add_subplot(1,1,1)
ax.grid()
sc = plt.scatter(0, l, s=500, color= cmap1)
cax = ax.imshow([[l]],vmin=0, vmax=1, interpolation='nearest',aspect=5, cmap= plt.cm.RdYlBu_r)
plt.yticks([0,0.5, 1])
plt.xticks([])
plt.colorbar(cax)
axes = plt.gca()
plt.show
这是制作的图像:
编辑:我已经搜索了'matplotlib colorbar for scatter'和所有变体,但是在应用它时出现错误,例如'TypeError:你必须首先set_array为mappable'。我想因为我一次只有一个值可以映射。对不起,如果不是那样的话;我是matplotlib的新手,我知道我想做一些特别的事情。
答案 0 :(得分:1)
你得到的彩色矩形来自imshow情节。由于您不想要该矩形,请删除imshow图。
下一步是获取彩条。 plt.colorbar
期望ScalarMappable作为第一个参数。所以一个好主意是提供散点图作为参数,
plt.colorbar(sc)
。
此时您可能会收到错误消息"您必须先将set_array设为可映射" 。仔细观察散点图(plt.scatter(0, l, s=500, color= cmap1)
,可以看出确实没有应用映射,因为单一颜色是由color
参数定义的。为了成为一个有用的ScalarMappable,你需要定义一个可以使用c
参数映射到颜色的数组。因此,当您尝试使用cmap1 = cm.RdYlBu_r(l)
时,不应手动执行映射,而应将该步骤留给散点图。
sc = plt.scatter(0, l, s=500, c=l, vmin=0, vmax=1,cmap= plt.cm.RdYlBu_r)
现在情节有效,但看起来很糟糕,所以你可能想要应用一些设置,如方面,限制图形大小等。
总的来说,你可能会得到这样的结论:
import matplotlib.pyplot as plt
data =[0,0.4,0.7,0.9]
for l in data:
fig = plt.figure(figsize=(2,3), dpi=100)
ax = fig.add_subplot(1,1,1, aspect=10)
ax.grid()
sc = plt.scatter(0, l, s=500, c=l, vmin=0, vmax=1,cmap= plt.cm.RdYlBu_r)
plt.xlim([-1,1])
plt.ylim([0,1])
plt.yticks([0,0.5, 1])
plt.xticks([])
plt.colorbar(sc)
plt.subplots_adjust(right=0.7)
plt.show()