matplotlib 散点图问题 + 子图只有一个值
Trouble with matplotlib scatter plot + subplot only one value
我是 matplotlib 的新手,我想创建一个绘图和 0-1 范围的比例作为输出;标记颜色与刻度相同。我用 colorbar 方法在散点图中完成了它,但必须指定另一个 imshow 来绘制 colorbar。问题是我得到了一个从 0 到 0.5 的矩形,与标记的颜色相同,经过几天的尝试,我无法擦除它(没有擦除 colorbar/scale)。
我们将不胜感激任何帮助!
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: You must first set_array for mappable'。我想是因为我一次只能映射一个值。抱歉,如果不是那样的话;我是 matplotlib 的新手,我知道我想做一些特别的事情。
您得到的彩色矩形来自 imshow 图。由于您不想要该矩形,请删除 imshow 图。
下一步是获取颜色条。 plt.colorbar
需要 ScalarMappable 作为第一个参数。所以一个好主意是提供散点图作为参数,
plt.colorbar(sc)
。
此时您可能会收到一条错误消息 "You must first set_array for mappable"。仔细观察散点图(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 的新手,我想创建一个绘图和 0-1 范围的比例作为输出;标记颜色与刻度相同。我用 colorbar 方法在散点图中完成了它,但必须指定另一个 imshow 来绘制 colorbar。问题是我得到了一个从 0 到 0.5 的矩形,与标记的颜色相同,经过几天的尝试,我无法擦除它(没有擦除 colorbar/scale)。
我们将不胜感激任何帮助!
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: You must first set_array for mappable'。我想是因为我一次只能映射一个值。抱歉,如果不是那样的话;我是 matplotlib 的新手,我知道我想做一些特别的事情。
您得到的彩色矩形来自 imshow 图。由于您不想要该矩形,请删除 imshow 图。
下一步是获取颜色条。 plt.colorbar
需要 ScalarMappable 作为第一个参数。所以一个好主意是提供散点图作为参数,
plt.colorbar(sc)
。
此时您可能会收到一条错误消息 "You must first set_array for mappable"。仔细观察散点图(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()