读取excel数据并绘制柱状图

如何使用 Python 的 pyechartsmatplotlibseaborn 三个库从 Excel 中读取数据并绘制柱状图。每个库的代码示例均包含核心类、函数和属性的详细说明。


1. 使用 pyecharts 绘制柱状图

pyecharts 是基于百度 ECharts 的交互式可视化库,适合生成动态网页图表。
第一步:读取数据(生成列表数据赋值给x、y)
第二步:创建柱状图对象添加数据
第三步:配置全局选项、渲染

代码示例:

import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts

# 读取Excel数据
df = pd.read_excel("data.xlsx")
x_data = df["年份"].tolist()  # X轴数据
y_data = df["销售额"].tolist()  # Y轴数据

# 创建柱状图对象
bar = Bar()

# 添加数据
bar.add_xaxis(x_data)
bar.add_yaxis("销售额(万元)", y_data)

# 配置全局选项
bar.set_global_opts(
    title_opts=opts.TitleOpts(title="年度销售额柱状图"),  # 标题
    xaxis_opts=opts.AxisOpts(name="年份"),                # X轴名称
    yaxis_opts=opts.AxisOpts(name="销售额"),              # Y轴名称
    toolbox_opts=opts.ToolboxOpts()                      # 显示工具箱(保存图片等)
)

# 渲染为HTML文件
bar.render("pyecharts_bar.html")

核心类与函数:

  • Bar(): 柱状图对象,属于 pyecharts.charts.Bar 类。
  • add_xaxis(x_data): 添加 X 轴数据,参数为列表。
  • add_yaxis(series_name, y_data): 添加 Y 轴数据,series_name 为图例名称。
  • set_global_opts(): 配置全局参数,如标题、坐标轴名称。
    • title_opts: 标题配置(opts.TitleOpts)。
    • xaxis_opts/yaxis_opts: 坐标轴配置(opts.AxisOpts)。
    • toolbox_opts: 工具箱配置(导出图片、数据视图等)。

2. 使用 matplotlib 绘制柱状图

matplotlib 是 Python 最基础的绘图库,高度可定制化。
第一步:读取数据(生成Series数据赋值给x、y)
第二步:绘制柱状图
第三步:添加标签和标题、显示数值标签
第四步:显示图表

代码示例:

import pandas as pd
import matplotlib.pyplot as plt

# 读取Excel数据
df = pd.read_excel("data.xlsx")
x_data = df["年份"]
y_data = df["销售额"]

# 创建画布和坐标系
fig, ax = plt.subplots(figsize=(10, 6))

# 绘制柱状图
bars = ax.bar(
    x=x_data,           # X轴数据
    height=y_data,      # Y轴数据
    color="skyblue",    # 颜色
    edgecolor="black"   # 边框颜色
)

# 添加标签和标题
ax.set_xlabel("年份", fontsize=12)
ax.set_ylabel("销售额(万元)", fontsize=12)
ax.set_title("年度销售额柱状图", fontsize=14)

# 旋转X轴标签
plt.xticks(rotation=45)

# 显示数值标签
for bar in bars:
    height = bar.get_height()
    ax.text(
        bar.get_x() + bar.get_width() / 2,  # 水平居中
        height + 5,                         # 垂直偏移
        f"{height}",                        # 文本内容
        ha="center",                        # 水平对齐
        va="bottom"                         # 垂直对齐
    )

# 显示图表
plt.tight_layout()
plt.savefig("matplotlib_bar.png")  # 保存为图片
plt.show()

核心函数与属性:

  • plt.subplots(): 创建画布和坐标系,返回 fig(画布)和 ax(坐标系)。
  • ax.bar(): 绘制柱状图,返回矩形对象列表。
    • x: X 轴数据(列表或数组)。
    • height: Y 轴数据(柱高度)。
    • color: 柱颜色,edgecolor: 边框颜色。
  • ax.set_xlabel()/ax.set_ylabel(): 设置坐标轴标签。
  • ax.set_title(): 设置图表标题。
  • bar.get_height(): 获取柱的高度。

3. 使用 seaborn 绘制柱状图

seaborn 是基于 matplotlib 的高级封装,支持更简洁的语法和统计功能。
第一步:读取数据
第二步:创建柱状图(将df数据赋值给柱状图数据源,指定x、y值的列索引)
第三步:添加标签和标题、显示数值标签
第四步:显示图表

代码示例:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 读取Excel数据
df = pd.read_excel("data.xlsx")

# 设置主题和字体
sns.set_theme(style="whitegrid", font="SimHei")  # 中文需指定字体

# 创建柱状图
plt.figure(figsize=(10, 6))
ax = sns.barplot(
    data=df,                # 数据源
    x="年份",                # X轴字段
    y="销售额",              # Y轴字段
    palette="Blues_d",      # 调色板
    ci=None                 # 关闭误差线
)

# 添加标题和标签
ax.set_title("年度销售额柱状图", fontsize=14)
ax.set_xlabel("年份", fontsize=12)
ax.set_ylabel("销售额(万元)", fontsize=12)

# 旋转X轴标签
ax.set_xticklabels(ax.get_xticklabels(), rotation=45)

# 显示数值标签
for p in ax.patches:
    ax.text(
        p.get_x() + p.get_width() / 2,  # 水平居中
        p.get_height() + 5,              # 垂直偏移
        f"{p.get_height()}",             # 文本内容
        ha="center",                     # 水平对齐
        va="bottom"                      # 垂直对齐
    )

# 显示图表
plt.tight_layout()
plt.savefig("seaborn_bar.png")
plt.show()

核心函数与参数:

  • sns.set_theme(): 设置主题样式(如 whitegrid)、字体等。
  • sns.barplot(): 绘制柱状图,支持直接使用 DataFrame 字段名。
    • data: 输入数据(DataFrame)。
    • x/y: 指定 DataFrame 中的列名。
    • palette: 颜色主题(如 "Blues_d")。
    • ci: 误差线(设为 None 关闭)。
  • ax.patches: 获取所有柱对象(矩形列表)。
  • p.get_height(): 获取单个柱的高度。

对比总结

特点 适用场景
pyecharts 交互式图表,适合网页展示 需要动态交互或网页嵌入
matplotlib 高度可定制化,代码稍复杂 需要精细控制的静态图表
seaborn 语法简洁,默认美观,集成统计功能 快速生成统计图表

根据需求选择合适的库:优先 seaborn 快速绘图,需要交互时用 pyecharts,定制化需求用 matplotlib

posted @ 2025-04-21 08:10  天堂面包  阅读(228)  评论(0)    收藏  举报