python数据分析-plotly

引言

在现代数据科学和数据分析中,可视化是一项至关重要的任务。可视化图表可以帮助我们更好地理解数据、发现趋势和模式,以及与他人分享我们的发现。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图表通常包括以下几个主要组成部分:

  1. 数据(Data): 在图表中可视化的实际数据。数据通常以字典或数据框的形式传递,其中包含列名和数据点。例如:
data = {'x': [1, 2, 3, 4], 'y': [10, 11, 12, 13], 'name': '数据集1'}
  1. 布局(Layout): 布局定义了图表的外观和样式,包括标题、轴标签、背景色等。布局以字典的形式传递,如:
layout = {'title': '我的图表', 'xaxis': {'title': 'X轴标签'}}
  1. 图表类型(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


   转载规则


《python数据分析-plotly》 Bevis23 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
RFM思维模型与案例解析 RFM思维模型与案例解析
引言数据分析是当今信息时代的核心驱动力,通过深入挖掘数据,企业能够更好地了解其客户、市场和业务。在这篇博客中,我们将探讨一种强大的数据分析方法,即RFM分析,它是一种用于理解客户行为和价值的工具。我们将首先介绍数据分析的重要性,然后深入研究
2023-10-15
下一篇 
python数据分析-seaborn python数据分析-seaborn
引言在现代数据科学和数据分析中,可视化是一项至关重要的任务。可视化图表可以帮助我们更好地理解数据、发现趋势和模式,以及与他人分享我们的发现。Python作为一种强大的编程语言,拥有许多出色的库,用于创建各种类型的可视化图表。 在数据可视化领
2023-10-14
  目录
切换