难道做一个动态的图表, 居然花费了长达三个小时之久吗? 如果是这样的话, 那么你就确实应当换一种新的方法来进行操作了。
上周的时候, 帮销售部门去做那个季度汇报的图表, 在处理Excel这个软件的操作过程当中, 把我搞得非常的崩溃。
在插入折线图以后, 发现数据源选择错了, 重新选择数据以后又需要调整格式。想要做一个动态筛选的图表, 就去捣鼓“开发工具”, 点击“插入控件”, 再去设置控件格式。结果公式报错说#REF!。老板要对比三年的数据, 三个图表的配色怎么调都不一致。最后导出图片的时候太模糊了, 被要求重新截图。
Excel 图表的 5 大罪状:
我在这张报表里面调整了那 4 个图表的格式, 折腾了整整 2 个小时的时间, 最后才算是勉强把它们给对齐了。
一共才15 行的代码, 就可以把那个动态的图表给搞定掉。这个操作非常简单, 你只要执行复制和粘贴的动作, 接着就运行就行了。
您只需花费三分钟的时间, 便能够对静态图表有直接的掌握和认识。
import pandas as pdimport matplotlib.pyplot as plt
# 解决中文显示乱码(我上次踩过的坑)
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei"]
plt.rcParams["axes.unicode_minus"] = False # 负号显示正常
# 读取数据(替换成你的Excel路径)
df = pd.read_excel("销售数据.xlsx")
# 生成柱状图
plt.figure(figsize=(10, 6)) # 图表大小
plt.bar(df["月份"], df["销售额"], color="#4CAF50") # 绿色柱子
plt.title("2023年销售额趋势", fontsize=15)
plt.xlabel("月份")
plt.ylabel("销售额(万元)")
plt.grid(axis="y", linestyle="--", alpha=0.7) # 横向网格线
# 保存为高清图片(300dpi打印级)
plt.savefig("销售额趋势.png", dpi=300, bbox_inches="tight")
plt.close() # 关闭图表窗口
这是一个动态的, 能够进行交互操作的图表。
import plotly.express as px# 读取数据
df = pd.read_excel("销售数据.xlsx")
# 生成动态折线图
fig = px.line(
df,
x="月份",
y=["销售额", "利润"], # 两条数据线
title="销售额与利润动态趋势",
labels={"value": "金额(万元)", "variable": "指标"}, # 坐标轴标签
markers=True, # 显示数据点
color_discrete_map={"销售额": "#2196F3", "利润": "#FF9800"} # 自定义颜色
)
# 添加悬停效果(鼠标放上去显示具体数值)
fig.update_traces(
hovertemplate="%{x}
%{variable}: %{y}万元"
)
# 保存为网页(双击就能交互)
fig.write_html("动态销售趋势.html")
print(" 动态图表生成成功!
打开html文件可筛选/缩放")
用户需要通过电脑里的浏览器软件去打开HTML格式的文件, 在这个界面上可以看到图例, 只要点击一下这个图例就能显示或者隐藏数据线信息, 另外如果把鼠标移动上去悬停在相关位置的时候就能看到具体的数值。
总结 3 个实战技巧图表嵌入 Excel:用 把生成的图片插入报表
from openpyxl import load_workbookfrom openpyxl.drawing.image import Image
wb = load_workbook("报表.xlsx")
ws = wb.active
img = Image("销售额趋势.png")
ws.add_image(img, "E2") # 插入到E2单元格
wb.save("带图表的报表.xlsx")
进行批量生成的时候, 去做出多个图表的样子, 这个操作是通过循环的方式来处理不同的产品数据的。
for product in df["产品"].unique():product_df = df[df["产品"] == product]
# 生成该产品的图表...
这个动态筛选功能是拿那个下拉菜单来当工具的。
fig.update_layout(updatemenus=[{
"buttons": [
{"label": "全部产品", "method": "update", "args": [{"visible": [True, True, True]}]},
{"label": "仅产品A", "method": "update", "args": [{"visible": [True, False, False]}]}
]
}]
)
这里需要提醒您一下, 在你运行那一段代码之前,请一定务必要注意去把那个名为Excel的文件和那个名为脚本的文件都放置到处于同一个文件夹内的位置。
现在, 你是可以把源代码里面的“销售数据.xlsx”这一项给更换成属于你自己的那个文件, 然后去亲身感受一下在5分钟之内就能把动态图表给生成出来的那种快乐, 这就意味着你可以不用再对着Excel里的图表向导在那儿发呆发愣了, 如果出现了任何的报错情况, 有百分之90的可能性就是文件路径这一处没有放对地方, 你要记得去进行检查操作。