pyecharts是一个基于ECharts的Python图表库,能够创建各种交互式图表。ECharts本身是JavaScript可视化库,pyecharts让Python用户也能轻松制作专业图表。
使用pip安装pyecharts:
pip install pyecharts安装完成后检查版本:
import pyecharts
print(pyecharts.__version__)pyecharts 支持以下图表类型图表:
| 图表类型 | pyecharts 类 | 包引入 |
|---|---|---|
| 折线图 | Line | from pyecharts.charts import Line |
| 柱状图 | Bar | from pyecharts.charts import Bar |
| 散点图 | Scatter | from pyecharts.charts import Scatter |
| 饼图 | Pie | from pyecharts.charts import Pie |
| 雷达图 | Radar | from pyecharts.charts import Radar |
| 热力图 | HeatMap | from pyecharts.charts import HeatMap |
| K 线图 | Kline | from pyecharts.charts import Kline |
| 箱线图 | Boxplot | from pyecharts.charts import Boxplot |
| 地图 | Map | from pyecharts.charts import Map |
| 词云图 | WordCloud | from pyecharts.charts import WordCloud |
| 仪表盘 | Gauge | from pyecharts.charts import Gauge |
| 漏斗图 | Funnel | from pyecharts.charts import Funnel |
| 树图 | Tree | from pyecharts.charts import Tree |
| 平行坐标系图 | Parallel | from pyecharts.charts import Parallel |
| 桑基图 | Sankey | from pyecharts.charts import Sankey |
| 地理坐标系图 | Geo | from pyecharts.charts import Geo |
| 时间线图 | Timeline | from pyecharts.charts import Timeline |
| 3D 散点图 | Scatter3D | from pyecharts.charts import Scatter3D |
| 3D 柱状图 | Bar3D | from pyecharts.charts import Bar3D |
| 3D 曲面图 | Surface3D | from pyecharts.charts import Surface3D |
从简单的柱状图开始:
from pyecharts.charts import Bar
# 准备数据
months = ['一月', '二月', '三月', '四月', '五月']
sales = [120, 240, 180, 300, 350]
# 创建柱状图
bar = Bar()
bar.add_xaxis(months)
bar.add_yaxis("销售额", sales)
# 生成html文件
bar.render("sales_chart.html")运行代码后,会生成sales_chart.html文件。用浏览器打开这个文件,就能看到交互式柱状图。
pyecharts支持多种图表类型:
from pyecharts.charts import Line
# 创建折线图
line = Line()
line.add_xaxis(['周一', '周二', '周三', '周四', '周五', '周六', '周日'])
line.add_yaxis("温度", [22, 25, 18, 20, 23, 26, 24])
line.add_yaxis("湿度", [60, 55, 70, 65, 58, 52, 62])
line.render("weather_line.html")from pyecharts.charts import Pie
# 创建饼图
pie = Pie()
pie.add("", [["电子产品", 35], ["服装", 25], ["食品", 20], ["图书", 15], ["其他", 5]])
pie.render("sales_pie.html")from pyecharts.charts import Scatter
# 创建散点图
scatter = Scatter()
scatter.add_xaxis([1, 2, 3, 4, 5])
scatter.add_yaxis("数据系列", [10, 20, 15, 25, 30])
scatter.render("scatter_plot.html")通过设置全局选项让图表更美观:
from pyecharts.charts import Bar
from pyecharts import options as opts
# 创建带样式的柱状图
bar = Bar()
bar.add_xaxis(['苹果', '香蕉', '橙子', '葡萄', '西瓜'])
bar.add_yaxis("销量", [150, 200, 180, 120, 250])
# 设置全局选项
bar.set_global_opts(
title_opts=opts.TitleOpts(title="水果销量统计", subtitle="2024年数据"),
xaxis_opts=opts.AxisOpts(name="水果种类"),
yaxis_opts=opts.AxisOpts(name="销量(公斤)"),
legend_opts=opts.LegendOpts(is_show=True)
)
bar.render("styled_bar.html")pyecharts提供多种主题:
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType
# 使用暗色主题
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
bar.add_xaxis(['第一季度', '第二季度', '第三季度', '第四季度'])
bar.add_yaxis("收入", [450, 620, 580, 720])
bar.add_yaxis("支出", [320, 380, 350, 410])
bar.set_global_opts(
title_opts=opts.TitleOpts(title="年度财务报告"),
xaxis_opts=opts.AxisOpts(name="季度"),
yaxis_opts=opts.AxisOpts(name="金额(万元)")
)
bar.render("dark_theme_bar.html")可用主题包括:
ThemeType.LIGHT:亮色主题
ThemeType.DARK:暗色主题
ThemeType.CHALK:粉笔风格
ThemeType.WALDEN:森林风格
ThemeType.ESSOS:绿色调主题
from pyecharts.charts import Bar, Line
from pyecharts import options as opts
from pyecharts.components import Table
from pyecharts.charts import Page
def create_sales_dashboard():
# 创建页面
page = Page(layout=Page.SimplePageLayout)
# 月度销售额柱状图
months = ['1月', '2月', '3月', '4月', '5月', '6月']
sales_2023 = [120, 150, 180, 200, 190, 220]
sales_2024 = [140, 170, 210, 230, 250, 280]
bar = Bar()
bar.add_xaxis(months)
bar.add_yaxis("2023年", sales_2023)
bar.add_yarray("2024年", sales_2024)
bar.set_global_opts(
title_opts=opts.TitleOpts(title="月度销售额对比"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)")
)
# 销售增长率折线图
growth_rate = [((sales_2024[i] - sales_2023[i]) / sales_2023[i] * 100) for i in range(len(months))]
line = Line()
line.add_xaxis(months)
line.add_yaxis("增长率%", growth_rate)
line.set_global_opts(
title_opts=opts.TitleOpts(title="销售增长率"),
yaxis_opts=opts.AxisOpts(name="增长率%")
)
page.add(bar, line)
page.render("sales_dashboard.html")
create_sales_dashboard()from pyecharts.charts import Bar, Pie, Scatter
from pyecharts import options as opts
def student_analysis():
# 学生成绩数据
students = ['张三', '李四', '王五', '赵六', '钱七']
math_scores = [85, 92, 78, 65, 88]
english_scores = [78, 85, 90, 72, 80]
# 成绩分布柱状图
bar = Bar()
bar.add_xaxis(students)
bar.add_yaxis("数学成绩", math_scores)
bar.add_yaxis("英语成绩", english_scores)
bar.set_global_opts(
title_opts=opts.TitleOpts(title="学生成绩对比"),
yaxis_opts=opts.AxisOpts(name="分数")
)
# 成绩分布饼图
score_ranges = ['优秀(90-100)', '良好(80-89)', '及格(60-79)', '不及格(<60)']
score_counts = [1, 3, 1, 0] # 根据实际数据统计
pie = Pie()
pie.add("", [list(z) for z in zip(score_ranges, score_counts)])
pie.set_global_opts(title_opts=opts.TitleOpts(title="成绩分布"))
# 保存图表
bar.render("student_scores_bar.html")
pie.render("score_distribution_pie.html")
student_analysis()from pyecharts.charts import Map
from pyecharts import options as opts
def create_china_map():
# 中国各省份数据
provinces = ['北京', '上海', '广东', '江苏', '浙江', '山东', '河南', '四川', '湖北', '湖南']
values = [120, 110, 180, 160, 150, 140, 130, 100, 90, 85]
map_chart = Map()
map_chart.add("销售额", [list(z) for z in zip(provinces, values)], "china")
map_chart.set_global_opts(
title_opts=opts.TitleOpts(title="全国销售额分布"),
visualmap_opts=opts.VisualMapOpts(max_=200)
)
map_chart.render("china_sales_map.html")
create_china_map()添加工具栏和数据提示:
from pyecharts.charts import Line
from pyecharts import options as opts
def interactive_chart():
line = Line()
# 添加数据
days = [f"{i}日" for i in range(1, 31)]
temperature = [22, 23, 25, 24, 26, 28, 27, 25, 23, 22,
20, 21, 23, 24, 26, 25, 27, 26, 24, 23,
22, 24, 26, 28, 27, 25, 24, 23, 22, 21]
line.add_xaxis(days)
line.add_yaxis("温度", temperature)
# 设置交互选项
line.set_global_opts(
title_opts=opts.TitleOpts(title="月度温度变化"),
toolbox_opts=opts.ToolboxOpts(
is_show=True,
feature={
"saveAsImage": {"show": True},
"restore": {"show": True},
"dataView": {"show": True}
}
),
datazoom_opts=opts.DataZoomOpts(is_show=True),
tooltip_opts=opts.TooltipOpts(trigger="axis")
)
line.render("interactive_line.html")
interactive_chart()创建包含多个图表的仪表板:
from pyecharts.charts import Bar, Line, Pie
from pyecharts import options as opts
from pyecharts.charts import Page
def create_company_dashboard():
page = Page(layout=Page.DraggablePageLayout)
# 部门业绩柱状图
departments = ['技术部', '销售部', '市场部', '人事部', '财务部']
performance = [85, 92, 78, 65, 70]
bar = Bar()
bar.add_xaxis(departments)
bar.add_yaxis("绩效评分", performance)
bar.set_global_opts(title_opts=opts.TitleOpts(title="部门绩效"))
# 项目进度折线图
weeks = ['第1周', '第2周', '第3周', '第4周']
project_a = [20, 45, 70, 90]
project_b = [10, 30, 60, 85]
line = Line()
line.add_xaxis(weeks)
line.add_yaxis("项目A", project_a)
line.add_yaxis("项目B", project_b)
line.set_global_opts(title_opts=opts.TitleOpts(title="项目进度"))
# 员工分布饼图
positions = ['开发', '测试', '设计', '产品', '运营']
employee_count = [25, 15, 10, 8, 12]
pie = Pie()
pie.add("", [list(z) for z in zip(positions, employee_count)])
pie.set_global_opts(title_opts=opts.TitleOpts(title="员工职位分布"))
page.add(bar, line, pie)
page.render("company_dashboard.html")
create_company_dashboard()创建支持数据更新的图表:
from pyecharts.charts import Bar
from pyecharts import options as opts
def dynamic_data_chart():
bar = Bar()
# 初始数据
categories = ['产品A', '产品B', '产品C', '产品D']
sales_data = [120, 150, 180, 90]
bar.add_xaxis(categories)
bar.add_yaxis("销售额", sales_data)
bar.set_global_opts(
title_opts=opts.TitleOpts(title="实时销售数据"),
yaxis_opts=opts.AxisOpts(name="销售额(万)")
)
# 添加数据刷新功能
bar.set_global_opts(
toolbox_opts=opts.ToolboxOpts(
feature={
"dataZoom": {"show": True},
"saveAsImage": {"show": True},
"restore": {"show": True}
}
)
)
bar.render("dynamic_sales.html")
dynamic_data_chart()将图表导出为图片:
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot
def export_as_image():
bar = Bar()
bar.add_xaxis(['第一季度', '第二季度', '第三季度', '第四季度'])
bar.add_yaxis("收入", [450, 620, 580, 720])
bar.set_global_opts(title_opts=opts.TitleOpts(title="年度收入"))
# 保存为HTML
bar.render("annual_income.html")
# 导出为PNG图片
make_snapshot(snapshot, bar.render(), "annual_income.png")
export_as_image()数据处理:先用pandas处理数据,再用pyecharts绘图
颜色搭配:选择对比明显的颜色系列
图表选择:根据数据类型选择合适的图表类型
交互设计:合理设置提示信息和缩放功能
响应式布局:确保图表在不同设备上正常显示
pyecharts是一个功能强大的Python可视化库,特点包括:
支持多种图表类型
丰富的交互功能
美观的主题样式
简单的api设计
良好的浏览器兼容性
通过本文介绍的示例,你可以快速上手pyecharts,创建各种数据可视化图表。
记住,好的可视化不仅要美观,更要准确传达数据信息。选择合适的图表类型,合理配置样式,才能制作出真正有用的数据可视化作品。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!