生生不息

生生不息

AI用Cufflinks绘制交互式图像

2025-06-22
AI用Cufflinks绘制交互式图像

提示词

现在有一个DataFrame,其中一列是股票的每日收盘价,我希望用Cufflinks和Plotly绘制交互式图表,请给出示例代码。

答案

# 安装必要库(如未安装)
# pip install cufflinks plotly pandas

import pandas as pd
import cufflinks as cf
from plotly.offline import iplot

# 初始化Cufflinks
cf.go_offline()  # 设置离线模式[5,6](@ref)
cf.set_config_file(theme='pearl')  # 设置主题样式

# 示例数据(替换为您的DataFrame)
data = {
    '收盘': [100, 102, 101, 105, 110, 108, 112],
    '开盘': [99, 101, 105, 103, 108, 112, 110],
    '最高': [102, 104, 106, 108, 112, 115, 114],
    '最低': [98, 100, 101, 102, 107, 106, 109]
}
df = pd.DataFrame(data, index=pd.date_range('2024-01-01', periods=7))

# 1. 基础折线图(收盘价)
df[['收盘']].iplot(
    kind='line',
    title='股票收盘价走势',
    xTitle='日期',
    yTitle='价格',
    legend=True,
    mode='lines+markers'  # 同时显示线条和标记点[1,6](@ref)
)

# 2. 带技术指标的综合图表
# 确保列名正确
df = df.rename(columns={'收盘': 'close', '开盘': 'open', '最高': 'high', '最低': 'low'})

qf = cf.QuantFig(df, title='股票技术分析', legend=True)
qf.add_sma(periods=5, color='blue')   # 添加5日均线[1](@ref)
qf.add_bollinger_bands(periods=20)    # 添加布林带[6](@ref)
qf.add_rsi(periods=14, showbands=True)  # 添加RSI指标
qf.iplot()

# 3. K线图(需包含OHLC数据)
df[['open','high','low','close']].iplot(
    kind='candle',
    title='K线图',
    up_color='green',  # 上涨颜色
    down_color='red'   # 下跌颜色[4,6](@ref)
)

图像:

完成的不错。本来只要他做第一个折线图来的。

绘制子图

提示词

一个DataFrame中包含股票的收盘价和简单收益,请用Cufflinks绘制图形,以两行子图的形式绘制这两列数据,且共享x轴。

答案

import pandas as pd
import cufflinks as cf
from plotly.subplots import make_subplots

# 初始化 Cufflinks
cf.go_offline()

# 示例数据(替换为你的 DataFrame)
dates = pd.date_range('2024-01-01', periods=30)
df = pd.DataFrame({
    'close': [100 + i*2 + (-1)**i*5 for i in range(30)],  # 模拟收盘价
    'return': [0.02, -0.01, 0.03, 0.015, -0.02]*6        # 模拟简单收益
}, index=dates)

# 创建子图布局(2 行 1 列,共享 x 轴)
fig = make_subplots(
    rows=2, cols=1,
    shared_xaxes=True,
    vertical_spacing=0.1,
    subplot_titles=('收盘价走势', '简单收益波动')
)

# 绘制收盘价子图
close_fig = df[['close']].iplot(
    asFigure=True,  # 返回 Plotly Figure 对象
    kind='line',
    color='blue',
    xTitle='日期',
    yTitle='价格',
    showlegend=False
)
fig.add_traces(close_fig.data, rows=1, cols=1)

# 绘制收益子图
return_fig = df[['return']].iplot(
    asFigure=True,
    kind='scatter',  # 散点图更清晰展示波动
    mode='lines+markers',
    color='green',
    fill=True,        # 填充面积增强可视化
    opacity=0.7,      # 70% 透明度
    yTitle='收益',
    showlegend=False
)
fig.add_traces(return_fig.data, rows=2, cols=1)

# 统一布局设置
fig.update_layout(
    height=800,
    title_text='股票分析双视图',
    hovermode='x unified'  # 鼠标悬停时显示双图数据
)

# 同步 x 轴范围
fig.update_xaxes(range=[df.index.min(), df.index.max()])

# 显示图表
fig.show()

图像: