如何让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
相关产品推荐
相关产品推荐

