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

