我对matplotlib相当陌生,我想将图和比例尺从0-1创建为输出; 标记的颜色与刻度相同。 我是使用colorbar方法在散点图中完成的,但必须指定另一个imshow来绘制colorbar。 麻烦的是我得到了一个从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颜色条以进行散布"和所有变体,但是在应用它时出现了错误,例如" TypeError:您必须首先将set_array用于可映射"。 我想由于这样的事实,我一次只能映射一个值。 抱歉,不是那样的话。 我是matplotlib的新手,我知道我想做点特别的事情。
您可以指定结果图的外观吗? 您有两个数据点[0, 0.7]。 您是否要为每个数据点绘制一个图表,并为每个图表绘制一个颜色条,表示与一个标记相同?
matplotlib颜色条的可能重复散布
实际上,我的想法是为每个数据点制作一个带有颜色条的图。 生成的图像多少有些不带橙色矩形(它会根据数据点而变化)。
您获得的彩色矩形来自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()
恭喜matplotlib金牌! :-)
非常感谢; 答案和特别的解释是有很大帮助的。