我正在尝试创建一个散点子图集合,并希望它们共享相同的颜色条。
我已按照指南here进行操作,但似乎只适用于对象具有自动缩放属性的图像绘图。
我使用的代码如下:
import matplotlib.pyplot as plt
import numpy
import random
x = []
y = []
for i in range(100):
x.append(random.normalvariate(100,10))
y.append(random.normalvariate(100,10))
#Creates a list of length n
def getRand(n):
l = []
for i in range(n):
l.append(random.normalvariate(1,10))
return l
f = plt.figure()
f, axes = plt.subplots(nrows = 2, ncols = 2, sharex=True, sharey = True)
axes[0][0].scatter(getRand(100),getRand(100), c = getRand(100), marker = "x")
axes[0][0].set_xlabel('Crosses', labelpad = 5)
axes[0][1].scatter(getRand(100),getRand(100), c = getRand(100), marker = 'o')
axes[0][1].set_xlabel('Circles', labelpad = 5)
axes[1][0].scatter(getRand(100),getRand(100), c = getRand(100), marker = '*')
axes[1][0].set_xlabel('Stars')
axes[1][1].scatter(getRand(100),getRand(100), c = getRand(100), marker = 's' )
axes[1][1].set_xlabel('Squares')
#Add separate colourbar axes
cbar_ax = f.add_axes([0.85, 0.15, 0.05, 0.7])
#Autoscale none
f.colorbar(axes[0][0], cax=cbar_ax)
plt.show()
这会产生错误:
AttributeError:'AxesSubplot'对象没有属性'autoscale_None'
当我将数据发送到此处的颜色栏时,问题就出现了:
f.colorbar(axes[0][0], cax=cbar_ax)
这是当前的输出,显然我希望标记的颜色位于右侧的比例尺上(我会担心以后正确放置它):
对于像这样的一组散点图有没有实现这个目标,如果是这样,我怎样才能修改我的代码来实现它?
答案 0 :(得分:2)
figure.colorbar
的签名是
DateFormatter
这意味着第一个参数必须是ScalarMappable,而不是轴。
colorbar(mappable, cax=None, ax=None, use_gridspec=True, **kw)
如果要对所有散点图使用相同的颜色条,则需要对它们使用相同的标准化。
sc = axes[0][0].scatter(..)
fig.colorbar(sc, cax=cbar_ax)
一个完整的例子:
norm=plt.Normalize(-22,22)
sc = axes[0][0].scatter(getRand(100),getRand(100), c = getRand(100), norm=norm)
fig.colorbar(sc, cax=cbar_ax)