今天给大家整理了最常用的二维 、三维绘图方法,每一种都附完整可运行源码,复制粘贴就能用,新手也能快速上手,数据分析、报告展示直接抄作业~pyecharts 的核心逻辑超简单:初始化图表对象→配置数据 / 样式→生成 html 文件(可直接浏览器打开,支持交互),所有图表都遵循这个思路。1. 折线图(展示数据趋势变化)
适合时间序列、指标走势分析,支持多折线对比、标注极值,交互时可悬浮看具体数值:
from pyecharts import options as optsfrom pyecharts.charts import Linefrom pyecharts.globals import ThemeType# 数据准备(x轴:月份,y轴:两个产品销量)x_data = ["1月", "2月", "3月", "4月", "5月", "6月"]y1_data = [120, 200, 150, 80, 70, 110]y2_data = [80, 150, 100, 120, 90, 130]# 绘制折线图line = ( Line(init_opts=opts.InitOpts(theme=ThemeType.MACARONS, width="1000px", height="600px")) .add_xaxis(x_data) .add_yaxis("产品A", y1_data, markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max"), opts.MarkPointItem(type_="min")])) .add_yaxis("产品B", y2_data, markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")])) .set_global_opts(title_opts=opts.TitleOpts(title="产品销量趋势图", subtitle="2026年上半年"), tooltip_opts=opts.TooltipOpts(trigger="axis"), legend_opts=opts.LegendOpts(pos_left="center")))# 生成html文件line.render("折线图.html")
2. 柱状图(对比不同类别数据)
适合多维度数据对比,支持纵向 / 横向、堆叠柱状图,这里以经典纵向对比为例:
from pyecharts import options as optsfrom pyecharts.charts import Barfrom pyecharts.globals import ThemeTypex_data = ["北京", "上海", "广州", "深圳", "杭州"]y_data = [85, 92, 78, 90, 88]bar = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMA, width="1000px", height="600px")) .add_xaxis(x_data) .add_yaxis("用户满意度", y_data, color="#FF6347") .set_global_opts(title_opts=opts.TitleOpts(title="各城市用户满意度调研"), xaxis_opts=opts.AxisOpts(name="城市"), yaxis_opts=opts.AxisOpts(name="满意度(分)", min_=0, max_=100)))bar.render("柱状图.html")
3. 散点图(展示数据相关性)
适合分析两个变量之间的关联,支持按类别着色,直观区分不同组别:
from pyecharts import options as optsfrom pyecharts.charts import Scatterfrom pyecharts.globals import ThemeTypeimport random# 随机生成测试数据x_data = [random.randint(0, 100) for _ in range(50)]y_data = [random.randint(0, 100) for _ in range(50)]scatter = ( Scatter(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, width="1000px", height="600px")) .add_xaxis(x_data) .add_yaxis("数据组", y_data, symbol_size=10, color="#4169E1") .set_global_opts(title_opts=opts.TitleOpts(title="数据相关性散点图"), xaxis_opts=opts.AxisOpts(name="X变量"), yaxis_opts=opts.AxisOpts(name="Y变量"), tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{c}")))scatter.render("散点图.html")
4. 饼图(展示数据占比分布)
适合各类别占比分析,支持环形图、南丁格尔图,这里以最常用的环形饼图为例:
from pyecharts import options as optsfrom pyecharts.charts import Piefrom pyecharts.globals import ThemeType# 数据:品类-销售额data = [("食品", 350), ("服装", 280), ("家电", 420), ("美妆", 210), ("其他", 140)]pie = ( Pie(init_opts=opts.InitOpts(theme=ThemeType.LIGHT, width="800px", height="600px")) .add("", data, radius=["40%", "70%"], label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)")) .set_global_opts(title_opts=opts.TitleOpts(title="商品品类销售额占比")))pie.render("饼图.html")
5. 热力图(展示数据密度 / 热度)
适合二维数据的热度分布,比如用户行为、地区数据密度,这里以模拟地区热度为例:
from pyecharts import options as optsfrom pyecharts.charts import HeatMapfrom pyecharts.globals import ThemeTypeimport random# 构造数据:[x, y, 热度值]x_data = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]y_data = ["1点", "2点", "3点", "4点", "5点"]data = [[i, j, random.randint(0, 100)] for i in range(7) for j in range(5)]heatmap = ( HeatMap(init_opts=opts.InitOpts(theme=ThemeType.DARK, width="1000px", height="600px")) .add_xaxis(x_data) .add_yaxis("热度分布", y_data, data, label_opts=opts.LabelOpts(is_show=True, position="inside")) .set_global_opts(title_opts=opts.TitleOpts(title="每日时段热度热力图"), visualmap_opts=opts.VisualMapOpts(min_=0, max_=100, orient="horizontal", pos_bottom="10px")))heatmap.render("热力图.html")

from pyecharts import options as optsfrom pyecharts.charts import Scatter3Dfrom pyecharts.globals import ThemeTypeimport random# 构造三维数据:[x, y, z]data = [[random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)] for _ in range(200)]scatter3d = ( Scatter3D(init_opts=opts.InitOpts(theme=ThemeType.MACARONS, width="1000px", height="700px")) .add("", data, grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100)) .set_global_opts(title_opts=opts.TitleOpts(title="3D散点图-三维数据分布"), visualmap_opts=opts.VisualMapOpts(dimension=2, min_=0, max_=100, range_color=["#00FFFF", "#FF00FF"])))scatter3d.render("3D散点图.html")

from pyecharts import options as optsfrom pyecharts.charts import Bar3Dfrom pyecharts.globals import ThemeTypeimport random# 构造3D柱状数据:[x, y, 数值]x_data = list(range(10))y_data = list(range(10))data = [[i, j, random.randint(0, 50)] for i in x_data for j in y_data]bar3d = ( Bar3D(init_opts=opts.InitOpts(theme=ThemeType.ROMA, width="1000px", height="700px")) .add("", data, xaxis3d_opts=opts.Axis3DOpts(x_data, type_="category"), yaxis3d_opts=opts.Axis3DOpts(y_data, type_="category"), zaxis3d_opts=opts.Axis3DOpts(type_="value")) .set_global_opts(title_opts=opts.TitleOpts(title="3D柱状图-立体数据对比"), visualmap_opts=opts.VisualMapOpts(min_=0, max_=50, range_color=["#FFE4E1", "#FF6347"])))bar3d.render("3D柱状图.html")
8. 3D 曲面图(展示三维曲面数据趋势)
适合展示连续的空间曲面数据,比如地形、温度场分布,效果超惊艳:
from pyecharts import options as optsfrom pyecharts.charts import Surface3Dfrom pyecharts.globals import ThemeTypeimport math# 构造曲面数据:基于数学函数生成def get_surface_data(): data = [] for x in range(-30, 30): for y in range(-30, 30): z = math.sin(math.sqrt(x**2 + y**2)) / (math.sqrt(x**2 + y**2) + 1e-8) data.append([x, y, z * 10]) return datasurface3d = ( Surface3D(init_opts=opts.InitOpts(theme=ThemeType.DARK, width="1000px", height="700px")) .add("", get_surface_data(), grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100)) .set_global_opts(title_opts=opts.TitleOpts(title="3D曲面图-数学函数曲面"), visualmap_opts=opts.VisualMapOpts(min_=-5, max_=5, range_color=["#0000FF", "#FFFFFF", "#FF0000"])))surface3d.render("3D曲面图.html")
使用技巧(新手必看)
- 样式自定义
通过init_opts设置主题(ThemeType 有 10 + 款)、图表宽高,通过color参数自定义配色,适配不同展示场景;- 交互配置
tooltip_opts开启悬浮提示,legend_opts调整图例位置,markpoint/markline标注极值 / 平均值,提升图表实用性;- 文件输出
render()生成 html 文件,支持浏览器直接打开,可嵌入网页、PPT,也可通过render_notebook()在 Jupyter 中直接展示;- 数据适配
所有图表的核心是数据格式,只需将自己的业务数据按示例格式整理,替换源码中的测试数据即可。把这篇收藏起来,下次做可视化再也不用到处找代码啦,直接抄作业,效率拉满~