Plotly 简明教程

Scatter Plot, Scattergl Plot and Bubble Charts

本章重点介绍散点图、Scattergl 图和气泡图的详细信息。首先,让我们探讨散点图。

Scatter Plot

散点图用于将点 plot data 在水平轴和垂直轴上,以展示一个变量如何影响另一个变量。数据表中的每一行都用一个标记表示,其位置取决于其在 XY 轴上设置的列中的值。

graph_objs 模块 (go.Scatter)scatter() 方法产生一个散点轨迹。此处, mode 属性决定了数据点的外观。模式的默认值为 lines,显示连接数据点的连续线。如果设置为 markers ,则只显示由小空心圆点表示的数据点。当模式指定为“lines+markers”时,则显示圆形和线。

在以下示例中,绘制了笛卡尔坐标系中三组随机生成点的散点轨迹。下面解释了每条轨迹显示的不同的模式属性。

import numpy as np
N = 100
x_vals = np.linspace(0, 1, N)
y1 = np.random.randn(N) + 5
y2 = np.random.randn(N)
y3 = np.random.randn(N) - 5
trace0 = go.Scatter(
   x = x_vals,
   y = y1,
   mode = 'markers',
   name = 'markers'
)
trace1 = go.Scatter(
   x = x_vals,
   y = y2,
   mode = 'lines+markers',
   name = 'line+markers'
)
trace2 = go.Scatter(
   x = x_vals,
   y = y3,
   mode = 'lines',
   name = 'line'
)
data = [trace0, trace1, trace2]
fig = go.Figure(data = data)
iplot(fig)

Jupyter notebook cell 的输出如下所示:

jupyter notebook cell

Scattergl Plot

WebGL (网络图形库)是一个 JavaScript API,用于在任何兼容的网络浏览器中呈现交互式 2D3D graphics ,而无需使用插件。WebGL 与其他网络标准完全集成,允许图形处理单元 (GPU) 加速使用图像处理。

Plotly 您可以使用 Scattergl() 代替 Scatter() 实现 WebGL,以提高速度、改善交互性,并绘制更多数据的能力。 go.scattergl() 函数在涉及大量数据点时可以提供更好的性能。

import numpy as np
N = 100000
x = np.random.randn(N)
y = np.random.randn(N)
   trace0 = go.Scattergl(
   x = x, y = y, mode = 'markers'
)
data = [trace0]
layout = go.Layout(title = "scattergl plot ")
fig = go.Figure(data = data, layout = layout)
iplot(fig)

输出如下:

scattergl plot

Bubble charts

气泡图显示数据的三个维度。具有关联数据的三个维度的每个实体均绘为一个 disk (气泡),它通过圆盘的 xy location 表示两个维度,并通过其大小表示第三个维度。气泡的大小由第三个数据序列中的值决定。

Bubble chart 是散点图的一种变化形式,其中数据点用气泡代替。如果你的数据包含三个维度,如下所示,则创建一个气泡图是一个不错的选择。

Company

Products

Sale

Share

A

13

2354

23

B

6

5423

47

C

23

2451

30

气泡图用 go.Scatter() 迹生成。以上两个数据序列中的 productssale 用 作 xy 属性,而 market share 作为 marker size

在 Jupyter 笔记本中输入以下代码。

company = ['A','B','C']
products = [13,6,23]
sale = [2354,5423,4251]
share = [23,47,30]
fig = go.Figure(data = [go.Scatter(
   x = products, y = sale,
   text = [
      'company:'+c+' share:'+str(s)+'%'
      for c in company for s in share if company.index(c)==share.index(s)
   ],
   mode = 'markers',
   marker_size = share, marker_color = ['blue','red','yellow'])
])
iplot(fig)

输出应如下所示 −

bubble chart