一、介绍一下Plotly库
Plotly是一个数据可视化和数据分析的开源Python库。它提供了各种绘图类型,如线图、散点图、条形图、箱型图、热力图等,具有交互性和可定制性。它还提供了一个在线编辑器,可以在web上创建、分享和发布交互式图形。使用Plotly,用户可以快速轻松地制作出漂亮、高质量的可视化图表。
Plotly支持多种绘图方式,包括静态图和交互式图。静态图适合在报告和出版物中使用,而交互式图则更适合在web应用程序和数据仪表板中使用。Plotly还支持在jupyter notebook中使用,方便进行数据分析和交互式数据可视化。
Plotly的一个重要特性是其美观的外观和可定制性。用户可以使用Plotly提供的各种颜色方案,或者使用自己的颜色方案,以满足自己的需求。用户还可以通过修改布局和样式表来自定义图表的外观。
Plotly提供了Python、R和JavaScript的接口,用户可以在这些语言中使用Plotly来创建图表。此外,Plotly还提供了一些数据分析和统计工具,如回归分析、聚类分析等。
总之,Plotly是一个功能强大、易于使用和高度可定制的数据可视化工具,适合数据分析师、数据科学家、研究人员和开发人员等各种数据相关领域的使用。
二、Plotly可以做哪些可视化
Plotly支持绘制各种交互式可视化图形,包括但不限于:
- 散点图(Scatter plot)
- 折线图(Line plot)
- 条形图(Bar chart)
- 面积图(Area chart)
- 直方图(Histogram)
- 箱型图(Box plot)
- 热力图(Heatmap)
- 等高线图(Contour plot)
- 3D散点图(3D Scatter plot)
- 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 更多条形图的示例
以下是一些常见的条形图示例:
- 簇状条形图(Grouped Bar Chart):适用于比较不同类别之间的数值大小。
- 堆叠条形图(Stacked Bar Chart):适用于比较不同类别之间的数值大小,同时也能够显示总和的大小。
- 水平条形图(Horizontal Bar Chart):适用于比较不同类别之间的数值大小,以及适用于较长类别名称的情况。
- 百分比堆叠条形图(Percentage Stacked Bar
Chart):适用于比较不同类别之间的百分比大小,同时也能够显示总和的百分比大小。 - 分组水平条形图(Grouped Horizontal Bar
Chart):适用于比较不同类别之间的数值大小,以及适用于较长类别名称的情况。 - 交错条形图(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绘制箱型图常用参数的说明:文章来源:https://www.toymoban.com/news/detail-476662.html
- 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(形状)等参数。
注意,有些参数只适用于水平箱型图或竖直箱型图,具体适用范围请参考官方文档。文章来源地址https://www.toymoban.com/news/detail-476662.html
到了这里,关于【Python】Plotly:最强的Python可视化包(超详细讲解+各类源代码案例)(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!