如果你觉得内容对你有帮助,请在 GitHub 上点个 star 吧!

基本图表

4.3. 基本图表#

import plotly.graph_objects as go

import plotly.io as pio
pio.renderers.default = "notebook"

在 Matplotlib 章节中,我们介绍了散点图、柱状条形图、饼图、柱状图、箱线图等基本图表的作图方法,它们在 Plotly 库中也有对应的 trace。本节将介绍几类常见的图。

散点图#

go.Scatter 是 Plotly 中用于创建散点图(Scatter)的类。以下是一些常用的参数:

  • x: 用于指定数据点在 x 轴上的坐标,可以是单个值、列表或数组。

  • y: 用于指定数据点在 y 轴上的坐标,可以是单个值、列表或数组。

  • mode: 定义散点图的模式,常见的包括 ‘markers’(仅显示标记)、’lines’(仅显示线)、’lines+markers’(同时显示线和标记)等,因此该类也可以作出折线图。

  • name: 为 trace 指定一个名称,用于图例等,默认名称为“trace x”,x从0开始计数。

  • marker: 一个字典,包含有关标记的属性,例如颜色、大小等。

  • line: 一个字典,包含有关线的属性,例如颜色、宽度等。

例:向图形对象添加一个 mode 为 ‘lines+markers’ 的散点图。

fig = go.Figure()
fig.add_trace(go.Scatter(x=[1, 2, 3, 4], y=[10, 11, 12, 13], mode='lines+markers'))
fig.show()

例:在上图基础上再添加一个 trace,命名为 Scatter Plot,用字典传入 marker 参数。

x_values = [1, 2, 3, 4]
y_values = [8, 9, 10, 11]

trace = go.Scatter(
    x=x_values,
    y=y_values,
    mode='markers+lines',
    name='Scatter Plot',
    marker=dict(
        color='blue',
        size=10,
        symbol='circle'
    ),
    line=dict(
        color='red',
        width=2
    )
)

fig.add_trace(trace)
fig.show()

条形图#

go.Bar 是 Plotly 中用于创建条形图(Bar)的类。以下是一些常用的参数:

  • x: 用于指定条形的位置,可以是单个值、列表或数组。每个位置上都会绘制一条条形。

  • y: 用于指定条形的高度,可以是单个值、列表或数组。每个高度值对应一个位置上的条形。

  • name: 为 trace 指定一个名称,用于图例等。

  • orientation: 指定条形图的方向,可以是 ‘v’(垂直)或 ‘h’(水平),默认为垂直型条形图。

  • marker: 一个字典,包含有关条形的属性,例如颜色、透明度等。

  • text: 用于在条形上显示的文本,可以是单个值、列表或数组;可以用来在图中展示具体的类别。

例:作出条形图,条形的颜色为蓝色,同时在每个条形上显示对应的 A、B、C、D 类别。

x_values = ["A","B","C","D"]
y_values = [10, 11, 12, 13]

trace = go.Bar(
    x=x_values,
    y=y_values,
    name='Bar Chart',
    orientation='v',
    marker=dict(
        color='blue',
        opacity=0.7
    ),
    text=['A', 'B', 'C', 'D']
)

fig = go.Figure(trace)
fig.show()

饼图#

go.Pie 是 Plotly 中用于创建饼图(Pie)的类。以下是一些常用的参数:

  • labels: 用于指定每个扇形的标签,可以是单个值、列表或数组。

  • values: 用于指定每个扇形的数值,表示占比或数量,可以是单个值、列表或数组。

  • textinfo: 用于控制在每个扇形上显示的文本信息,例如百分比、数值等。

  • hoverinfo: 指定饼图上鼠标悬停时显示的信息。

  • hole: 设置饼图中心的空洞大小,取值范围为 [0, 1],默认为 0,通过调整该参数,可以作出环形图。

  • name: 为 trace 指定一个名称,用于图例等。

  • marker: 一个字典,包含有关扇形的属性,例如颜色、透明度等。

例:对给定的数据作饼图。

  1. 控制饼图中每个部分上显示的文本信息,这里设置为显示百分比和标签。

  2. 设置悬停(hover)信息,当鼠标悬停在饼图的某个部分时显示的信息,这里设置为显示标签和百分比。

  3. 控制饼图中间的空洞的大小,取值范围为 [0, 1],这里设置为 0.3,表示空洞占整个饼图的 30%(即变为环形图)。

  4. 配置饼图的颜色和边界线样式:在 marker 中用 colors 参数包含四种颜色的列表,分别对应饼图的四个部分;line 参数用字典,定义边界线的样式,包括颜色和宽度。这里设置为白色边界线,宽度为 2。

## 定义数据
## 类别
labels = ['Category A', 'Category B', 'Category C', 'Category D']
## 数值
values = [40, 30, 20, 10]

trace = go.Pie(
    labels=labels,
    values=values,
    textinfo='percent+label',
    hoverinfo='label+percent',
    hole=0.3,
    name='Pie Chart',
    marker=dict(
        colors=['red', 'green', 'blue', 'purple'],
        line=dict(color='white', width=2)
    )
)

fig = go.Figure()
fig.add_trace(trace)
fig.show()

柱状图#

go.Histogram 是 Plotly 中用于创建柱状图(Histogram)的类。以下是一些常用的参数:

  • x: 用于指定数据点在 x 轴上的坐标,表示待绘制柱状图的数据,可以是单个值、列表或数组。

  • nbinsx: 设置柱状图的柱体数量,即柱状图中显示的柱子数量。

  • histnorm: 用于指定柱状图的归一化方式,可以是 ‘percent’(百分比)、’probability’(概率)等。

  • name: 为 trace 指定一个名称,用于图例等。

  • orientation: 设置柱状图的方向,可以是 ‘v’(垂直)或 ‘h’(水平),默认为垂直。

  • opacity: 设置柱状图的透明度,取值范围为 [0, 1]。

  • marker: 一个字典,包含有关柱状图的条形的属性,例如颜色、透明度等。

例:对给定一组连续的数据作柱状图,分为5个柱子,整体颜色为蓝色。

import plotly.graph_objects as go

## 数据
data = [1, 2, 2, 3, 3, 3, 4, 4, 5, 5]

trace = go.Histogram(
    x=data,
    nbinsx=5,
    histnorm='percent',
    opacity=0.7,
    marker=dict(
        color='blue'
    )
)

fig = go.Figure()
fig.add_trace(trace)
fig.show()

箱线图#

箱线图能够有效地反映数据的中位数、分位数范围、异常值等统计信息,有助于观察数据的分布和离群值情况。go.Box 是 Plotly 中用于创建箱线图(Box)的类。以下是一些常用的参数:

  • y: 用于指定数据点在 y 轴上的坐标,表示待绘制箱线图的数据,可以是单个值、列表或数组。

  • boxpoints: 控制箱线图上显示的数据点,可以是 ‘all’(所有数据点)、’outliers’(离群值)、’all’ + ‘outliers’ 等。不设置该参数时,则不显示具体的点位。

  • name: 为 trace 指定一个名称,用于图例等。

  • boxmean: 设置是否在箱体内显示均值线。

  • marker: 一个字典,包含有关具体点的属性,例如颜色、透明度等。

  • line: 一个字典,包含有关中位线和边缘线的属性,例如颜色、宽度等,也控制了箱体颜色。

例:对给定的一组连续数据作箱线图,展示所有数据点为散点,显示均值线,数据点颜色为绿色,异常值颜色为红色,并使用蓝色线条描绘。

data = [1, 2, 2, 3, 3, 3, 4, 4, 5, 5]

trace = go.Box(
    y=data,
    boxpoints='all',
    boxmean=True,
    name='boxplot',
    marker=dict(
        color='green',
        outliercolor='red'
    ),
    line=dict(
        color='blue'
    )
)

fig = go.Figure()
fig.add_trace(trace)
fig.show()