前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入了解 Plotly 高级技术,附实用代码示例

深入了解 Plotly 高级技术,附实用代码示例

作者头像
数据STUDIO
发布2024-04-11 12:43:20
1810
发布2024-04-11 12:43:20
举报
文章被收录于专栏:数据STUDIO数据STUDIO

数据可视化是数据分析和探索中至关重要的一部分,能够帮助我们更深入地理解数据集中的潜在模式、趋势和关系。Plotly是一个功能强大、用途广泛的Python库,提供了多种工具用于创建交互式、视觉上引人入胜的图表。在本文中,我们将深入探索Plotly的世界,通过高级Python代码示例来探索其特性和功能。

了解 Plotly

Plotly 是一个可在 Python 中使用的开源库,用于制作交互式图表和仪表盘。它提供了多种图表类型,如散点图、折线图、条形图等。Plotly 的特别之处在于它可以生成可以交互的图表,用户可以进行动态缩放、平移和交互式操作。

安装

在深入学习示例之前,先确保 Plotly 已安装。如果尚未安装,请使用以下命令:

代码语言:javascript
复制
pip install plotly

Plotly已经成功安装,现在让我们使用一些高级的Python代码示例来深入了解它的功能。

示例

示例 1:基本折线图

代码语言:javascript
复制
import plotly.graph_objects as go
import numpy as np
# Generate sample data
x = np.linspace(0, 10, 100)
y = np.sin(x)
# Create a basic line plot
fig = go.Figure(data=go.Scatter(x=x, y=y, mode='lines'))
# Add title and labels
fig.update_layout(title='Basic Line Plot', xaxis_title='X-axis', yaxis_title='Y-axis')
# Show the plot
fig.show()

使用 Plotly 创建一个简单的折线图。我们使用 NumPy 生成样本数据,然后使用 Plotly 的go.Scatter创建线图。

示例 2:带颜色梯度的散点图

代码语言:javascript
复制
import plotly.express as px
import pandas as pd
# Generate sample data
np.random.seed(42)
df = pd.DataFrame({'X': np.random.rand(50), 'Y': np.random.rand(50), 'Size': np.random.rand(50) * 30})
# Create a scatter plot with color gradient
fig = px.scatter(df, x='X', y='Y', size='Size', color='Size', title='Scatter Plot with Color Gradient')
# Show the plot
fig.show()

在这个示例中,我们利用Plotly Express创建了一个带有色彩渐变的散点图。通过大小颜色参数,我们可以在图中表示第三个维度。

示例 3:三维曲面图

代码语言:javascript
复制
import plotly.graph_objects as go
import numpy as np
# Generate sample data
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
# Create a 3D surface plot
fig = go.Figure(data=[go.Surface(z=z, x=x, y=y)])
# Add title and labels
fig.update_layout(title='3D Surface Plot', scene=dict(xaxis_title='X-axis', yaxis_title='Y-axis', zaxis_title='Z-axis'))
# Show the plot
fig.show()

这里三维曲面图生成样本数据,并用go.Surface创建曲面图。生成的可视化图可以清晰地显示曲面。

示例 4:动画折线图

代码语言:javascript
复制
import plotly.graph_objects as go
import numpy as np
# Generate animated data
t = np.linspace(0, 2 * np.pi, 100)
x = np.sin(t)
y = np.cos(t)
# Create an animated line plot
fig = go.Figure(data=go.Scatter(x=[0], y=[0], mode='lines'), layout=go.Layout(updatemenus=[dict(type='buttons', showactive=False, buttons=[dict(label='Play', method='animate', args=[None, dict(frame=dict(duration=100, redraw=True), fromcurrent=True)])])]))
# Add frames for animation
frames = [go.Frame(data=go.Scatter(x=x[:i], y=y[:i], mode='lines+markers')) for i in range(2, len(t))]
fig.frames = frames
# Add title and labels
fig.update_layout(title='Animated Line Plot', xaxis_title='X-axis', yaxis_title='Y-axis', updatemenus=[dict(type='buttons', showactive=False, buttons=[dict(label='Play', method='animate', args=[None, dict(frame=dict(duration=100, redraw=True), fromcurrent=True)])])])
# Show the plot
fig.show()

这个例子展示了如何利用Plotly来创建动态折线图。通过播放按钮来控制动画,并添加帧来随时间更新图表。

示例 5:气泡图

代码语言:javascript
复制
import plotly.express as px
# Generate sample data
df = px.data.gapminder().query("year == 2007")
# Create a bubble map
fig = px.scatter_geo(df, locations='iso_alpha', size='pop', hover_name='country', title='Bubble Map')
# Show the plot
fig.show()

在这个示例中,我们利用Gapminder数据集的数据使用Plotly Express创建了一个气泡图。每个气泡的大小表示一个国家的人口数量。

示例 6:小提琴图

代码语言:javascript
复制
import plotly.express as px
import seaborn as sns
# Load sample dataset
tips = sns.load_dataset('tips')
# Create a violin plot
fig = px.violin(tips, y='total_bill', x='day', box=True, points="all", title='Violin Plot')
# Show the plot
fig.show()

在这里,我们利用Plotly Express绘制了一个小提琴图,这是一种用于展示数据集分布统计的方法。图表展示了每天账单总额的分布情况。

例 7:旭日图

代码语言:javascript
复制
import plotly.express as px
# Generate sample data
df = px.data.tips()
# Create a sunburst chart
fig = px.sunburst(df, path=['sex', 'day', 'time'], values='total_bill', title='Sunburst Chart')
# Show the plot
fig.show()

这个示例展示了如何使用Plotly Express创建旭日图。分层结构由路径参数定义,而数值则由不同段的大小表示。

示例 8:带注释的热图

代码语言:javascript
复制
import plotly.express as px
import numpy as np
# Generate sample data
np.random.seed(42)
corr_matrix = np.random.rand(10, 10)
# Create a heatmap with annotations
fig = px.imshow(corr_matrix, labels=dict(x="X-axis", y="Y-axis", color="Correlation"), title='Heatmap with Annotations')
# Show the plot
fig.show()

在这个例子中,我们利用 Plotly Express 绘制了一个带有注释的热图。借助标签参数labels,我们可以定制坐标轴标签和颜色条标签。

例 9:雷达图

代码语言:javascript
复制
import plotly.graph_objects as go
import pandas as pd
# Generate sample data
categories = ['Speed', 'Reliability', 'Comfort', 'Safety', 'Efficiency']
values = [90, 60, 85, 70, 80]
# Create a radar chart
fig = go.Figure()
fig.add_trace(go.Scatterpolar(
      r=values,
      theta=categories,
      fill='toself',
      name='Product A'
))
# Add title
fig.update_layout(title='Radar Chart')
# Show the plot
fig.show()

在本例中,用 Plotly 的Scatterpolar创建一个雷达图。该图表示单个数据点的多个属性(类别)。

例 10:地图

代码语言:javascript
复制
import plotly.express as px
# Generate sample data
df = px.data.gapminder().query("year == 2007")
# Create a choropleth map
fig = px.choropleth(df, locations='iso_alpha', color='gdpPercap', hover_name='country', title='Choropleth Map')
# Show the plot
fig.show()

【由于限制,地图无法展示】

这个例子展示了如何使用Plotly Express创建一个热力图,颜色的深浅反映了每个国家的人均GDP。

例 11:自定义布局

代码语言:javascript
复制
import plotly.graph_objects as go
# Generate sample data
x = [1, 2, 3, 4, 5]
y = [10, 11, 12, 13, 14]
# Create a bar chart with customized layout
fig = go.Figure(data=go.Bar(x=x, y=y, marker_color='orange'))
# Customize layout
fig.update_layout(title='Customized Bar Chart', xaxis_title='X-axis', yaxis_title='Y-axis', font=dict(family='Arial', size=12))
# Show the plot
fig.show()

在这个例子中,我们制作了一个自定义布局的条形图。通过使用update_layout方法,我们可以定制标题、坐标轴标签和字体样式。

示例 12:子图

代码语言:javascript
复制
import plotly.subplots as sp
import plotly.graph_objects as go
# Generate sample data
x = [1, 2, 3, 4, 5]
y1 = [10, 11, 12, 13, 14]
y2 = [14, 13, 12, 11, 10]
# Create subplots
fig = sp.make_subplots(rows=2, cols=1, shared_xaxes=True, subplot_titles=['Subplot 1', 'Subplot 2'])
# Add traces to subplots
fig.add_trace(go.Scatter(x=x, y=y1, mode='lines+markers', name='Trace 1'), row=1, col=1)
fig.add_trace(go.Scatter(x=x, y=y2, mode='lines+markers', name='Trace 2'), row=2, col=1)
# Customize layout
fig.update_layout(title='Subplots', xaxis_title='X-axis', yaxis_title='Y-axis')
# Show the plot
fig.show()

我们在这里利用Plotly的make_subplots函数创建了两个共享同一x轴的子图。然后分别为每个子图添加曲线。

示例 13:动态仪表盘

代码语言:javascript
复制
import dash
from dash import html
from dash import dcc
from dash.dependencies import Input, Output
import plotly.express as px
# Generate sample data
df = px.data.tips()
# Create a Dash app
app = dash.Dash(__name__)
# Define the layout
app.layout = html.Div([
    dcc.Graph(id='scatter-plot'),
    dcc.Slider(
        id='slider-tip',
        min=df['total_bill'].min(),
        max=df['total_bill'].max(),
        value=df['total_bill'].mean(),
        marks={str(i): str(i) for i in range(int(df['total_bill'].min()), int(df['total_bill'].max()) + 1, 5)},
        step=1
    )
])
# Define callback to update scatter plot
@app.callback(
    Output('scatter-plot', 'figure'),
    [Input('slider-tip', 'value')]
)
def update_scatter_plot(selected_tip):
    filtered_df = df[df['total_bill'] <= selected_tip]
    fig = px.scatter(filtered_df, x='total_bill', y='tip', title='Scatter Plot with Dynamic Filter')
    return fig
# Run the app
if __name__ == '__main__':
    app.run_server(debug=True)
python app.py

在这个案例中,我们采用了Dash来制作一个动态仪表盘,这个框架使用了Plotly来构建网络应用程序。根据滑块中选择的数值,散点图会进行更新。

示例 14:三维散点图

代码语言:javascript
复制
import plotly.graph_objects as go
import numpy as np
# Generate sample data
np.random.seed(42)
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
# Create a 3D scatter plot
fig = go.Figure(data=[go.Scatter3d(x=x, y=y, z=z, mode='markers', marker=dict(size=8, color=z, colorscale='Viridis'))])
# Add title and labels
fig.update_layout(title='3D Scatter Plot', scene=dict(xaxis_title='X-axis', yaxis_title='Y-axis', zaxis_title='Z-axis'))
# Show the plot
fig.show()

本示例演示了使用Plotly绘制的立体散点图。每个点的颜色取决于Z轴的值,从而创造了一种引人注目的视觉表现方式。

示例 15:漏斗图

代码语言:javascript
复制
import plotly.graph_objects as go
# Generate sample data
values = [500, 450, 350, 300, 200]
# Create a funnel chart
fig = go.Figure(go.Funnel(y=['Stage 1', 'Stage 2', 'Stage 3', 'Stage 4', 'Stage 5'], x=values, textinfo='value+percent initial'))
# Add title
fig.update_layout(title='Funnel Chart')
# Show the plot
fig.show()

在最后一个示例中,我们使用 Plotly 创建了一个漏斗图,表示一个具有不同阶段的连续过程。每个部分的大小代表相应的值。

结论 Plotly 是一款功能强大、应用广泛的 Python 数据可视化库。本文提供了一系列高级示例,展示了多种图表类型和交互功能。无论您需要探索复杂的三维数据还是构建动态仪表板,Plotly 都能为您提供所需的工具,为您的数据分析项目创建引人注目的可视化效果。请尝试使用本文提供的代码示例,深入了解 Plotly 的功能,以提升您的数据可视化技能。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据STUDIO 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 了解 Plotly
  • 安装
  • 示例
    • 示例 1:基本折线图
      • 示例 2:带颜色梯度的散点图
        • 示例 3:三维曲面图
          • 示例 4:动画折线图
            • 示例 5:气泡图
              • 示例 6:小提琴图
                • 例 7:旭日图
                  • 示例 8:带注释的热图
                    • 例 9:雷达图
                      • 例 10:地图
                        • 例 11:自定义布局
                          • 示例 12:子图
                            • 示例 13:动态仪表盘
                              • 示例 14:三维散点图
                                • 示例 15:漏斗图
                                • 结论 Plotly 是一款功能强大、应用广泛的 Python 数据可视化库。本文提供了一系列高级示例,展示了多种图表类型和交互功能。无论您需要探索复杂的三维数据还是构建动态仪表板,Plotly 都能为您提供所需的工具,为您的数据分析项目创建引人注目的可视化效果。请尝试使用本文提供的代码示例,深入了解 Plotly 的功能,以提升您的数据可视化技能。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档