基于python数据分析学习03--pyecharts生成折线图,同时实现双图叠加效果
确认Excel列标识正确(字母A/B/C或数字1/2/3):展示A/B两类商品的销售趋势对比(带平滑曲线):呈现A/B两类商品的销售数据堆积对比。支持交互式查看数据点数值。检查文件保存路径写入权限。剩下交给大家探索吧!
·
目录
一、案例效果预览
最终生成图表示例
-
双折线图:展示A/B两类商品的销售趋势对比(带平滑曲线)
-
双柱状图:呈现A/B两类商品的销售数据堆积对比
-
支持交互式查看数据点数值
二、完整代码实现
1. 双折线图核心代码
# ----------------------------
# 模块导入与数据准备
# ----------------------------
from pyecharts.charts import Line
from pyecharts import options as opts
from openpyxl import load_workbook
# 加载Excel文件(注意路径转义)
file_path = r"C:\Users\30717\Desktop\示例01.xlsx"
workbook = load_workbook(file_path)
sheet = workbook['Sheet1']
# 数据容器初始化
name, A_data, B_data = [], [], []
# ----------------------------
# 数据提取(跳过标题行)
# ----------------------------
for i, cell in enumerate(sheet['1']): # 读取第一列作为名称
if i > 0: name.append(cell.value)
for i, cell in enumerate(sheet['2']): # 读取第二列作为A数据
if i > 0: A_data.append(cell.value)
for i, cell in enumerate(sheet['3']): # 读取第三列作为B数据
if i > 0: B_data.append(cell.value)
# ----------------------------
# 双折线图绘制
# ----------------------------
line_chart = Line()
line_chart.add_xaxis(name)
line_chart.add_yaxis("A系列", A_data,
is_smooth=True, # 启用平滑曲线
linestyle_opts=opts.LineStyleOpts(width=3))
line_chart.add_yaxis("B系列", B_data,
is_smooth=True,
linestyle_opts=opts.LineStyleOpts(width=3, type_='dashed'))
line_chart.set_global_opts(
title_opts=opts.TitleOpts(title="商品销售趋势分析"),
yaxis_opts=opts.AxisOpts(name="销售量(件)"),
tooltip_opts=opts.TooltipOpts(trigger="axis")
)
line_chart.render("dual_line_chart.html")
2. 双柱状图叠加代码
同时,利用overlap我们可以实现任意两个图叠加效果,如柱状图:
#导入柱状图模块
from pyecharts.charts import Bar
#导入excel处理的模块
from openpyxl import load_workbook
#打开文件,注意要加r或是使用\\
file_path=r"C:\Users\30719\Desktop\示例01.xlsx"
workbook=load_workbook(file_path)
#读取第一工作表
sheet=workbook['Sheet1']
#读取单元格数据,注意单元格数据必须要加.value
cell_value=sheet['A2'].value
print(f"A1单元格的值: {cell_value}")
name=[]
A=[]
B=[]
for i,s in enumerate(sheet['1']):
if i>0:
name.append(s.value)
for i,s in enumerate(sheet['2']):
if i>0:
A.append(s.value)
for i,s in enumerate(sheet['3']):
if i>0:
B.append(s.value)
bar=Bar()
#添加x,y轴的数据
bar.add_xaxis(xaxis_data=name)
#图例名称参数series_name,图例名称用于区分柱状图,在图表中呈现不同的颜色,并且默认显示在图表上方
#如果不设置图例名称是会报错的
bar.add_yaxis(series_name="A",y_axis=A)
bar.set_global_opts(
title_opts=opts.TitleOpts(title="商品销售排行榜"),
yaxis_opts=opts.AxisOpts(name="销售量(件)"))
bar1=Bar()
bar1.add_yaxis(series_name="B",y_axis=B)
bar.overlap(bar1)
#保存文件
bar.render("D:\\可视化文件\\p2.html")
三、关键技术解析
1. 数据读取优化技巧
# 动态获取有效数据行(跳过空值)
def get_valid_data(col_letter):
return [cell.value for cell in sheet[col_letter]
if cell.value is not None][1:] # 自动跳过标题行
2. 混合图表叠加方法
# 折线图+柱状图组合(扩展应用)
combined = Line()
combined.add_yaxis("趋势线", trend_data)
bar = Bar().add_yaxis("柱状数据", bar_data)
combined.overlap(bar)
四、常见问题解决方案
1. 数据读取异常排查
-
错误现象:
KeyError: '1' -
解决方法:确认Excel列标识正确(字母A/B/C或数字1/2/3)
2. 图表渲染失败处理
-
错误现象:空白页面或无数据
-
检查步骤:
-
打印验证
name,A_data,B_data是否包含有效数据 -
检查文件保存路径写入权限
-
确认
render()输出路径存在
-
五.效果演示

剩下交给大家探索吧!
完整项目代码:
#导入折线图模块
from pyecharts.charts import Line
from pyecharts import options as opts
#导入excel处理的模块
from openpyxl import load_workbook
file_path=r"C:\Users\30719\Desktop\示例01.xlsx"
workbook=load_workbook(file_path)
#读取第一工作表
sheet=workbook['Sheet1']
#读取单元格数据,注意单元格数据必须要加.value
cell_value=sheet['A2'].value
print(f"A1单元格的值: {cell_value}")
name=[]
A=[]
B=[]
for i,s in enumerate(sheet['1']):
if i>0:
name.append(s.value)
for i,s in enumerate(sheet['2']):
if i>0:
A.append(s.value)
for i,s in enumerate(sheet['3']):
if i>0:
B.append(s.value)
line=Line()
line.add_xaxis(xaxis_data=name)
#is_smooth用来设置是否为平滑折线图
line.add_yaxis(series_name="A",y_axis=A,is_smooth=True)
line.set_global_opts(
title_opts=opts.TitleOpts(title="商品销售排行榜"),
yaxis_opts=opts.AxisOpts(name="销售量(件)"))
line1=Line()
line.add_yaxis(series_name="B",y_axis=B)
#注意是在我们line上overlap
line.overlap(line1)
line.render("D:\\可视化文件\\p4.html")
#导入柱状图模块
from pyecharts.charts import Bar
#导入excel处理的模块
from openpyxl import load_workbook
#打开文件,注意要加r或是使用\\
file_path=r"C:\Users\30719\Desktop\示例01.xlsx"
workbook=load_workbook(file_path)
#读取第一工作表
sheet=workbook['Sheet1']
#读取单元格数据,注意单元格数据必须要加.value
cell_value=sheet['A2'].value
print(f"A1单元格的值: {cell_value}")
name=[]
A=[]
B=[]
for i,s in enumerate(sheet['1']):
if i>0:
name.append(s.value)
for i,s in enumerate(sheet['2']):
if i>0:
A.append(s.value)
for i,s in enumerate(sheet['3']):
if i>0:
B.append(s.value)
bar=Bar()
#添加x,y轴的数据
bar.add_xaxis(xaxis_data=name)
#图例名称参数series_name,图例名称用于区分柱状图,在图表中呈现不同的颜色,并且默认显示在图表上方
#如果不设置图例名称是会报错的
bar.add_yaxis(series_name="A",y_axis=A)
bar.set_global_opts(
title_opts=opts.TitleOpts(title="商品销售排行榜"),
yaxis_opts=opts.AxisOpts(name="销售量(件)"))
bar1=Bar()
bar1.add_yaxis(series_name="B",y_axis=B)
bar.overlap(bar1)
#保存文件
bar.render("D:\\可视化文件\\p2.html")
更多推荐


所有评论(0)