【Python】Plotly:最强的Python可视化包(超详细讲解+各类源代码案例)(一)

目录

文章目录

  • 一、介绍一下Plotly库
  • 二、Plotly可以做哪些可视化
  • 三、各类统计图
    • 3.1 绘制散点图
      • 3.1.1 一般案例
      • 3.1.2 更多散点图的示例
        • 3.1.2.1 绘制二维散点图
        • 3.1.1.2 绘制三维散点图
        • 3.1.1.3 绘制带气泡大小和颜色的散点图
        • 3.1.1.4 绘制带趋势线的散点图
      • 3.1.3 绘制散点图的参数说明
    • 3.2 绘制折线图
      • 3.2.1 一般示例
      • 3.2.2 更多折线图的示例
        • 3.2.2.1 简单折线图
        • 3.2.2.2 折线图与散点图结合
        • 3.2.2.3 多条折线图
        • 3.2.2.4 带有误差线的折线图
        • 3.2.2.5 带有多个子图的折线图
      • 3.2.3 绘制折线图的参数说明
    • 3.3 绘制条形图
      • 3.3.1 一般示例
      • 3.3.2 更多条形图的示例
        • 3.3.2.1 簇状条形图(Grouped Bar Chart)
        • 3.2.2.2 堆叠条形图(Stacked Bar Chart)
        • 3.2.2.3 水平条形图(Horizontal Bar Chart)
        • 3.2.2.4 百分比堆叠条形图(Percentage Stacked Bar Chart)
        • 3.2.2.5 分组水平条形图(Grouped Horizontal Bar Chart)
        • 3.2.2.6 交错条形图(Diverging Bar Chart)
      • 3.3.3 条形图的参数
    • 3.4 绘制面积图
      • 3.4.1 一般示例
      • 3.4.2 更多绘制面积图的例子
        • 3.4.2.1 单一区域面积图
        • 3.4.2.2 带有不透明度的堆叠式面积图
      • 3.4.3 绘制面积图的参数
    • 3.5 绘制直方图
      • 3.5.1 一般示例
      • 3.5.2 绘制直方图的更多示例
        • 3.5.2.1 基本直方图
        • 3.5.2.2 指定直方图的bin个数
        • 3.5.2.3 指定直方图的bin范围
        • 3.5.2.4 多直方图
      • 3.5.3 绘制直方图的参数
    • 3.6 绘制箱型图
      • 3.6.1 一般示例
      • 3.6.2 绘制箱型图的更多示例
        • 3.6.2.1 单个箱型图
        • 3.6.2.2 分组箱型图
        • 3.6.2.3 水平箱型图
        • 3.6.2.4 连续箱型图
        • 3.6.2.5 多列数据箱型图
        • 3.6.2.6 自定义箱型图
      • 3.6.3 绘制箱型图的参数

一、介绍一下Plotly库

Plotly是一个数据可视化和数据分析的开源Python库。它提供了各种绘图类型,如线图、散点图、条形图、箱型图、热力图等,具有交互性和可定制性。它还提供了一个在线编辑器,可以在web上创建、分享和发布交互式图形。使用Plotly,用户可以快速轻松地制作出漂亮、高质量的可视化图表。

Plotly支持多种绘图方式,包括静态图和交互式图。静态图适合在报告和出版物中使用,而交互式图则更适合在web应用程序和数据仪表板中使用。Plotly还支持在jupyter notebook中使用,方便进行数据分析和交互式数据可视化。

Plotly的一个重要特性是其美观的外观和可定制性。用户可以使用Plotly提供的各种颜色方案,或者使用自己的颜色方案,以满足自己的需求。用户还可以通过修改布局和样式表来自定义图表的外观。

Plotly提供了Python、R和JavaScript的接口,用户可以在这些语言中使用Plotly来创建图表。此外,Plotly还提供了一些数据分析和统计工具,如回归分析、聚类分析等。

总之,Plotly是一个功能强大、易于使用和高度可定制的数据可视化工具,适合数据分析师、数据科学家、研究人员和开发人员等各种数据相关领域的使用。

二、Plotly可以做哪些可视化

Plotly支持绘制各种交互式可视化图形,包括但不限于:

  1. 散点图(Scatter plot)
  2. 折线图(Line plot)
  3. 条形图(Bar chart)
  4. 面积图(Area chart)
  5. 直方图(Histogram)
  6. 箱型图(Box plot)
  7. 热力图(Heatmap)
  8. 等高线图(Contour plot)
  9. 3D散点图(3D Scatter plot)
  10. 3D表面图(3D Surface plot)

此外,Plotly还支持绘制地图可视化,包括散点地图、热力地图、轮廓地图、线路地图等。同时,Plotly还提供了丰富的交互式功能,例如缩放、平移、鼠标悬停提示、选择区域、自定义工具栏等。

三、各类统计图

3.1 绘制散点图

3.1.1 一般案例

绘制散点图可以使用 plotly.graph_objects 中的 Scatter 类或者使用 plotly.express 中的 scatter 函数。

下面是使用 plotly.express 绘制散点图的示例代码:

import plotly.express as px
import pandas as pd

# 创建示例数据
data = pd.DataFrame({
    'x': [1, 2, 3, 4, 5],
    'y': [5, 4, 3, 2, 1]
})

# 使用 plotly.express 绘制散点图
fig = px.scatter(data, x='x', y='y', title='Scatter plot')
fig.show()


可以通过设置参数来自定义散点图的样式,例如修改颜色、大小、透明度等。

更多关于绘制散点图的示例和参数说明可以参考官方文档:

https://plotly.com/python/scatter-plots/

3.1.2 更多散点图的示例

以下是几个绘制散点图的示例:

3.1.2.1 绘制二维散点图
import plotly.graph_objs as go
import numpy as np

# 创建随机数据
np.random.seed(123)
x = np.random.randn(100)
y = np.random.randn(100)

# 创建散点图
fig = go.Figure(data=go.Scatter(x=x, y=y, mode='markers'))

# 设置图表标题和轴标签
fig.update_layout(title='Random Scatter Plot',
                  xaxis_title='X Axis',
                  yaxis_title='Y Axis')

# 显示图表
fig.show()


此代码将生成一个简单的散点图,显示100个随机生成的数据点。

解释代码:

  • 首先,我们导入必要的模块和库,包括plotly.graph_objs模块和numpy库。
  • 接下来,我们使用numpy库生成100个随机数作为x和y的值。
  • 然后,我们使用plotly.graph_objs模块的Scatter方法创建一个散点图,将x和y的值作为参数传递给该方法,并设置mode参数为’markers’以表示散点图模式。
  • 接着,我们使用update_layout方法来设置图表的标题和轴标签。
  • 最后,我们使用show方法显示图表。

您可以根据需要对此代码进行调整和修改,以生成您需要的二维散点图。

3.1.1.2 绘制三维散点图
3.1.1.3 绘制带气泡大小和颜色的散点图
3.1.1.4 绘制带趋势线的散点图

这里列举的只是几个散点图的示例,plotly还支持许多其他类型的图表,比如柱状图、线图、箱线图等等。

3.1.3 绘制散点图的参数说明

plotly绘制散点图时常用的参数说明如下:

  • x:指定散点图中横坐标的数据。
  • y:指定散点图中纵坐标的数据。
  • mode:指定散点图的展示模式。可以设置为markers(散点图)、lines(折线图)、lines+markers(散点图和折线图混合)等。
  • color:指定散点图中点的颜色,可以是数值型数据,也可以是分类型数据。
  • size:指定散点图中点的大小,可以是数值型数据。
  • symbol:指定散点图中点的形状,可以是圆形、正方形、三角形、菱形等。
  • text:指定散点图中点的文本标签,可以是数值型数据,也可以是分类型数据。
  • hover_name:指定鼠标悬停在散点图上时的标签,可以是数值型数据,也可以是分类型数据。
  • hover_data:指定鼠标悬停在散点图上时的其他数据信息。
  • opacity:指定散点图中点的透明度。
  • marker:指定散点图中点的样式,包括颜色、大小、形状等。

除了上述参数外,还可以通过layout函数设置散点图的布局、标题、轴标签等属性。

3.2 绘制折线图

3.2.1 一般示例

要绘制折线图,可以使用plotly的go.Scatter对象。以下是一个简单的例子:

import plotly.graph_objs as go

x = [1, 2, 3, 4, 5]
y = [2, 1, 3, 2.5, 4]

trace = go.Scatter(x=x, y=y, mode='lines+markers')
data = [trace]

layout = go.Layout(title='My Line Chart')

fig = go.Figure(data=data, layout=layout)
fig.show()


在这个例子中,我们创建了一个包含x和y坐标的列表。然后,我们创建一个go.Scatter对象,并指定它的x和y属性,以及绘制模式为’lines+markers’,这将绘制折线图和数据点。

接下来,我们将go.Scatter对象添加到一个列表中,并将其分配给变量data。然后,我们定义一个布局,其中包括一个标题,并将其与数据列表一起传递给go.Figure对象。最后,我们使用fig.show()方法显示图形。

在实际应用中,我们可以根据需要更改线条的颜色、宽度、样式等属性,以及添加注释、调整布局等操作。

3.2.2 更多折线图的示例

以下是一些折线图的示例:

3.2.2.1 简单折线图
import plotly.graph_objs as go

x_data = [1, 2, 3, 4, 5]
y_data = [1, 4, 9, 16, 25]

fig = go.Figure()
fig.add_trace(go.Scatter(x=x_data, y=y_data, mode='lines', name='line'))

fig.show()

3.2.2.2 折线图与散点图结合
import plotly.graph_objs as go

x_data = [1, 2, 3, 4, 5]
y_data = [1, 4, 9, 16, 25]

fig = go.Figure()
fig.add_trace(go.Scatter(x=x_data, y=y_data, mode='lines+markers', name='line'))

fig.show()

3.2.2.3 多条折线图
import plotly.graph_objs as go

x_data = [1, 2, 3, 4, 5]
y1_data = [1, 4, 9, 16, 25]
y2_data = [1, 2, 3, 4, 5]

fig = go.Figure()
fig.add_trace(go.Scatter(x=x_data, y=y1_data, mode='lines', name='line1'))
fig.add_trace(go.Scatter(x=x_data, y=y2_data, mode='lines', name='line2'))

fig.show()

3.2.2.4 带有误差线的折线图
import plotly.graph_objs as go
import numpy as np

x_data = np.arange(0, 2*np.pi, 0.1)
y_data = np.sin(x_data)

error = 0.1 * np.abs(y_data)

fig = go.Figure()
fig.add_trace(go.Scatter(
    x=x_data,
    y=y_data,
    mode='lines',
    name='sin(x)'
))

fig.add_trace(go.Scatter(
    x=x_data,
    y=y_data + error,
    mode='lines',
    line=dict(width=0),
    showlegend=False
))

fig.add_trace(go.Scatter(
    x=x_data,
    y=y_data - error,
    mode='lines',
    line=dict(width=0),
    fillcolor='rgba(68, 68, 68, 0.3)',
    fill='tonexty',
    showlegend=False
))

fig.show()

3.2.2.5 带有多个子图的折线图
import plotly.graph_objs as go
from plotly.subplots import make_subplots
import numpy as np

x_data = np.arange(0, 2*np.pi, 0.1)
y1_data = np.sin(x_data)
y2_data = np.cos(x_data)

fig = make_subplots(rows=2, cols=1)

fig.add_trace(go.Scatter(x=x_data, y=y1_data, mode='lines', name='sin(x)'), row=1, col=1)
fig.add_trace(go.Scatter(x=x_data, y=y2_data, mode='lines', name='cos(x)'), row=2, col=1)

fig.show()


以上是一些折线图的示例,您可以根据需要进行修改和定制。

3.2.3 绘制折线图的参数说明

plotly 绘制折线图的常用参数如下:

  • x, y:指定 x 和 y 轴所对应的数据列。
  • mode:指定折线图的类型,可以设置为 ‘lines’、‘markers’、‘lines+markers’ 等,其中 ‘lines’
    表示仅显示线段,‘markers’ 表示仅显示散点,‘lines+markers’ 表示同时显示线段和散点。
  • line:一个字典,用于设置折线的属性,包括颜色、宽度、类型等。
  • marker:一个字典,用于设置散点的属性,包括颜色、大小、类型等。
  • text:用于为每个点添加文本标签,可以是一个字符串数组,也可以是一个数据列。
  • hover_name:用于将鼠标悬停在点上时显示的标签指定为数据帧中的列名。
  • hover_data:用于将鼠标悬停在点上时显示的数据指定为数据帧中的列名。
  • name:为每个数据集指定一个名称,用于生成图例。

另外还有一些常用的布局参数,用于控制图表的大小、标题、轴标签等。例如,width、height、title、xaxis_title、yaxis_title 等。

3.3 绘制条形图

3.3.1 一般示例

可以使用plotly.express中的bar函数绘制条形图。下面是一个简单的例子:

import plotly.express as px

data = {
    'fruit': ['apple', 'banana', 'orange', 'kiwi'],
    'count': [3, 2, 4, 1]
}

fig = px.bar(data, x='fruit', y='count')
fig.show()


这将绘制一个简单的条形图,其中水果名称在X轴上显示,计数在Y轴上显示。

您可以使用color参数指定一个列名,使每个条形的颜色根据该列的不同值而变化:

import plotly.express as px

data = {
    'fruit': ['apple', 'banana', 'orange', 'kiwi'],
    'count': [3, 2, 4, 1],
    'color': ['red', 'yellow', 'orange', 'green']
}

fig = px.bar(data, x='fruit', y='count', color='color')
fig.show()


您还可以使用其他参数自定义图表的外观,例如:

import plotly.express as px

data = {
    'fruit': ['apple', 'banana', 'orange', 'kiwi'],
    'count': [3, 2, 4, 1],
    'color': ['red', 'yellow', 'orange', 'green']
}

fig = px.bar(data, x='fruit', y='count', color='color')

fig.update_layout(
    title='Fruit Counts',
    xaxis_title='Fruit',
    yaxis_title='Count',
    font=dict(size=18)
)

fig.show()


这将设置图表的标题,X轴和Y轴的标题,以及字体大小。

3.3.2 更多条形图的示例

以下是一些常见的条形图示例:

  1. 簇状条形图(Grouped Bar Chart):适用于比较不同类别之间的数值大小。
  2. 堆叠条形图(Stacked Bar Chart):适用于比较不同类别之间的数值大小,同时也能够显示总和的大小。
  3. 水平条形图(Horizontal Bar Chart):适用于比较不同类别之间的数值大小,以及适用于较长类别名称的情况。
  4. 百分比堆叠条形图(Percentage Stacked Bar
    Chart):适用于比较不同类别之间的百分比大小,同时也能够显示总和的百分比大小。
  5. 分组水平条形图(Grouped Horizontal Bar
    Chart):适用于比较不同类别之间的数值大小,以及适用于较长类别名称的情况。
  6. 交错条形图(Diverging Bar Chart):适用于比较不同类别之间的数值大小,同时也能够显示相对大小和方向。

在使用plotly绘制条形图时,可以通过传递不同的参数来实现这些不同类型的条形图,如barmode、orientation、stackgroup等等。具体使用方法和参数说明可以参考官方文档。

3.3.2.1 簇状条形图(Grouped Bar Chart)

簇状条形图(Grouped Bar Chart)是用于显示两个或更多组之间比较的一种图表类型。在簇状条形图中,每个组有自己的条形,条形并排排列在同一水平线上,便于直接比较组之间的值。

使用Plotly绘制簇状条形图需要指定barmode参数为group,并使用color参数指定组的颜色。以下是一个使用Plotly绘制簇状条形图的例子:

import plotly.graph_objs as go

# 准备数据
data = [
    {'category': 'A', 'value': 10, 'group': 'Group1'},
    {'category': 'B', 'value': 20, 'group': 'Group1'},
    {'category': 'C', 'value': 30, 'group': 'Group1'},
    {'category': 'A', 'value': 15, 'group': 'Group2'},
    {'category': 'B', 'value': 25, 'group': 'Group2'},
    {'category': 'C', 'value': 35, 'group': 'Group2'},
]

# 创建图表
fig = go.Figure()

# 添加簇状条形图
fig.add_trace(
    go.Bar(x=[d['category'] for d in data if d['group'] == 'Group1'],
           y=[d['value'] for d in data if d['group'] == 'Group1'],
           name='Group1', marker_color='blue')
)
fig.add_trace(
    go.Bar(x=[d['category'] for d in data if d['group'] == 'Group2'],
           y=[d['value'] for d in data if d['group'] == 'Group2'],
           name='Group2', marker_color='red')
)

# 设置布局
fig.update_layout(title='Grouped Bar Chart', barmode='group')

# 显示图表
fig.show()


该例子中,我们首先准备了一个包含两个组、三个类别的数据集。然后,我们使用Plotly创建了一个空的图表,接着分别添加了两组簇状条形图,并设置barmode为group,color为不同的颜色。最后,我们使用update_layout()方法设置了图表标题和布局,并使用show()方法显示图表。

3.2.2.2 堆叠条形图(Stacked Bar Chart)

堆叠条形图(Stacked Bar Chart)是一种用于比较多个项目不同部分之间相对比例的图表。它将多个条形图堆叠在一起,并且每个条形图的值都会被分成几个部分,每个部分用不同的颜色表示。

下面是使用 Plotly 绘制堆叠条形图的示例代码:

import plotly.express as px
import pandas as pd

# 创建示例数据
data = {'year': [2016, 2016, 2017, 2017],
        'quarter': ['Q1', 'Q2', 'Q1', 'Q2'],
        'revenue': [100, 150, 200, 250],
        'cost': [50, 75, 100, 125]}
df = pd.DataFrame(data)

# 绘制堆叠条形图
fig = px.bar(df, x='year', y=['revenue', 'cost'], color_discrete_sequence=['#636EFA', '#EF553B'], 
             barmode='stack')
fig.show()


这个示例代码中,我们使用了 px.bar() 函数来绘制堆叠条形图。x 参数指定了用于分组的变量,y 参数指定了需要绘制的数值变量,color_discrete_sequence 参数指定了每个分组的颜色,barmode 参数指定了堆叠模式。

运行这个代码后,你应该会看到一张堆叠条形图,其中每个条形图的值被分成两个部分,分别用蓝色和红色表示。

3.2.2.3 水平条形图(Horizontal Bar Chart)

水平条形图(Horizontal Bar Chart)是一种将数据以水平方向展示的条形图,适合于展示类别之间的大小比较。在Plotly中,可以使用px.bar()函数创建水平条形图,并通过设置参数实现不同的效果。

以下是一个绘制水平条形图的简单示例:

import plotly.express as px
import pandas as pd

df = pd.DataFrame({'category': ['A', 'B', 'C', 'D'], 'value': [25, 32, 18, 35]})
fig = px.bar(df, x='value', y='category', orientation='h')
fig.show()


解释一下上述代码:

首先,创建了一个包含两列数据的数据框df,其中一列是类别category,另一列是对应类别的数值value。然后,使用px.bar()函数创建水平条形图。x参数指定了数值数据所在的列,y参数指定了类别数据所在的列,orientation参数设置为’h’表示绘制水平条形图。最后,使用fig.show()函数显示图形。

除了px.bar()函数,也可以使用go.Bar()函数创建水平条形图。示例如下:

import plotly.graph_objects as go
import pandas as pd

df = pd.DataFrame({'category': ['A', 'B', 'C', 'D'], 'value': [25, 32, 18, 35]})
fig = go.Figure(go.Bar(x=df['value'], y=df['category'], orientation='h'))
fig.show()


其中,go.Bar()函数创建条形图,x参数和y参数分别指定了水平和垂直方向的数据。

3.2.2.4 百分比堆叠条形图(Percentage Stacked Bar Chart)

plotly中没有内置的“百分比堆叠条形图”(Percentage Stacked Bar Chart)类型,但是可以通过一些数据处理和布局设置来实现该类型的图表。

首先,需要将数据转换成百分比形式,以确保每个组内的条形高度之和为100%。假设有以下示例数据:

import pandas as pd

data = {
    'category': ['A', 'B', 'C', 'D'],
    'group1': [20, 30, 25, 15],
    'group2': [40, 25, 20, 15],
    'group3': [10, 30, 25, 35],
}

df = pd.DataFrame(data)

将各组数据转换成百分比形式:

df_pct = df.set_index('category').apply(lambda x: x / x.sum(), axis=1).reset_index()

此时的df_pct数据如下:

  category    group1    group2    group3
0        A  0.285714  0.571429  0.142857
1        B  0.375000  0.312500  0.312500
2        C  0.357143  0.285714  0.357143
3        D  0.214286  0.214286  0.571429

然后,可以使用plotly.express库的bar函数绘制水平条形图,并设置barmode参数为stack,同时设置orientation参数为h(表示水平方向)。为了使每个组内的条形高度之和为100%,还需要设置base参数为group1列的负值。

import plotly.express as px

fig = px.bar(df_pct, x='group1', y='category', orientation='h',
             barmode='stack', base=df_pct['group1'] * -1,
             color_discrete_sequence=['#1f77b4', '#ff7f0e', '#2ca02c'])

fig.show()


在上述代码中,color_discrete_sequence参数用于设置不同组的条形颜色。

3.2.2.5 分组水平条形图(Grouped Horizontal Bar Chart)

以下是使用 Plotly 绘制分组水平条形图的示例代码:

import plotly.graph_objects as go
import pandas as pd

# 创建数据
df = pd.DataFrame({
    'Gender': ['Female', 'Male', 'Female', 'Male', 'Female', 'Male'],
    'Class': ['Class A', 'Class A', 'Class B', 'Class B', 'Class C', 'Class C'],
    'Score': [60, 70, 80, 85, 90, 95]
})

# 绘制水平条形图
fig = go.Figure(go.Bar(
    x=df['Score'],
    y=df['Class'],
    orientation='h',
    marker=dict(
        color=df['Gender'].map({'Female': 'red', 'Male': 'blue'})
    ),
    text=df['Score'],
    textposition='inside',
))

# 添加图例
fig.update_layout(
    legend_title_text='Gender',
    legend=dict(
        orientation='h',
        yanchor='bottom',
        y=1.02,
        xanchor='right',
        x=1
    )
)

# 显示图像
fig.show()

这个例子展示了一个分组水平条形图,其中每个班级的男女学生得分进行了比较。在这个图表中,每个班级在 y 轴上对齐,学生的得分在 x 轴上表示。不同颜色的条形代表不同的性别。此外,还通过在条形中间添加分数标签来进一步说明数据。最后,添加了一个水平图例,以方便解释性别与颜色之间的关系。

3.2.2.6 交错条形图(Diverging Bar Chart)

plotly交错条形图(Diverging Bar Chart)可以用于比较两组数据,将它们放在一起,以便更直观地显示它们之间的差异。下面是一个简单的示例,展示如何使用plotly绘制交错条形图:

import plotly.graph_objs as go

# 创建数据
x = ['A', 'B', 'C', 'D', 'E']
y1 = [3, 2, 1, 1, 2]
y2 = [-3, -2, -1, -1, -2]

# 创建交错条形图
fig = go.Figure(data=[
    go.Bar(name='Group 1', x=x, y=y1),
    go.Bar(name='Group 2', x=x, y=y2)
])

# 设定布局
fig.update_layout(
    title='Diverging Bar Chart Example',
    xaxis_title='Category',
    yaxis_title='Value',
    barmode='relative',
    bargap=0.1, # 每个小组之间的间隔
    bargroupgap=0.1 # 不同组之间的间隔
)

# 显示图表
fig.show()


在上面的代码中,我们首先创建了两组数据y1和y2,然后使用go.Bar()方法创建两组条形图,分别对应两组数据。在创建图表时,我们将barmode参数设置为relative,这样就能够创建交错条形图。bargap和bargroupgap参数分别用于调整小组内和小组间的间距。最后,我们使用fig.show()方法显示图表。

3.3.3 条形图的参数

绘制条形图时,plotly提供了许多可调整的参数,可以对图形进行自定义设置。下面是一些常用的参数:

  • x: 条形图的x轴数据。
  • y: 条形图的y轴数据。
  • color: 用于区分数据的颜色。
  • barmode: 条形图的模式,可选参数包括group(分组)、stack(堆叠)、overlay(重叠)、relative(相对)。
  • width: 条形的宽度。
  • orientation: 条形图的方向,可选参数包括v(垂直)和h(水平)。
  • hover_name: 鼠标悬停在条形上时显示的文本标签。
  • hover_data: 鼠标悬停在条形上时显示的其他数据。
  • text: 条形上的文本标签。
  • textposition: 文本标签的位置,可选参数包括inside、outside、auto、none等。
  • opacity: 条形图的透明度。
  • marker: 条形图的标记样式,包括颜色、大小等。
  • error_y: 条形图的误差线设置。
  • category_orders: 用于指定类别(category)的排序顺序。
  • title: 图表的标题。
  • xaxis_title: x轴的标题。
  • yaxis_title: y轴的标题。
  • legend_title: 图例的标题。
  • template: 可视化主题的设置。

以上只是一些常见的参数,plotly还提供了许多其他的参数可供使用。

3.4 绘制面积图

3.4.1 一般示例

要使用 Plotly 绘制面积图,可以使用 plotly.graph_objects 模块中的 Scatter 类,将 mode 参数设置为 ‘lines’ 和 ‘lines+markers’,并将 fill 参数设置为 ‘tozeroy’,表示将面积填充到 x 轴之间的区域。

以下是一个绘制简单面积图的示例代码:

import plotly.graph_objects as go
import pandas as pd

# 创建数据
x = [1, 2, 3, 4, 5]
y = [1, 3, 2, 4, 3]

# 创建面积图
fig = go.Figure(go.Scatter(x=x, y=y, mode='lines', fill='tozeroy'))

# 设置布局
fig.update_layout(title='Area Chart')

# 显示图形
fig.show()

在这里插入图片描述
运行上述代码将绘制一个简单的面积图,其中 x 和 y 分别是 x 轴和 y 轴的数据。您还可以使用 title 方法设置图表标题。

如果您的数据包含多个线路,则可以在 Scatter 类中传递一个列表,并在 mode 中指定 ‘lines’ 和 ‘lines+markers’,以分别绘制线和点。以下是一个绘制多条线路面积图的示例代码:

import plotly.graph_objects as go
import pandas as pd

# 创建数据
x = [1, 2, 3, 4, 5]
y1 = [1, 3, 2, 4, 3]
y2 = [2, 4, 3, 1, 5]
y3 = [3, 1, 4, 2, 6]

# 创建面积图
fig = go.Figure()
fig.add_trace(go.Scatter(x=x, y=y1, mode='lines', name='line1', fill='tozeroy'))
fig.add_trace(go.Scatter(x=x, y=y2, mode='lines+markers', name='line2', fill='tozeroy'))
fig.add_trace(go.Scatter(x=x, y=y3, mode='lines+markers', name='line3', fill='tozeroy'))

# 设置布局
fig.update_layout(title='Area Chart with Multiple Lines')

# 显示图形
fig.show()


运行上述代码将绘制一个多条线路的面积图,其中 x 和 y1、y2、y3 分别是 x 轴和 y 轴的数据。每个线路都可以使用 name 方法指定名称,并在图例中显示。

3.4.2 更多绘制面积图的例子

以下是几个绘制面积图的例子:

3.4.2.1 单一区域面积图
import plotly.express as px
df = px.data.gapminder().query("continent=='Europe'")
fig = px.area(df, x="year", y="pop", color="country", line_group="country")
fig.show()

3.4.2.2 带有不透明度的堆叠式面积图
import plotly.express as px
df = px.data.gapminder()
fig = px.area(df, x="year", y="pop", color="continent", line_group="country",
              hover_name="country", color_discrete_sequence=px.colors.qualitative.Pastel)
fig.update_traces(opacity=0.5)
fig.show()

3.4.3 绘制面积图的参数

plotly 绘制面积图的主要参数如下:

  • x: 必需,表示沿水平轴的值。可以是数值、时间、类别等数据类型。
  • y: 必需,表示沿垂直轴的值。可以是数值、时间、类别等数据类型。
  • hover_name: 可选,表示悬停时显示的名称。用于指定在鼠标悬停时要显示的文本值。
  • hover_data: 可选,表示悬停时显示的数据。用于指定在鼠标悬停时要显示的其他信息。
  • line_shape: 可选,表示线的形状。可以是 “linear”(默认)、“spline”、“hv”、“vh” 等形状。
  • stackgroup: 可选,表示分组的标志。使用相同的分组名称来分组不同的面积图,从而在同一坐标轴上显示它们。
  • color_discrete_sequence: 可选,表示自定义离散颜色序列。用于指定面积图的颜色。例如:[‘red’,
    ‘green’, ‘blue’]。
  • opacity: 可选,表示面积图的透明度。默认为 0.7。
  • labels: 可选,表示图例的标签。用于指定每个面积图的标签。
  • title: 可选,表示图表的标题。可以使用字典格式指定标题的字体、大小等属性。
  • xaxis_title: 可选,表示水平轴的标题。
  • yaxis_title: 可选,表示垂直轴的标题。
  • template: 可选,表示使用的模板。模板定义了图表的布局、颜色等属性。使用 plotly 官方提供的模板可以快速生成美观的图表。

这些参数的具体用法可以参考 plotly 官方文档。

3.5 绘制直方图

3.5.1 一般示例

使用 Plotly 绘制直方图,需要使用 px.histogram() 函数,该函数的输入参数包括数据集、X 轴和 Y 轴的名称等。

下面是一个简单的例子,绘制了一个直方图:

import plotly.express as px
import pandas as pd

# 生成随机数据
df = pd.DataFrame({'value': np.random.randn(500)})

# 绘制直方图
fig = px.histogram(df, x="value")

# 显示图表
fig.show()


你可以在 px.histogram() 函数中设置很多参数,包括:

  • x:指定 X 轴的数据列;
  • nbins:指定直方图中的箱子数量;
  • marginal:是否绘制边际图;
  • barmode:指定直方图的模式,可以是 “overlay”、”group” 或 “stack”;
  • histnorm:指定直方图的规范化方式,可以是 “count”、”probability” 或 “percent”。

更多关于 px.histogram() 函数的参数和使用方法,请参考 Plotly 官方文档。

3.5.2 绘制直方图的更多示例

以下是一些使用Plotly绘制直方图的示例:

3.5.2.1 基本直方图
import plotly.express as px
import numpy as np

# 生成数据
np.random.seed(123)
x = np.random.normal(size=500)

# 绘制直方图
fig = px.histogram(x)
fig.show()

3.5.2.2 指定直方图的bin个数
import plotly.express as px
import numpy as np

# 生成数据
np.random.seed(123)
x = np.random.normal(size=500)

# 指定bin个数为30
fig = px.histogram(x, nbins=30)
fig.show()

3.5.2.3 指定直方图的bin范围
import plotly.express as px
import numpy as np

# 生成数据
np.random.seed(123)
x = np.random.normal(size=500)

# 指定bin范围为[-3, 3]
fig = px.histogram(x, range_x=[-3, 3])
fig.show()

3.5.2.4 多直方图
import plotly.express as px
import numpy as np

# 生成数据
np.random.seed(123)
x1 = np.random.normal(loc=-2, size=500)
x2 = np.random.normal(loc=2, size=500)

# 绘制直方图,并添加密度曲线
fig = px.histogram(x=[x1, x2], opacity=0.75, nbins=30, histnorm='probability density')
fig.update_traces(alignmentgroup='group1')
fig.show()

3.5.3 绘制直方图的参数

下面是 plotly 绘制直方图时常用的一些参数:

  • x:必需,指定绘制直方图的数据列。
  • nbins:可选,指定直方图的分组数量,默认为 10。
  • histnorm:可选,指定直方图的标准化方式,包括百分比(percent)、密度(density)和概率密度(probability density)。
  • name:可选,指定直方图的名称。
  • orientation:可选,指定直方图的方向,包括垂直(v)和水平(h)。
  • cumulative:可选,指定是否绘制累积分布函数(cumulative distribution function,CDF)。
  • histfunc:可选,指定直方图的统计方式,包括计数(count)、求和(sum)、平均数(avg)、中位数(median)、最大值(max)和最小值(min)。
  • barmode:可选,指定多组数据的绘制方式,包括覆盖(overlay)、堆叠(stack)、相对堆叠(relative)、分组(group)和多面板(overlay+facet_wrap)。
  • opacity:可选,指定直方图的透明度。
  • color:可选,指定直方图的颜色。
  • hover_data:可选,指定鼠标悬停在直方图上时显示的数据列。

更多详细参数可以参考 Plotly 官方文档。

3.6 绘制箱型图

3.6.1 一般示例

可以使用 Plotly 绘制箱型图,下面是一个简单的例子:

import plotly.express as px
import seaborn as sns

tips = sns.load_dataset('tips')
fig = px.box(tips, x='day', y='total_bill')
fig.show()


这个例子使用 Seaborn 加载了一个名为 tips 的数据集,然后使用 Plotly 绘制了一个箱型图。在 px.box() 函数中,tips 是数据集,x=‘day’ 表示将箱型图按 day 分组,y=‘total_bill’ 表示箱型图的数据来源于 total_bill 列。

除了这些基本参数之外,px.box() 还有其他可选参数。下面是一些常用参数的说明:

  • points:是否将每个数据点绘制到箱线图上方,默认为 outliers。
  • notched:是否绘制缺口箱线图(notched box plot)。
  • color:箱线图的颜色。
  • title:图形的标题。
  • labels:图形的标签。
  • width 和 height:图形的宽度和高度。
  • template:绘图使用的模板。

具体参数可以参考 Plotly 官方文档。

3.6.2 绘制箱型图的更多示例

以下是一些绘制箱型图的示例:

3.6.2.1 单个箱型图
import plotly.express as px
df = px.data.tips()
fig = px.box(df, y="total_bill")
fig.show()

3.6.2.2 分组箱型图
import plotly.express as px
df = px.data.tips()
fig = px.box(df, x="day", y="total_bill", color="smoker")
fig.show()

3.6.2.3 水平箱型图
import plotly.express as px
df = px.data.tips()
fig = px.box(df, x="total_bill", orientation="h")
fig.show()

3.6.2.4 连续箱型图
import plotly.express as px
import numpy as np

x = np.random.randn(1000)
fig = px.box(x=x)
fig.show()

3.6.2.5 多列数据箱型图
import plotly.express as px
import pandas as pd

df = pd.DataFrame({
    "day": ["Mon", "Tues", "Wed", "Thurs", "Fri", "Sat", "Sun"],
    "value1": [1, 3, 2, 5, 7, 8, 4],
    "value2": [4, 6, 5, 3, 2, 3, 6],
    "value3": [7, 4, 5, 6, 5, 2, 4]
})

fig = px.box(df, x="day", y=["value1", "value2", "value3"])
fig.show()

3.6.2.6 自定义箱型图
import plotly.graph_objs as go

data = [go.Box(
            y=[0, 1, 1, 2, 3, 5, 8, 13, 21],
            name='Custom box',
            boxpoints='all',
            jitter=0.3,
            pointpos=-1.8,
            whiskerwidth=0.2,
            fillcolor='rgb(93, 164, 214)',
            marker=dict(
                size=2,
            ),
            line=dict(width=1),
        )]

layout = go.Layout(
    title='Customized Box Plot',
    yaxis=dict(
        title='Value',
        zeroline=False
    ),
    boxmode='group'
)

fig = go.Figure(data=data, layout=layout)
fig.show()

3.6.3 绘制箱型图的参数

以下是plotly绘制箱型图常用参数的说明:

  • x:指定箱型图的横坐标数据,可以是一个包含数值的列表、一维numpy数组、pandas的Series或DataFrame对象;
  • y:指定箱型图的纵坐标数据,可以是一个包含数值的列表、一维numpy数组、pandas的Series或DataFrame对象;
  • name:指定该箱型图的名称,用于在图例中展示;
  • boxpoints:指定是否在箱型图中展示数据点。可选值包括’all’(所有数据点均展示)、‘outliers’(仅展示异常值)、False(不展示数据点);
  • boxmean:指定是否在箱型图中展示均值线。可选值为True或False;
  • orientation:指定箱型图的方向。可选值为’h’(水平方向)或’v’(竖直方向);
  • notched:指定箱型图是否展示缺口(notch),用于展示置信区间。可选值为True或False;
  • notchwidth:指定缺口的宽度,取值范围为[0,1];
  • notchspan:指定缺口的跨度,取值范围为[0,1];
  • whiskerwidth:指定箱线的线宽;
  • line_width:指定箱线、均值线等的线宽;
  • line_color:指定箱线、均值线等的颜色;
  • fillcolor:指定箱型图的填充颜色;
  • opacity:指定箱型图的透明度;
  • marker:指定箱型图中数据点的样式,包括color(颜色)、size(大小)、symbol(形状)等参数。

注意,有些参数只适用于水平箱型图或竖直箱型图,具体适用范围请参考官方文档。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年11月30日
下一篇 2023年11月30日

相关推荐