【Python 第三方库】plotly

2024-01-25 00:00:00

目录:

Plotly 模块介绍

Plotly 用于创建交互式且具有视觉吸引力的图表,具有强大的交互性和丰富的图表类型。

在部署与分享方面,Plotly 创建的图标可以导出为静态图像(PNG、PDF等)、独立的HTML文件,或上传至 Plotly Chart Studio 进行在线分享与协作。

安装依赖:

$ pip install plotly -i https://pypi.tuna.tsinghua.edu.cn/simple

Plotly 提供了两个主要模块:

  • plotly.express 用于快速绘图
  • plotly.graph_objects 用于精细控制

plotly.express 模块示例: 快速创建折线图与散点图

import plotly.express as px
import pandas as pd

# 创建示例数据
df = pd.DataFrame({
    "x": [1, 2, 3, 4],
    "y": [10, 15, 13, 17],
    "category": ["A", "B", "A", "B"]
})

# 创建带分组的折线图
fig_line = px.line(df, x="x", y="y", color="category", title="快速折线图示例")
fig_line.show()

# 创建散点图,点的大小代表 y 值
fig_scatter = px.scatter(df, x="x", y="y", color="category", size="y", title="快速散点图示例")
fig_scatter.show()

plotly.graph_objects 模块示例: 创建自定义样式的折线图

当需要更精细地控制图表外观时,可以使用 graph_objects 模块。

import plotly.graph_objects as go
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 创建图形对象并添加轨迹
fig = go.Figure()

fig.add_trace(go.Scatter(
    x=x, 
    y=y, 
    mode='lines+markers', # 同时显示线和标记点
    name='正弦波',
    line=dict(color='firebrick', width=2, dash='dash'), # 自定义线条
    marker=dict(size=6, symbol='square') # 自定义标记点
))

# 自定义布局(标题、坐标轴、主题等)
fig.update_layout(
    title='自定义折线图',
    xaxis_title='X轴',
    yaxis_title='Y轴',
    template='plotly_dark', # 使用暗色主题
    hovermode='x unified' # 悬停模式
)

fig.show()

创建交互式 3D 图表

import plotly.graph_objects as go
import numpy as np

# 生成 3D 曲面数据
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

# 创建 3D 曲面图
fig = go.Figure(data=[go.Surface(z=z, x=x, y=y, colorscale='Viridis')])
fig.update_layout(
    title='3D曲面图示例',
    scene=dict(
        xaxis_title='X轴',
        yaxis_title='Y轴',
        zaxis_title='Z轴'
    )
)

fig.show()

创建地理图表与高级图表

import plotly.express as px

# 使用内置数据集创建气泡地图
df = px.data.gapminder().query("year == 2007")
fig = px.scatter_geo(df, 
                     locations='iso_alpha', # 国家ISO代码
                     size='pop', # 气泡大小代表人口
                     color='continent', # 颜色代表大洲
                     hover_name='country', # 悬停显示国家名
                     title='2007年世界人口分布气泡图')
fig.show()

# 创建旭日图(Sunburst Chart)展示层级数据
df_tips = px.data.tips()
fig_sunburst = px.sunburst(df_tips, 
                           path=['sex', 'day', 'time'], # 定义层级路径
                           values='total_bill', # 值决定扇形大小
                           title='消费数据旭日图')
fig_sunburst.show()

图表导出与保存

# 保存为独立的 HTML 文件,保留所有交互功能
fig.write_html("my_interactive_chart.html")

# 保存为静态图片(需安装 kaleido 引擎)
fig.write_image("my_static_chart.png") # 支持 PNG
fig.write_image("my_static_chart.pdf") # 支持 PDF

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: