本站消息

站长简介/公众号


站长简介:高级工程师,爱好交友,无偿辅导python和前端,技术交流,面试指导,找工作指导,瞎聊都可加我微信i88811i哈,欢迎欢迎!也欢迎加入程序员交流群,专属程序员的圈子,加我微信拉你进群.欢迎关注我的微信公众号:程序员总部,程序员的家,探索程序员的人生之路!分享IT最新技术,关注行业最新动向,让你永不落伍。了解同行们的工资,生活工作中的酸甜苦辣,谋求程序员的最终出路!

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何创建具有许多水平热图的图?

发布于2022-01-23 19:31     阅读(1117)     评论(0)     点赞(24)     收藏(3)



我正在拼命地试图重现英国《金融时报》关于去年不同国家 covid_19 严格性指数的图表:

在此处输入图像描述

我在 pandas 数据框中拥有所有数据,但我真的不知道如何使用 python 和 matplotlib/seaborn 来绘制这个图。我尝试使用堆积条形图,但事实并非如此。我的 df 看起来像这样:

在此处输入图像描述

我知道这可能听起来很傻,但我只需要提示我应该使用什么函数来重现该图表。非常感谢任何愿意帮助我的人!


解决方案


有很多方法可以使用 matplotlib 制作可比较的图。在以下方法中,pcolor()与 aListedColormap和 a一起使用BoundaryNorm

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, BoundaryNorm
from matplotlib.cm import ScalarMappable
import numpy as np
import seaborn as sns
import pandas as pd

df = pd.read_csv('covid-stringency-index.csv')
df['Day'] = pd.to_datetime(df['Day'])
colors = sns.color_palette('rocket_r', 6)
colors[0] = 'lightblue'
cmap = ListedColormap(colors)
cmap.set_bad('grey')
bounds = [0, 1, 25, 50, 75, 85, 100]
norm = BoundaryNorm(bounds, len(bounds) - 1)
continents = {'Asia': ['Singapore', 'China', 'Japan', 'Philippines', 'Vietnam', 'India', 'South Korea'],
              'Americas': ['Colombia', 'Canada', 'Argentina', 'Brazil', 'United States', 'Venezuela',
                           'Mexico', 'Peru', 'Bolivia', 'Chile']}

fig, ax = plt.subplots(figsize=(12, 8))
labels = []
for continent in continents:
    labels.append(continent)
    for country in continents[continent]:
        labels.append(country)
        ind = len(labels) - 1
        df1 = df[df['Entity'] == country]
        ax.pcolor(df1['Day'], [ind - 0.4, ind + 0.4], df1['stringency_index'][1:].to_numpy().reshape(1, -1), cmap=cmap)
        # edgecolor='white', lw=0.2)
ax.set_yticks(np.arange(len(labels)))
ax.set_yticklabels(labels)
ax.set_ylim(-0.5, len(labels) - 0.5)
ax.invert_yaxis()
for spine in ax.spines:
    ax.spines[spine].set_visible(False)
ax.tick_params(axis='y', length=0)
for t in ax.get_yticklabels():
    if t.get_text() in continents:
        t.set_size(16)
cax = fig.add_axes([0.7, 0.95, 0.27, 0.03])
plt.colorbar(ScalarMappable(cmap=cmap, norm=norm), ax=ax, cax=cax,
             orientation='horizontal', anchor=(1, 1.02))
plt.subplots_adjust(left=0.2, right=0.97, top=0.95, bottom=0.07)

plt.show()

pcolor 创建许多小热图

站长简介:高级工程师,爱好交友,无偿辅导python和前端,技术交流,面试指导,找工作指导,瞎聊都可加我微信i88811i哈,欢迎欢迎!也欢迎加入程序员交流群,专属程序员的圈子,加我微信拉你进群
欢迎关注我的公众号:程序员总部,关注公众号回复python,免费领取 全套python视频教程,关注公众号回复充值+你的账号,免费为您充值1000积分







所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1257534/810e1187be6e15fa0269/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

24 0
收藏该文
已收藏

评论内容:(最多支持255个字符)