Python 如何创建具有多个水平热图的绘图?

Python 如何创建具有多个水平热图的绘图?,python,pandas,matplotlib,seaborn,Python,Pandas,Matplotlib,Seaborn,我正在拼命地复制英国《金融时报》去年针对不同国家的新冠肺炎严格性指数所做的图表: 我拥有熊猫数据框上的所有数据,但我真的无法思考如何使用python和matplotlib/seaborn进行绘图。我试过用堆积条形图,但不是那样。我的df看起来像这样: 我知道这听起来很傻,但我只需要一个提示,说明我应该使用什么函数来复制该图表。非常感谢任何愿意帮助我的人 有许多方法可以使用matplotlib绘制可比较的绘图。在以下方法中,pcolor()与ListedColormap和BoundaryNor

我正在拼命地复制英国《金融时报》去年针对不同国家的新冠肺炎严格性指数所做的图表:

我拥有熊猫数据框上的所有数据,但我真的无法思考如何使用python和matplotlib/seaborn进行绘图。我试过用堆积条形图,但不是那样。我的df看起来像这样:


我知道这听起来很傻,但我只需要一个提示,说明我应该使用什么函数来复制该图表。非常感谢任何愿意帮助我的人

有许多方法可以使用matplotlib绘制可比较的绘图。在以下方法中,
pcolor()
ListedColormap
BoundaryNorm
一起使用

导入matplotlib.pyplot作为plt
从matplotlib.colors导入ListedColormap、BoundaryNorm
从matplotlib.cm导入ScalarMapable
将numpy作为np导入
导入seaborn作为sns
作为pd进口熊猫
df=pd.read\U csv('covid-STRIGNENCY-index.csv')
df['Day']=pd.to_datetime(df['Day'])
颜色=sns.调色板('rocket_r',6)
颜色[0]=“浅蓝色”
cmap=列表颜色映射(颜色)
cmap.set_坏('灰色')
界限=[0,1,25,50,75,85,100]
范数=边界范数(边界,len(边界)-1)
大陆={‘亚洲’:[‘新加坡’、‘中国’、‘日本’、‘菲律宾’、‘越南’、‘印度’、‘韩国’],
‘美洲’:[‘哥伦比亚’、‘加拿大’、‘阿根廷’、‘巴西’、‘美国’、‘委内瑞拉’,
“墨西哥”、“秘鲁”、“玻利维亚”、“智利”]}
图,ax=plt.子批次(图尺寸=(12,8))
标签=[]
对于大陆中的大陆:
标签。附加(大陆)
对于大陆国家[大陆]:
标签。附加(国家)
ind=透镜(标签)-1
df1=df[df['实体]==国家]
ax.pcolor(df1['Day'],[ind-0.4,ind+0.4],df1['Strengency\u index'][1:]到numpy()。重塑(1,-1),cmap=cmap)
#edgecolor='白色',lw=0.2)
ax.set_-yticks(np.arange(len(labels)))
ax.设置标签(标签)
最大设置长度(-0.5,长度(标签)-0.5)
ax.invert_yaxis()
对于ax.spines中的脊椎:
ax.spines[spine].set_可见(False)
最大刻度参数(轴=y',长度=0)
对于ax.get_yticklabels()中的t:
如果t.get_text()在大陆:
t、 设置大小(16)
cax=图中添加轴([0.7,0.95,0.27,0.03])
plt.colorbar(可缩放(cmap=cmap,norm=norm),ax=ax,cax=cax,
方向='水平',锚=(1,1.02))
plt.子批次调整(左=0.2,右=0.97,顶部=0.95,底部=0.07)
plt.show()

让每个图表都使用条形图怎么样#条数=#天数,所有条数的高度和宽度都相等,以便相互接触。然后需要编写一个函数,将数据映射到颜色。这会奏效吗?-->然后用大标题和两列的自定义Gridspec堆叠它们:非常感谢。你的代码做得非常好,它帮助我实现了我想做的事情!