You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Plotly绘制多只股票收益率分布并支持图例切换?

股票投资组合收益率分布可视化(支持图例切换)

解决方案说明

要在同一图中展示所有股票的收益率分布并支持图例切换,需直接使用Plotly的API构建图形,手动添加每只股票的直方图轨迹。Plotly默认支持点击图例隐藏/显示单条轨迹,满足交互需求。

完整代码实现

#Import libraries
import numpy as np 
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import datetime as dt
from pandas_datareader import data as pdr
import plotly.graph_objects as go
import plotly.offline as pyo

pyo.init_notebook_mode(connected=True)
pd.options.plotting.backend = 'plotly'

#Set start/end time and get stocks data from Yahoo Finance
end = dt.datetime.now()
start = end - dt.timedelta(weeks=104)
stocks_list = ['COST', 'NIO', 'AMD']
df = pdr.get_data_yahoo(stocks_list, start, end)

#Rename 'Adj Close' to be able to create a more accessible variable
df.rename(columns = {"Adj Close" : "Adj_Close"}, inplace = True)
AClose = df.Adj_Close

#Plot the Adjusted Close price with plotly
AClose.plot()

#--------------------------
# 所有股票简单收益率分布图
#--------------------------
# 计算所有股票的简单收益率
simple_returns = AClose.pct_change().dropna()

# 创建Plotly图形对象
fig_simple = go.Figure()

# 循环添加每只股票的直方图轨迹
for stock in stocks_list:
    fig_simple.add_trace(go.Histogram(
        x=simple_returns[stock],
        name=stock,
        opacity=0.6,  # 设置透明度,方便查看重叠部分
        nbinsx=50     # 调整直方图的 bin 数量
    ))

# 设置布局:直方图重叠显示,添加标题和标签
fig_simple.update_layout(
    title='股票投资组合简单收益率分布',
    xaxis_title='简单收益率',
    yaxis_title='频数',
    barmode='overlay'  # 重叠模式,让多个直方图在同一图中显示
)

# 显示图形
fig_simple.show()

#--------------------------
# 所有股票对数收益率分布图
#--------------------------
# 计算对数收益率
log_returns = np.log(df.Adj_Close/df.Adj_Close.shift(1)).dropna()

# 创建Plotly图形对象
fig_log = go.Figure()

# 循环添加每只股票的直方图轨迹
for stock in stocks_list:
    fig_log.add_trace(go.Histogram(
        x=log_returns[stock],
        name=stock,
        opacity=0.6,
        nbinsx=50
    ))

# 设置布局
fig_log.update_layout(
    title='股票投资组合对数收益率分布',
    xaxis_title='对数收益率',
    yaxis_title='频数',
    barmode='overlay'
)

# 显示图形
fig_log.show()

功能说明

  • 图例交互:点击图例中的股票名称,可单独隐藏/显示该股票的收益率分布轨迹,便于对比分析。
  • 透明度设置:opacity=0.6让重叠的直方图区域可见,避免完全遮挡。
  • 重叠模式:barmode='overlay'确保所有股票的直方图在同一坐标系展示,而非分成子图。

内容的提问来源于stack exchange,提问作者RiccardoWhc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:01:23