使用Pyecharts绘制专业级Scatter散点图全攻略

一、环境准备与库安装

在开始可视化开发前,需确保Python环境满足要求。推荐使用Python 3.7+版本,通过pip工具安装Pyecharts核心库及其依赖:

  1. pip install pyecharts -i https://pypi.tuna.tsinghua.edu.cn/simple/
  2. # 如需支持Jupyter Notebook实时渲染,可追加安装
  3. pip install jupyterlab pyecharts-jupyter-installer

安装完成后,可通过简单测试验证环境:

  1. from pyecharts.charts import Scatter
  2. print("Pyecharts安装成功,版本号:", Scatter.__version__)

二、基础散点图构建

散点图的核心价值在于展示两个变量间的相关性。以下代码演示如何快速创建标准散点图:

1. 数据准备与初始化

  1. from pyecharts.charts import Scatter
  2. from pyecharts import options as opts
  3. # 示例数据:X轴为温度,Y轴为销售额
  4. data = [
  5. (25, 120), (26, 135), (27, 148),
  6. (28, 162), (29, 175), (30, 190)
  7. ]
  8. scatter = Scatter()
  9. scatter.add_xaxis([x[0] for x in data])
  10. scatter.add_yaxis("销售额", [y[1] for y in data])

2. 基础配置优化

通过全局选项设置图表标题、坐标轴标签等元素:

  1. scatter.set_global_opts(
  2. title_opts=opts.TitleOpts(title="温度-销售额关系图"),
  3. xaxis_opts=opts.AxisOpts(name="温度(℃)"),
  4. yaxis_opts=opts.AxisOpts(name="销售额(万元)")
  5. )
  6. scatter.render("basic_scatter.html")

三、进阶可视化技巧

1. 多系列散点图

当需要对比多组数据时,可通过add_yaxis方法叠加系列:

  1. # 新增一组对比数据
  2. data2 = [(25, 110), (26, 125), (27, 140),
  3. (28, 155), (29, 170), (30, 185)]
  4. scatter = Scatter()
  5. scatter.add_xaxis([x[0] for x in data])
  6. scatter.add_yaxis("系列A", [y[1] for y in data],
  7. symbol_size=12, color="#5793f3")
  8. scatter.add_yaxis("系列B", [y[1] for y in data2],
  9. symbol_size=12, color="#d14a61")
  10. scatter.set_global_opts(
  11. title_opts=opts.TitleOpts(title="多系列散点对比"),
  12. legend_opts=opts.LegendOpts(pos_top="5%")
  13. )

2. 气泡图实现

通过symbol_size参数控制点的大小,实现三维数据可视化:

  1. # 添加第三维度数据(如客户数量)
  2. bubble_data = [
  3. (25, 120, 50), (26, 135, 65),
  4. (27, 148, 80), (28, 162, 95)
  5. ]
  6. scatter = Scatter()
  7. scatter.add_xaxis([x[0] for x in bubble_data])
  8. scatter.add_yaxis(
  9. "气泡图",
  10. [(x[1], x[2]) for x in bubble_data], # Y轴数据+气泡大小
  11. symbol_size=lambda data: data[1]*0.5, # 动态调整大小
  12. label_opts=opts.LabelOpts(is_show=False)
  13. )

四、交互功能增强

1. 工具箱配置

添加下载、缩放、数据视图等交互功能:

  1. scatter.set_global_opts(
  2. toolbox_opts=opts.ToolboxOpts(
  3. is_show=True,
  4. feature={
  5. "saveAsImage": {},
  6. "dataZoom": {},
  7. "restore": {}
  8. }
  9. )
  10. )

2. 视觉映射组件

通过视觉映射(VisualMap)实现数据值到颜色的自动映射:

  1. from pyecharts.commons.utils import JsCode
  2. scatter = Scatter()
  3. scatter.add_xaxis([x[0] for x in data])
  4. scatter.add_yaxis(
  5. "带视觉映射",
  6. [y[1] for y in data],
  7. symbol_size=12,
  8. label_opts=opts.LabelOpts(is_show=False)
  9. )
  10. scatter.set_global_opts(
  11. visualmap_opts=opts.VisualMapOpts(
  12. is_show=True,
  13. dimension=1, # 映射Y轴数据
  14. min_=100,
  15. max_=200,
  16. range_color=["#50a3ba", "#eac736", "#d94e5d"]
  17. )
  18. )

五、性能优化建议

  1. 大数据量处理:当数据点超过1000个时,建议:

    • 启用数据抽样(is_sampled=True
    • 关闭标签显示(label_opts=opts.LabelOpts(is_show=False)
    • 使用WebGL渲染(需安装pyecharts-snapshot
  2. 动态图表:结合Timeline组件实现时间序列动画:
    ```python
    from pyecharts.charts import Timeline

tl = Timeline()
for year in range(2020, 2023):

  1. # 模拟年度数据
  2. year_data = [(x+year*0.1, y*0.9**year) for x,y in data]
  3. scatter = Scatter()
  4. scatter.add_xaxis([x[0] for x in year_data])
  5. scatter.add_yaxis(f"{year}年数据", [y[1] for y in year_data])
  6. tl.add(scatter, f"{year}年")

tl.render(“timeline_scatter.html”)

  1. ### 六、部署与集成
  2. 生成的HTML文件可直接嵌入Web应用,或通过以下方式集成:
  3. 1. **Flask集成示例**:
  4. ```python
  5. from flask import Flask, render_template
  6. app = Flask(__name__)
  7. @app.route("/")
  8. def index():
  9. # 预先生成图表HTML
  10. return render_template("scatter_dashboard.html")
  11. if __name__ == "__main__":
  12. app.run()
  1. Jupyter Notebook支持
    ```python
    from pyecharts.render import make_snapshot
    from snapshot_selenium import snapshot

在Notebook中直接显示

scatter.load_javascript()
scatter.render_notebook()
```

通过系统掌握上述技术点,开发者能够创建出既专业又具备交互性的散点图,有效提升数据可视化效果。实际开发中,建议结合具体业务场景调整参数配置,并定期测试不同浏览器下的渲染兼容性。