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

如何在PyCharm中用Python基于多份CSV文件绘制指定折线图?

新手Python数据可视化指导:绘制多指标折线图

准备工作

先安装所需工具库,在终端执行:

pip install pandas matplotlib

代码实现步骤

1. 导入库并定义文件路径

import pandas as pd
import matplotlib.pyplot as plt

# 对应Data文件夹里的所有CSV文件,注意文件名空格要匹配
file_paths = {
    "coffee": "./Data/coffee- consumption-by-country-2024.csv",
    "alcohol": "./Data/total-alcohol-consumption-per-capital-litres-of-pure-alcohol.csv",
    "eye_color": "./Data/eye-color percentage-by-country-2024.csv",
    "female_life_expectancy": "./Data/Life_ecpectancy_female_1960-2021.csv",
    "mean_height": "./Data/mean_height_per_countries_age_specific.csv",
    "female_bmi": "./Data/bmi_per_country_female.csv"
}

2. 加载并预处理数据

不同CSV的结构可能有差异,这里举两类典型处理方式:

  • 单年份指标(如咖啡、酒精消费量):直接提取国家和对应指标列
# 示例:加载咖啡消费数据
coffee_df = pd.read_csv(file_paths["coffee"])
# 替换成你实际文件里的列名,比如"Country"和"Consumption"
coffee_df = coffee_df[["Country", "Coffee Consumption"]].sort_values(by="Coffee Consumption", ascending=False)
  • 时间序列指标(如女性预期寿命):转成长格式方便绘制年份趋势
# 示例:加载女性预期寿命数据
life_expectancy_df = pd.read_csv(file_paths["female_life_expectancy"])
# 将年份列转为行数据,保留国家作为标识
life_expectancy_long = life_expectancy_df.melt(id_vars=["Country"], var_name="Year", value_name="Life Expectancy")
# 把年份转成数值类型
life_expectancy_long["Year"] = pd.to_numeric(life_expectancy_long["Year"])

3. 绘制匹配参考样式的折线图

参考目标样式(带网格、折线标记、清晰标签),以咖啡消费量为例:

# 创建画布,设置尺寸
plt.figure(figsize=(12, 6))

# 绘制折线,添加标记点,调整线条粗细
plt.plot(coffee_df["Country"], coffee_df["Coffee Consumption"], marker='o', linestyle='-', linewidth=2, markersize=6)

# 设置图表样式
plt.grid(True, alpha=0.3)  # 添加半透明网格
plt.xlabel("国家", fontsize=12)
plt.ylabel("咖啡消费量(单位:杯/年)", fontsize=12)
plt.title("各国咖啡消费量(2024)", fontsize=14, pad=15)

# 旋转x轴标签避免重叠
plt.xticks(rotation=45, ha="right")

# 调整布局,防止标签被截断
plt.tight_layout()

# 显示图表
plt.show()

4. 扩展到时间序列类指标

以女性预期寿命为例,绘制特定国家的年份趋势:

plt.figure(figsize=(12, 6))

# 选择要展示的国家
target_countries = ["China", "United States", "Japan"]
for country in target_countries:
    country_data = life_expectancy_long[life_expectancy_long["Country"] == country]
    plt.plot(country_data["Year"], country_data["Life Expectancy"], marker='s', linestyle='--', linewidth=2, markersize=6, label=country)

plt.grid(True, alpha=0.3)
plt.xlabel("年份", fontsize=12)
plt.ylabel("女性预期寿命(岁)", fontsize=12)
plt.title("女性预期寿命趋势(1960-2021)", fontsize=14, pad=15)
plt.legend()  # 显示图例
plt.tight_layout()
plt.show()

注意事项

  • 每个CSV的列名可能和示例不同,先打开文件确认列名再修改代码
  • 若数据有缺失值,用df.dropna()删除或df.fillna()填充
  • 若要在同一张图展示多指标,注意单位差异,可考虑使用双坐标轴

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:20:10