Python 2.7 将颜色条添加到calmap绘图

Python 2.7 将颜色条添加到calmap绘图,python-2.7,matplotlib,plot,Python 2.7,Matplotlib,Plot,这是我在这里的第一篇帖子 我正在使用calmap绘制漂亮的日历图来分析一些数据。日历图使用彩色地图显示日期之间的对比度。我遇到的问题是,calmap没有提供友好的工具来显示与日历绘图关联的颜色栏。我想知道你们当中是否有人能解决这个问题。理想情况是为整个图形设置颜色条,而不是仅为一个轴设置颜色条 calmap的文件: calmap绘图示例 在这里深入研究calmap代码,我理解这一点 calendarplot为每个子批次调用几个yearplot(在您的情况下为两次) yearplot首先创建一个

这是我在这里的第一篇帖子

我正在使用calmap绘制漂亮的日历图来分析一些数据。日历图使用彩色地图显示日期之间的对比度。我遇到的问题是,calmap没有提供友好的工具来显示与日历绘图关联的颜色栏。我想知道你们当中是否有人能解决这个问题。理想情况是为整个图形设置颜色条,而不是仅为一个轴设置颜色条

calmap的文件:

calmap绘图示例


在这里深入研究calmap代码,我理解这一点

  • calendarplot为每个子批次调用几个yearplot(在您的情况下为两次)
  • yearplot首先创建一个带有背景的ax.pcolormesh,然后再创建一个带有实际数据的ax.pcolormesh,以及一系列其他内容
要深入研究与您可以使用的轴相关的对象(我假设您的代码导入和数据初始化在这里之前):

这将生成一个垂直栏,仅在第一个打印中引用颜色,但所有打印的颜色都相同

我仍然在玩更好的位置轴和水平的一个,但它应该很容易从这里

作为奖金,对于一个年画:

fig = plt.figure(figsize=(20,8))
ax = fig.add_subplot(111)
cax = calmap.yearplot(df, year=2014, ax=ax, cmap='YlGn')
fig.colorbar(cax.get_children()[1], ax=cax, orientation='horizontal')

将@kidpixo answer和@bogatron放在一起,我准备了一个独立的示例,它“做了显而易见的事情”,在calmap的右侧创建了一个颜色条,并与它的高度相匹配

将熊猫作为pd导入
将numpy作为np导入
导入calmap#pip安装calmap
将matplotlib.pyplot作为plt导入
从mpl_toolkits.axes_grid1导入使_axes_可定位
%matplotlib内联
df=pd.DataFrame(data=np.random.randn(500,1)
,索引=pd.日期范围(开始时间=2014-01-01 00:00:00',频率=1D',周期=500)
,列=['data'])
图=plt.图(图尺寸=(20,8))
ax=图添加_子批次(111)
cax=calmap.yearplot(df.data,year=2014,ax=ax,cmap='YlGn')
#fig.colorbar(cax.get_children()[1],ax=cax,orientation='horizontal')
分隔器=使轴可定位(cax)
lcax=分隔器。附加_轴(“右”,size=“2%”,pad=0.5)
图颜色条(cax.get_children()[1],cax=lcax)

它工作得很好。感谢您提供简单、干净的解决方案
ax[0].get_children()

[<matplotlib.collections.QuadMesh at 0x11ebd9e10>,
 <matplotlib.collections.QuadMesh at 0x11ebe9210>, <- that's the one we need!
 <matplotlib.spines.Spine at 0x11e85a910>,
 <matplotlib.spines.Spine at 0x11e865250>,
 <matplotlib.spines.Spine at 0x11e85ad10>,
 <matplotlib.spines.Spine at 0x11e865490>,
 <matplotlib.axis.XAxis at 0x11e85a810>,
 <matplotlib.axis.YAxis at 0x11e74ba90>,
 <matplotlib.text.Text at 0x11e951dd0>,
 <matplotlib.text.Text at 0x11e951e50>,
 <matplotlib.text.Text at 0x11e951ed0>,
 <matplotlib.patches.Rectangle at 0x11e951f10>]
fig,ax=calmap.calendarplot(df['data'],
                    fillcolor='grey', linewidth=0,cmap='RdYlGn',
                    fig_kws=dict(figsize=(17,8)))

fig.colorbar(ax[0].get_children()[1], ax=ax.ravel().tolist())
fig = plt.figure(figsize=(20,8))
ax = fig.add_subplot(111)
cax = calmap.yearplot(df, year=2014, ax=ax, cmap='YlGn')
fig.colorbar(cax.get_children()[1], ax=cax, orientation='horizontal')