如何用Python从行式结构CSV文件绘制三类柱状图?
解决行类别CSV的独立柱状图绘制问题
嘿,这个问题其实挺常见的——你的CSV是行代表指标类别(TotalCases、Deaths、Recovered),而多数可视化工具默认期望列对应类别,核心解决方案就是先把数据做适配处理,不需要大改结构就能生成独立柱状图。我用Python的pandas+matplotlib给你演示最通用的实现步骤:
步骤1:读取并预处理CSV数据
首先要把带千分位逗号的字符串转成数值,同时处理N/A为可识别的缺失值:
import pandas as pd import matplotlib.pyplot as plt # 读取CSV,将第一列(行标题)设为索引,第一行设为列名(国家) df = pd.read_csv('your_data.csv', index_col=0) # 清理数据:移除千分位逗号,转成数值类型;N/A转为NaN df = df.apply(lambda col: pd.to_numeric(col.str.replace(',', ''), errors='coerce'))
步骤2:遍历每个指标生成独立柱状图
因为你的行就是需要单独可视化的指标,直接遍历每一行即可生成对应图表:
# 循环每个指标(TotalCases/Deaths/Recovered) for indicator in df.index: # 获取当前指标下所有国家的数值 country_data = df.loc[indicator] # 创建新的绘图窗口,避免图表重叠 plt.figure(figsize=(8, 5)) # 绘制柱状图,给每个国家分配不同颜色 country_data.plot(kind='bar', color=['#1f77b4', '#ff7f0e', '#2ca02c']) # 设置图表标题和标签 plt.title(f'COVID-19 {indicator} by Country', fontsize=14) plt.xlabel('Country', fontsize=12) plt.ylabel(indicator, fontsize=12) # 在柱子上方添加数值标签(跳过缺失值) for idx, value in enumerate(country_data): if not pd.isna(value): plt.text(idx, value + value*0.02, f'{int(value):,}', ha='center') # 调整布局防止标签被截断 plt.tight_layout() # 保存图表或直接显示 plt.savefig(f'{indicator}_bar_chart.png') plt.show()
如果你用Excel的快速方案
要是不想写代码,Excel里也能轻松搞定:
- 选中所有数据(包括表头和行标题),复制
- 右键空白单元格,选择选择性粘贴 → 勾选转置,这样行就变成列
- 分别选中转置后的每个指标列(比如TotalCases列),插入柱状图即可
这样不管是代码还是Excel,都能完美适配你的行类别CSV结构,生成每个指标的独立柱状图~
内容的提问来源于stack exchange,提问作者lukosius10
相关产品推荐
相关产品推荐

