本文目录导读:

我来详细介绍Python中使用Plotly进行数据交互可视化的方法。
安装Plotly
pip install plotly
基本图表类型
散点图 (Scatter Plot)
import plotly.express as px
import pandas as pd
import numpy as np
# 示例数据
df = pd.DataFrame({
'x': np.random.randn(100),
'y': np.random.randn(100),
'category': np.random.choice(['A', 'B', 'C'], 100)
})
# 基本散点图
fig = px.scatter(df, x='x', y='y', color='category',
title='交互式散点图',
hover_data=['category']) # 悬停显示数据
fig.show()
折线图
# 时间序列数据
dates = pd.date_range('2023-01-01', periods=100)
values = np.random.randn(100).cumsum()
df_line = pd.DataFrame({'date': dates, 'value': values})
fig = px.line(df_line, x='date', y='value',
title='交互式折线图',
markers=True) # 显示数据点
fig.show()
柱状图
# 分组柱状图
df_bar = pd.DataFrame({
'Month': ['Jan', 'Feb', 'Mar', 'Apr'],
'Product A': [23, 45, 56, 78],
'Product B': [34, 56, 67, 89]
})
fig = px.bar(df_bar, x='Month', y=['Product A', 'Product B'],
title='分组柱状图',
barmode='group')
fig.show()
高级交互功能
1 添加滑块和按钮
import plotly.graph_objects as go
# 创建包含滑块的图表
fig = go.Figure()
# 添加数据
x = np.linspace(0, 10, 100)
for i, freq in enumerate([1, 2, 3]):
fig.add_trace(go.Scatter(
x=x,
y=np.sin(freq * x),
name=f'频率 {freq}Hz',
visible=(i == 0) # 默认显示第一个
))
# 添加滑块
fig.update_layout('带滑块的交互图表',
sliders=[{
'active': 0,
'currentvalue': {'prefix': '频率: '},
'steps': [
{'label': f'{freq}Hz', 'method': 'update',
'args': [{'visible': [i == j for j in range(3)]}]}
for i, freq in enumerate([1, 2, 3])
]
}]
)
fig.show()
2 下拉菜单
fig = go.Figure()
# 准备数据
x = np.linspace(0, 10, 100)
traces = [
go.Scatter(x=x, y=np.sin(x), name='正弦', visible=True),
go.Scatter(x=x, y=np.cos(x), name='余弦', visible=False),
go.Scatter(x=x, y=np.tan(x), name='正切', visible=False)
]
for trace in traces:
fig.add_trace(trace)
# 添加下拉菜单
fig.update_layout(
updatemenus=[{
'buttons': [
{'label': '正弦', 'method': 'update',
'args': [{'visible': [True, False, False]}]},
{'label': '余弦', 'method': 'update',
'args': [{'visible': [False, True, False]}]},
{'label': '正切', 'method': 'update',
'args': [{'visible': [False, False, True]}]}
],
'direction': 'down',
'showactive': True,
'x': 0.1,
'y': 1.15
}]
)
fig.show()
3D可视化
# 3D散点图
fig = px.scatter_3d(df, x='x', y='y', z=np.random.randn(100),
color='category',
title='3D散点图',
opacity=0.7)
fig.show()
# 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))
fig = go.Figure(data=[go.Surface(z=Z, x=x, y=y)])
fig.update_layout(title='3D曲面图', scene=dict(
xaxis_title='X轴',
yaxis_title='Y轴',
zaxis_title='Z轴'))
fig.show()
地图可视化
# 世界地图
df_map = px.data.gapminder().query("year==2007")
fig = px.scatter_geo(df_map, locations="iso_alpha",
size="pop",
color="continent",
hover_name="country",
projection="natural earth",
title="世界各国人口分布")
fig.show()
# 中国地图(需要安装)
# pip install plotly-geo
交互功能定制
1 悬停信息
fig = px.scatter(df, x='x', y='y', color='category')
fig.update_traces(
hovertemplate='<b>X: %{x:.2f}</b><br>Y: %{y:.2f}<br>类别: %{color}',
hoverlabel=dict(
bgcolor='white',
font_size=16,
font_family='Arial'
)
)
fig.show()
2 缩放和选择
fig.update_layout(
dragmode='zoom', # 鼠标拖拽缩放
hovermode='x unified', # 统一悬停模式
selectdirection='h', # 水平选择
newshape=dict(line_color='red') # 选择框颜色
)
fig.show()
导出图表
# 保存为HTML文件
fig.write_html("chart.html")
# 保存为图片(需要安装kaleido)
# fig.write_image("chart.png", width=800, height=600)
# 保存为JSON
import json
fig_json = fig.to_json()
with open("chart.json", "w") as f:
json.dump(fig_json, f)
在Jupyter Notebook中显示
# Jupyter Notebook中直接显示 fig.show() # 或者使用iplot import plotly.offline as pyo pyo.iplot(fig) # 嵌入到HTML中 from plotly.offline import plot plot(fig, include_plotlyjs=False, output_type='div')
实战示例:股票价格可视化
import yfinance as yf
import plotly.graph_objects as go
from plotly.subplots import make_subplots
# 获取股票数据
stock = yf.download("AAPL", start="2023-01-01", end="2024-01-01")
# 创建子图
fig = make_subplots(rows=2, cols=1,
shared_xaxes=True,
vertical_spacing=0.03,
subplot_titles=('股价走势', '成交量'),
row_width=[0.7, 0.3])
# 添加OHLC图表
fig.add_trace(go.Ohlc(x=stock.index,
open=stock['Open'],
high=stock['High'],
low=stock['Low'],
close=stock['Close'],
name='AAPL'),
row=1, col=1)
# 添加成交量
fig.add_trace(go.Bar(x=stock.index,
y=stock['Volume'],
name='成交量'),
row=2, col=1)
# 更新布局
fig.update_layout('Apple股票价格分析',
xaxis_title='日期',
yaxis_title='价格 ($)',
template='plotly_dark',
hovermode='x unified'
)
fig.show()
性能优化建议
# 大数据集优化
fig = go.Figure()
fig.add_trace(go.Scattergl(x=df['x'], y=df['y'])) # 使用WebGL渲染
fig.update_layout(
uirevision=True, # 保持UI状态
hoverdistance=10, # 减少悬停检测距离
spikedistance=10 # 减少尖峰检测距离
)
这些示例涵盖了Plotly的主要交互功能,你可以根据具体需求组合使用这些功能,创建专业的数据可视化仪表板,需要更多特定功能的示例吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播