You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python pyplot绘制的图表完整展示所有国家的新冠疫情统计数据

解决Matplotlib柱状图重叠、展示不清晰的方案

你当前的代码直接在相同x轴坐标上绘制三个柱状图,会出现高数值柱子遮挡低数值柱子的问题,同时国家数量较多时x轴标签也会挤在一起,导致数据无法清晰识别,可参考以下方案调整:

方案1:分组并列柱状图(最适合多类别对比场景)

每个国家对应3个并排的柱子,分别展示三类数据,无遮挡方便跨类别对比:

import numpy as np
import matplotlib.pyplot as plt

# 先设置足够大的画布,避免标签拥挤
plt.figure(figsize=(16, 9))

# 单个柱子的宽度
bar_width = 0.25
# 生成x轴位置序列
x = np.arange(len(countryNames))

# 三个柱子分别偏移对应宽度,避免重叠
plt.bar(x - bar_width, cases, width=bar_width, color='green', label='Total Cases')
plt.bar(x, recovered, width=bar_width, color='blue', label='Total Recovered')
plt.bar(x + bar_width, deaths, width=bar_width, color='black', label='Total Deaths')

# 替换x轴刻度为国家名称,旋转45度避免标签重叠
plt.xticks(x, countryNames, rotation=45, ha='right')

plt.legend()
# 自动调整布局,避免边缘标签被截断
plt.tight_layout()
plt.show()

方案2:堆叠柱状图(适合展示总量+各分类占比)

如果你的需求是同时展示每个国家的总数据量和三类数据的占比,可以用堆叠柱状图,通过bottom参数控制柱子的起始位置,不会出现遮挡:

import numpy as np
import matplotlib.pyplot as plt

plt.figure(figsize=(16, 9))
bar_width = 0.6

plt.bar(countryNames, cases, width=bar_width, color='green', label='Total Cases')
plt.bar(countryNames, recovered, width=bar_width, bottom=cases, color='blue', label='Total Recovered')
plt.bar(countryNames, deaths, width=bar_width, bottom=np.add(cases, recovered), color='black', label='Total Deaths')

plt.xticks(rotation=45, ha='right')
plt.legend()
plt.tight_layout()
plt.show()

额外优化建议(国家数量过多时适用)

  • 如果国家数量超过20个,建议先按累计确诊数排序,只取TOP10/20的国家展示,过多数据挤在一张图里天然无法清晰识别
  • 可以改用横向柱状图,把国家名称放在y轴,避免长标签拥挤:将plt.bar替换为plt.barh即可,同时调整对应坐标轴的标签设置
  • 如果需要展示所有国家,可以将图表拆分为多张子图,每张子图展示部分国家的数据

内容的提问来源于stack exchange,提问作者kojo justine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:06:04