目录

一、案例效果预览

最终生成图表示例

二、完整代码实现

1. 双折线图核心代码

2. 双柱状图叠加代码

三、关键技术解析

1. 数据读取优化技巧

2. 混合图表叠加方法

四、常见问题解决方案

1. 数据读取异常排查

2. 图表渲染失败处理

五.效果演示 

完整项目代码: 


 

一、案例效果预览

最终生成图表示例

  • 双折线图:展示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. 图表渲染失败处理

  • 错误现象:空白页面或无数据

  • 检查步骤

    1. 打印验证nameA_dataB_data是否包含有效数据

    2. 检查文件保存路径写入权限

    3. 确认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")

 

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐