引言
在现代数据科学和数据分析中,可视化是一项至关重要的任务。可视化图表可以帮助我们更好地理解数据、发现趋势和模式,以及与他人分享我们的发现。Python作为一种强大的编程语言,拥有许多出色的库,用于创建各种类型的可视化图表。
在数据可视化领域,Matplotlib是最常用的库之一,它提供了广泛的绘图功能,但也存在一些其他可视化库,每个都具有独特的优点。除了Matplotlib,Seaborn和Plotly也是数据科学家和分析师常用的可视化工具。这三个库都为我们提供了强大的工具来可视化数据,但它们在某些方面各有卓越之处。
本文将着重介绍Plotly,Plotly是一个Python库,专注于创建交互式可视化图表。与Matplotlib和Seaborn相比,Plotly提供了更丰富的互动性和可定制性,使得数据探索和展示更加生动和引人入胜。
本文提供了各种示例代码,图像就不提供出来了,简单示例可以通过运行获得图像,
原因:个人采用的是github图床,利用jsDelivr 提供的全球 CDN 加速
github 和jsdelivr 都有大小限制: GitHub 图床仓库大小不能超过1G。 因为GitHub 原则上是反对仓库图床化的,当仓库超过1G 后会有人工审核仓库内容,如果发现用来做图床,轻则删库重则封号
当然,主要还是简单图例我觉得太多,太麻烦……放重点图例吧哈哈
附录提供ipny代码文件与导出的html文件
1. 基础知识
1.1 Plotly简介和安装
Plotly简介: Plotly是一个用于创建交互式数据可视化的Python库。它允许轻松地生成各种类型的图表,包括线图、散点图、柱状图、地图等。Plotly的交互性可以探索数据、触发工具提示、缩放和平移图表,以及与观众互动。
安装Plotly: 要安装Plotly,可以使用pip命令。如尚未安装Plotly,可以运行以下命令:
pip install plotly
如果使用Jupyter Notebook,可以在Notebook中执行以下命令:
!pip install plotly
1.2 Plotly图表对象和语法介绍
1.2.1 Plotly图表对象
Plotly图表通常包括以下几个主要组成部分:
- 数据(Data): 在图表中可视化的实际数据。数据通常以字典或数据框的形式传递,其中包含列名和数据点。例如:
data = {'x': [1, 2, 3, 4], 'y': [10, 11, 12, 13], 'name': '数据集1'}
- 布局(Layout): 布局定义了图表的外观和样式,包括标题、轴标签、背景色等。布局以字典的形式传递,如:
layout = {'title': '我的图表', 'xaxis': {'title': 'X轴标签'}}
- 图表类型(Trace): 图表类型定义了数据的可视化方式,包括线图、散点图、柱状图等。不同的图表类型有不同的属性和参数,用于定义数据的呈现方式。
1.2.2 创建Plotly图表
要创建Plotly图表,通常可以使用plotly.graph_objs
模块或plotly.express
模块。下面是两种常用的方法:
使用plotly.graph_objs
:
import plotly.graph_objs as go
# 创建数据对象
trace = go.Scatter(x=[1, 2, 3, 4], y=[10, 11, 12, 13], mode='lines', name='数据集1')
# 创建布局对象
layout = go.Layout(title='我的图表', xaxis=dict(title='X轴标签'))
# 创建图表对象
fig = go.Figure(data=[trace], layout=layout)
# 显示图表
fig.show()
使用plotly.express
:
import plotly.express as px
# 创建数据框
df = pd.DataFrame({'x': [1, 2, 3, 4], 'y': [10, 11, 12, 13]})
# 使用Plotly Express创建图表
fig = px.line(df, x='x', y='y', title='我的图表', labels={'x': 'X轴标签'})
# 显示图表
fig.show()
这些方法都可以用来创建基本的Plotly图表对象。使用plotly.express
通常更简洁,适用于快速绘制常见类型的图表。
1.2.3 图表语法和属性
Plotly图表对象的属性和参数允许自定义图表的外观和行为。可以设置线的颜色、轴的范围、标记的大小等。以下是一些示例:
# 设置线的颜色
trace.line = dict(color='blue')
# 设置轴的范围
layout.xaxis = dict(range=[0, 5])
# 设置标记的大小
trace.marker = dict(size=10)
通过了解这些基本图表对象的构建和语法,更好地掌握如何使用Plotly创建自定义的可视化图表,以展示和解释数据。
当深入讲解每个小节时,我将提供更详细的信息,示例代码和解释,以确保读者能够全面了解每个主题。现在,让我们进一步扩展每个小节的内容。
1.3 基本图表绘制
以下提供了简单示例,运行代码便可以看可视化图像,自己运行感受下,这里就不放图片啦^_^
1.3.1 折线图
折线图是一种常见的图表类型,用于可视化数据随时间或其他连续变量的趋势。
import plotly.express as px
import pandas as pd
# 创建示例数据集
data = pd.DataFrame({'时间': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'],
'值': [10, 15, 12, 18]})
# 使用Plotly Express创建折线图
fig = px.line(data_frame=data, x='时间', y='值', title='折线图')
# 显示图表
fig.show()
1.3.2 散点图
散点图用于观察数据点的分布和关联性
import pandas as pd
import plotly.express as px
# 创建示例数据集
data = pd.DataFrame({'x': [1, 2, 3, 4, 5],
'y': [2, 4, 6, 8, 10]})
# 使用Plotly Express创建散点图
fig = px.scatter(data_frame=data, x='x', y='y', title='散点图')
# 显示图表
fig.show()
1.3.3 柱状图
柱状图是用于比较不同类别或组之间数据的有力工具。
import pandas as pd
import plotly.express as px
# 创建示例数据集
data = pd.DataFrame({'类别': ['A', 'B', 'C', 'D'],
'值': [15, 10, 12, 8]})
# 使用Plotly Express创建柱状图
fig = px.bar(data_frame=data, x='类别', y='值', title='柱状图')
# 显示图表
fig.show()
1.4 图表样式和布局定制
1.4.1 颜色和样式
Plotly允许自定义图表元素的颜色、线型和标记。可以使用color
参数来指定颜色,mode
参数来指定线型,以及其他自定义选项。例如:
import pandas as pd
import plotly.express as px
# 创建示例数据集
data = pd.DataFrame({'x': [1, 2, 3, 4, 5],
'y': [2, 4, 6, 8, 10]})
# 使用Plotly Express创建散点图
fig = px.scatter(data_frame=data, x='x', y='y', title='散点图')
# 自定义散点图元素颜色和线型
fig.update_traces(marker=dict(size=8, color='red'), line=dict(color='blue'))
# 显示图表
fig.show()
这将设置散点图的标记颜色为红色,线型颜色为蓝色。
1.4.2 布局调整
Plotly还允许调整图表的布局,包括标题、轴标签和图例的位置。可以使用update_layout
来进行这些调整:
import pandas as pd
import plotly.express as px
# 创建示例数据集
data = pd.DataFrame({'x': [1, 2, 3, 4, 5],
'y': [2, 4, 6, 8, 10]})
# 使用Plotly Express创建散点图
fig = px.scatter(data_frame=data, x='x', y='y')
# 自定义图表布局
fig.update_layout(
title='自定义标题',
xaxis_title='X轴标签',
yaxis_title='Y轴标签',
legend=dict(x=0, y=1)
)
# 显示图表
fig.show()
这将设置图表的标题、轴标签和图例的位置。
1.4.3 标题和注释
使用Plotly添加标题和注释,以提供更多信息和上下文。例如,要添加图表标题:
import pandas as pd
import plotly.graph_objects as go
# 创建示例数据集
data = pd.DataFrame({'x': [1, 2, 3, 4, 5],
'y': [2, 4, 6, 8, 10]})
# 使用Plotly创建散点图
fig = go.Figure(data=go.Scatter(x=data['x'], y=data['y'], mode='markers'))
# 添加图表标题
fig.update_layout(title_text='我的图表标题')
# 添加注释
fig.add_annotation(x=3, y=6, text='这是一个注释', showarrow=True, arrowhead=1)
# 显示图表
fig.show()
可以使用add_annotation
方法添加注释,指定位置和文本。
1.5 数据导入和处理
1.5.1 数据导入
要从不同数据源导入数据,如CSV文件或数据框,可以使用Pandas库。例如,要从CSV文件导入数据:
import pandas as pd
data = pd.read_csv('data.csv')
1.5.2 数据处理
数据处理是数据可视化的关键步骤。可使用Pandas来进行数据筛选、清洗和转换,以满足可视化需求。例如,要筛选特定条件下的数据:
import pandas as pd
# 创建示例数据集
data = pd.DataFrame({'x': [1, 2, 3, 4, 5],
'y': [2, 4, 6, 8, 10],
'条件': ['A', 'B', 'A', 'B', 'A']})
# 筛选特定条件下的数据
filtered_data = data[data['条件'] == 'A']
# 打印筛选后的结果
print(filtered_data)
# 输出
x y 条件
0 1 2 A
2 3 6 A
4 5 10 A
理解的需求,下面我将提供更具体的内容来详细介绍每个小节。
2.交互式图表
2.1 配置和操作交互性
Plotly图表的交互性非常重要,可以通过以下方式配置和操作:
2.1.1 鼠标交互
鼠标交互使用户能够与图表进行互动,包括:
缩放: 用户可以使用鼠标滚轮缩放图表,以查看数据的不同部分。这对于查看大规模数据集非常有用。
拖动: 用户可以通过拖动鼠标来平移图表,从而查看隐藏在屏幕外的数据。
点击: 可以配置图表,使得用户在点击数据点时可以执行自定义操作,例如显示更多详细信息。
2.1.2 滚动和缩放
Plotly允许用户使用鼠标滚轮来缩放图表。这可以通过简单的滚动鼠标滚轮来实现,用户可以放大或缩小图表,以查看特定数据的细节或整体趋势。
2.1.3 选择和高亮
用户可以选择数据点并将其高亮显示,以便更深入地研究感兴趣的数据。这通常通过鼠标点击或拖动来实现,用户可以选择数据点并查看相关信息。
2.1.4 交互式控件
Plotly允许添加各种交互式控件,如滑块、按钮和下拉菜单。这些控件使用户可以动态调整图表内容,例如过滤数据、更改图表类型或调整参数。
2.2 悬停标签和工具提示
悬停标签和工具提示是交互式图表中的关键元素,提供了附加信息以增强用户体验:
2.2.1 配置悬停标签
可以配置悬停标签以在鼠标悬停在数据点上时显示特定信息。这通常包括数据值、标签和其他相关信息,让用户能够轻松获取数据的背景信息。
2.2.2 自定义工具提示
如果需要更详细的信息,可以通过自定义HTML内容来创建复杂的工具提示。这允许显示图表的详细信息、自定义格式和样式。
2.2.3 鼠标悬停交互
Plotly允许配置鼠标悬停时的交互效果,例如更改标记的颜色、大小或显示额外的信息。这使得用户可以通过悬停来探索数据点。
2.3 缩放和平移功能
为了更好地查看数据,Plotly提供了缩放和平移功能:
2.3.1 缩放图表
用户可以使用鼠标滚轮来放大或缩小图表,以查看数据的不同部分。这非常有用,尤其是对于具有大量数据点的图表。
2.3.2 平移图表
通过拖动图表,用户可以移动可视化区域,以查看隐藏在屏幕外的数据。这有助于用户浏览整个数据集。
2.3.3 自动缩放
Plotly还支持自动缩放功能,这意味着图表可以根据数据的范围自动调整,以确保数据点不会被截断。这使得用户无需手动缩放图表,数据会自动适应显示。
2.4 响应式布局和自适应设计
在不同设备和屏幕尺寸上呈现图表是重要的,Plotly提供了方法来实现响应式布局和自适应设计:
2.4.1 自适应大小
可以配置图表以自适应不同屏幕尺寸,以确保用户在移动设备上获得
出色的体验。这意味着图表会自动调整大小,以适应不同的显示器。
2.4.2 媒体查询
使用媒体查询,可以根据设备的特性来调整图表的布局和样式。这允许根据设备的屏幕大小、方向和分辨率来定制图表的外观。
2.4.3 响应式控制
Plotly允许根据用户的操作来控制图表的响应性。例如,可以配置图表,在用户旋转设备或更改屏幕尺寸时重新布局图表,以确保用户获得最佳的交互体验。
3. 高级图表绘制
深入探讨高级的Plotly图表绘制,包括3D图表、地理数据可视化、统计图表以及统计模型图表。
3.1 绘制3D图表
Plotly允许绘制各种类型的3D图表,包括散点图和线型图。下面是一些示例:
3.1.1 3D散点图
import plotly.graph_objs as go
import numpy as np
# 创建数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
# 创建3D散点图
fig = go.Figure(data=[go.Scatter3d(x=x, y=y, z=z, mode='markers', marker=dict(size=5))])
# 设置布局
fig.update_layout(scene=dict(xaxis_title='X轴', yaxis_title='Y轴', zaxis_title='Z轴'))
# 显示图表
fig.show()
3.1.2 3D线型图
import plotly.graph_objs as go
import numpy as np
# 创建数据
t = np.linspace(0, 10, 100)
x = np.sin(t)
y = np.cos(t)
z = t
# 创建3D线型图
fig = go.Figure(data=[go.Scatter3d(x=x, y=y, z=z, mode='lines')])
# 设置布局
fig.update_layout(scene=dict(xaxis_title='X轴', yaxis_title='Y轴', zaxis_title='Z轴'))
# 显示图表
fig.show()
3.2 绘制地理数据可视化图表
Plotly支持绘制地理数据可视化图表,这对于地图数据非常有用。下面是一个简单的地图绘制示例:
import plotly.express as px
# 创建地理数据框
df = px.data.gapminder()
# 创建地图
fig = px.scatter_geo(df, locations="iso_alpha", color="continent", hover_name="country", size="pop", projection="natural earth")
# 显示地图
fig.show()
3.3 绘制统计图表
Plotly还支持绘制各种统计图表,包括箱线图和热力图。以下是示例:
3.3.1 箱线图
import plotly.express as px
# 创建数据
df = px.data.tips()
# 创建箱线图
fig = px.box(df, x="day", y="total_bill", points="all")
# 显示箱线图
fig.show()
3.3.2 热力图
import plotly.express as px
# 创建数据
df = px.data.iris()
# 创建热力图
fig = px.density_heatmap(df, x="sepal_width", y="sepal_length")
# 显示热力图
fig.show()
3.4 绘制统计模型图表
Plotly可以用来可视化统计模型的结果,包括线性回归图和残差图。以下是示例:
3.4.1 线性回归图
import plotly.express as px
# 创建数据
df = px.data.tips()
# 创建线性回归图
fig = px.scatter(df, x="total_bill", y="tip", trendline="ols")
# 显示线性回归图
fig.show()
3.4.2 残差图
import plotly.express as px
# 创建数据
df = px.data.tips()
# 创建残差图
fig = px.scatter(df, x="total_bill", y="tip", trendline="ols")
# 显示残差图
fig.show()
通过这些示例,了解如何使用Plotly创建高级图表,包括3D图表、地理数据可视化、统计图表和统计模型图表。这些图表可以用于更深入的数据分析和可视化。
4. 多图合并和子图布局
在Plotly中创建多图合并和子图布局。这包括创建子图和网格布局、组合多个图表到一个画布、自定义子图之间的排列和间距,以及添加标题和图例。
4.1 创建子图和网格布局
4.1.1 创建子图
在Plotly中,可以创建多个子图,并将它们组合成一个画布。下面是一个示例,演示如何创建两个子图并将它们排列在一行:
import plotly.graph_objs as go
# 创建子图1
fig1 = go.Figure(data=go.Scatter(x=[1, 2, 3], y=[1, 2, 3], mode='markers'))
# 创建子图2
fig2 = go.Figure(data=go.Bar(x=[1, 2, 3], y=[3, 2, 1]))
# 显示子图
fig1.show()
fig2.show()
4.1.2 网格布局
Plotly还支持在一个画布上创建多个子图,并将它们排列在网格布局中。下面是一个示例,演示如何创建一个包含多个子图的网格布局:
import plotly.graph_objs as go
from plotly.subplots import make_subplots
# 创建子图
fig = make_subplots(rows=2, cols=2, subplot_titles=('子图1', '子图2', '子图3', '子图4'))
# 添加子图1
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[1, 2, 3], mode='markers'), row=1, col=1)
# 添加子图2
fig.add_trace(go.Bar(x=[1, 2, 3], y=[3, 2, 1]), row=1, col=2)
# 添加子图3
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[3, 2, 1], mode='markers'), row=2, col=1)
# 添加子图4
fig.add_trace(go.Bar(x=[1, 2, 3], y=[1, 2, 3]), row=2, col=2)
# 显示网格布局
fig.show()
4.2 组合多个图表到一个画布
Plotly允许将多个图表组合到一个画布上,以创建一个多图合并的可视化。下面是一个示例,演示如何将两个图表组合到一个画布上:
import plotly.graph_objs as go
# 创建图表1
fig1 = go.Figure(data=go.Scatter(x=[1, 2, 3], y=[1, 2, 3], mode='markers'))
# 创建图表2
fig2 = go.Figure(data=go.Bar(x=[1, 2, 3], y=[3, 2, 1]))
# 合并图表到一个画布
fig1.add_traces(fig2.data)
# 显示合并后的图表
fig1.show()
4.3 自定义子图之间的排列和间距
在Plotly中,自定义子图之间的排列和间距,以满足特定的布局需求。下面是一个示例,演示如何自定义子图之间的排列和间距:
import plotly.graph_objs as go
# 创建子图1
fig1 = go.Figure(data=go.Scatter(x=[1, 2, 3], y=[1, 2, 3], mode='markers'))
# 创建子图2
fig2 = go.Figure(data=go.Bar(x=[1, 2, 3], y=[3, 2, 1]))
# 自定义子图之间的排列和间距
fig1.update_layout(
xaxis=dict(domain=[0, 0.4]),
yaxis=dict(domain=[0, 1]),
)
fig2.update_layout(
xaxis=dict(domain=[0.6, 1]),
yaxis=dict(domain=[0, 1]),
)
# 显示自定义排列的图表
fig1
5. 高级主题定制
如何进行高级主题定制,以满足特定的可视化需求。这包括使用自定义主题样式、配置颜色和字体样式、添加背景图和水印,以及如何导出和分享图表。
5.1 使用自定义主题样式
Plotly允许使用自定义主题样式来改变图表的整体外观和风格。下面是一个示例,演示如何应用自定义主题样式:
import plotly.graph_objs as go
# 创建图表
fig = go.Figure(data=go.Scatter(x=[1, 2, 3], y=[1, 2, 3], mode='markers'))
# 应用自定义主题样式
fig.update_layout(
template="plotly_dark" # 使用“plotly_dark”主题
)
# 显示图表
fig.show()
5.2 配置颜色和字体样式
可以配置图表的颜色和字体样式,以满足特定的设计需求。下面是一个示例,演示如何配置颜色和字体样式:
import plotly.graph_objs as go
# 创建图表
fig = go.Figure(data=go.Scatter(x=[1, 2, 3], y=[1, 2, 3], mode='markers'))
# 配置颜色和字体样式
fig.update_layout(
font=dict(family="Arial", size=14, color="red"), # 配置字体样式
plot_bgcolor="lightgray", # 设置图表背景颜色
paper_bgcolor="white" # 设置绘图区域背景颜色
)
# 显示图表
fig.show()
5.3 添加背景图和水印
Plotly允许在图表上添加背景图和水印,以提供更多的信息或品牌标识。下面是一个示例,演示如何添加背景图和水印:
import plotly.graph_objs as go
# 创建图表
fig = go.Figure(data=go.Scatter(x=[1, 2, 3], y=[1, 2, 3], mode='markers'))
# 添加背景图
fig.add_layout_image(
source="your_background_image.jpg",
x=0,
y=1,
xref="paper",
yref="paper",
sizex=1,
sizey=1,
opacity=0.5,
layer="below"
)
# 添加水印
fig.add_annotation(
text="Your Watermark",
x=0.5,
y=0.5,
xref="paper",
yref="paper",
showarrow=False,
font=dict(size=30, color="gray")
)
# 显示图表
fig.show()
5.4 导出和分享图表
一旦完成了图表的创建和定制,可以导出图表以分享或嵌入到网页中。下面是一个示例,演示如何导出图表为静态图像文件:
import plotly.graph_objs as go
# 创建图表
fig = go.Figure(data=go.Scatter(x=[1, 2, 3], y=[1, 2, 3], mode='markers'))
# 导出图表为静态图像文件(PNG格式)
fig.write_image("my_plot.png")
通过这些示例,可以了解如何进行高级主题定制,包括自定义主题样式、颜色和字体样式的配置,以及如何添加背景图和水印。
结语
Plotly是一个功能强大且灵活的工具,适用于各种数据可视化需求。通过学习和掌握这些技巧,您将能够创建引人入胜的交互式可视化,使您的数据更具吸引力和可用性。希望本篇博客对您的数据分析和可视化工作有所帮助,激发您的创造力和探索精神。
附录
代码与html文件: https://bevis.lanzouq.com/iZtSl1c62utg