这是我在这里的第一篇文章!
我使用calmap绘制好的日历图来分析一些数据。日历图使用色彩图来显示天数之间的对比度。我遇到的问题是calmap不提供友好的工具来显示与日历图关联的颜色条。我想知道你们其中一个人是否有解决方案。理想的情况是为整个图形设置颜色条而不仅仅是一个轴。
calmap的文档:http://pythonhosted.org/calmap/
import pandas as pd
import numpy as np
import calmap # pip install calmap
%matplotlib inline
df=pd.DataFrame(data=np.random.randn(500,1)
,index=pd.date_range(start='2014-01-01 00:00:00',freq='1D',periods =500)
,columns=['data'])
fig,ax=calmap.calendarplot(df['data'],
fillcolor='grey', linewidth=0,cmap='RdYlGn',
fig_kws=dict(figsize=(17,8)))
fig.suptitle('Calendar view' ,fontsize=20,y=1.08)
calmap绘图示例
答案 0 :(得分:4)
在此处深入了解calmap代码martijnvermaat/calmap我明白了
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>...</groupId>
<artifactId>...</artifactId>
<packaging>apk</packaging>
...
</project>
,然后创建一个带有实际数据的另一个,加上一堆其他东西。要深入了解与您可以使用的轴相关的对象(我假设您的代码导入和数据初始化在此之前):
ax.pcolormesh
现在,我们可以使用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.colorbar
是此函数的包装器),如此答案所示
Matplotlib 2 Subplots, 1 Colorbar:
plt.colorbar
这会产生垂直colobar引用第一个图中唯一的颜色,但所有图的颜色都相同。
我仍然在更好地使用轴和水平位置,但是从这里开始应该很容易。
作为奖金,对于一年的情节:
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())
答案 1 :(得分:1)
将@kidpixo答案和来自{bogatron的this answer放在一起,我准备了一个自包含的示例,“做了明显的事情”,在回弹区的右侧创建了一个色条,并匹配其高度。
import pandas as pd
import numpy as np
import calmap # pip install calmap
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
%matplotlib inline
df=pd.DataFrame(data=np.random.randn(500,1)
,index=pd.date_range(start='2014-01-01 00:00:00',freq='1D',periods =500)
,columns=['data'])
fig = plt.figure(figsize=(20,8))
ax = fig.add_subplot(111)
cax = calmap.yearplot(df.data, year=2014, ax=ax, cmap='YlGn')
# fig.colorbar(cax.get_children()[1], ax=cax, orientation='horizontal')
divider = make_axes_locatable(cax)
lcax = divider.append_axes("right", size="2%", pad=0.5)
fig.colorbar(cax.get_children()[1], cax=lcax)