微信登录

交互式绘图 - plotly 库 - 使用 plotly 绘制交互图

交互式绘图 - plotly 库 - 使用 plotly 绘制交互图

一、引言

在数据可视化领域,静态图表往往只能展示数据的一个固定视角,难以满足用户对数据深入探索的需求。而交互式图表则能让用户与图表进行交互,如缩放、悬停查看数据点详情、切换数据系列等,极大地提升了数据探索的效率和趣味性。Python 的 plotly 库就是一款强大的交互式绘图工具,它支持多种图表类型,能创建美观且交互性强的可视化图表。

二、plotly 库简介

plotly 是一个开源的 Python 库,它可以创建交互式的 Web 图表。plotly 有两种主要的接口:plotly.graph_objects(简称 go)和 plotly.express(简称 px)。plotly.express 是一个高级接口,它提供了简洁的语法来创建常见的图表;而 plotly.graph_objects 是一个低级接口,它允许用户更精细地控制图表的各个方面。

三、安装 plotly 库

在使用 plotly 之前,需要先安装它。可以使用 pip 进行安装:

  1. pip install plotly

四、使用 plotly.express 绘制简单的交互图

1. 绘制散点图

以下是一个使用 plotly.express 绘制散点图的示例:

  1. import plotly.express as px
  2. import pandas as pd
  3. # 创建示例数据
  4. data = {
  5. 'x': [1, 2, 3, 4, 5],
  6. 'y': [2, 4, 1, 5, 3],
  7. 'category': ['A', 'B', 'A', 'B', 'A']
  8. }
  9. df = pd.DataFrame(data)
  10. # 绘制散点图
  11. fig = px.scatter(df, x='x', y='y', color='category')
  12. # 显示图表
  13. fig.show()

在这个示例中,我们首先创建了一个包含 xycategory 三列的 DataFrame。然后使用 px.scatter() 函数绘制散点图,其中 xy 分别指定了散点的横坐标和纵坐标,color 参数根据 category 列的值对散点进行颜色编码。最后使用 fig.show() 显示图表。运行代码后,会在浏览器中打开一个新的窗口,显示交互式的散点图。用户可以通过鼠标悬停查看每个数据点的具体值,还可以使用鼠标进行缩放和平移操作。

2. 绘制柱状图

  1. import plotly.express as px
  2. import pandas as pd
  3. # 创建示例数据
  4. data = {
  5. 'Fruit': ['Apples', 'Oranges', 'Bananas'],
  6. 'Quantity': [3, 2, 4]
  7. }
  8. df = pd.DataFrame(data)
  9. # 绘制柱状图
  10. fig = px.bar(df, x='Fruit', y='Quantity')
  11. # 显示图表
  12. fig.show()

这个示例中,我们创建了一个包含水果名称和数量的 DataFrame。使用 px.bar() 函数绘制柱状图,x 指定了柱状图的横坐标(水果名称),y 指定了纵坐标(数量)。运行代码后,会显示一个交互式的柱状图,用户可以悬停查看每个柱子的具体数值。

五、使用 plotly.graph_objects 绘制复杂的交互图

1. 绘制带有多个数据系列的折线图

  1. import plotly.graph_objects as go
  2. import numpy as np
  3. # 生成示例数据
  4. x = np.linspace(0, 10, 100)
  5. y1 = np.sin(x)
  6. y2 = np.cos(x)
  7. # 创建图表对象
  8. fig = go.Figure()
  9. # 添加第一个数据系列
  10. fig.add_trace(go.Scatter(x=x, y=y1, mode='lines', name='sin(x)'))
  11. # 添加第二个数据系列
  12. fig.add_trace(go.Scatter(x=x, y=y2, mode='lines', name='cos(x)'))
  13. # 更新图表布局
  14. fig.update_layout(
  15. title='Sine and Cosine Waves',
  16. xaxis_title='x',
  17. yaxis_title='y'
  18. )
  19. # 显示图表
  20. fig.show()

在这个示例中,我们使用 plotly.graph_objects 绘制了一个带有两个数据系列的折线图。首先生成了 xy1y2 数据。然后创建了一个 go.Figure() 对象,并使用 fig.add_trace() 方法分别添加了正弦波和余弦波的数据系列。最后使用 fig.update_layout() 方法更新了图表的标题和坐标轴标签。运行代码后,会显示一个交互式的折线图,用户可以通过图例切换数据系列的显示状态。

六、总结

接口 特点 适用场景
plotly.express 高级接口,语法简洁 快速创建常见的简单图表
plotly.graph_objects 低级接口,可精细控制 创建复杂的、定制化的图表

plotly 库为我们提供了强大的交互式绘图功能,无论是简单的散点图、柱状图,还是复杂的多系列折线图,都能轻松实现。通过 plotly.expressplotly.graph_objects 这两个接口,我们可以根据具体需求选择合适的方式来创建交互式图表,从而更好地探索和展示数据。

交互式绘图 - plotly 库 - 使用 plotly 绘制交互图