如何在绘图网格中的行/列上设置属性?

Posted

技术标签:

【中文标题】如何在绘图网格中的行/列上设置属性?【英文标题】:How to set properties on a row/column in a grid of plotly plots? 【发布时间】:2021-12-31 08:39:06 【问题描述】:

假设我在每行绘制 2 个图表,共 10 行,使用 plotly:

from plotly.subplots import make_subplots
import plotly.graph_objects as go

N=10
fig = make_subplots(rows=N, cols=2)

fig.add_trace(
    go.Scatter(x=x, y=y),
    row=1, col=1
)

fig.add_trace(
    go.Candlestick(
        x=df_kline.index,
        open=df_kline['O'],
        high=df_kline['H'],
        low=df_kline['L'],
        close=df_kline['C']
    ),
    row=1, col=2
)

:
fig.show()

如何为每一行设置一个yaxis_title

如何将整个第一列的 y 轴范围设置为 [1,10],并且只在绘图底部显示刻度标签?

我希望这是一个问题,而不是两个问题,因为它处理的是 group-by-row / group-by-col。


脚注:

根据接受答案中的 cmets,可以在多个子图上设置设置:

subplot_settings = 
    'rangeslider_visible': True,
    'rangeslider_thickness': 0.05

kwargs = 
    f'xaxisk' : subplot_settings
        for k in range(2, 2*N, 2)

fig.update_layout(**kwargs)

(未测试)

【问题讨论】:

【参考方案1】:

由于没有提供数据,我使用特定股票价格用四个子图来应对挑战;可以在 y 轴设置中设置第一行中每一行的 y 轴的标题和范围。此外,在子图的设置部分,如果将​​共享轴设置为 x 轴,则只有底部的 x 轴可用。

from plotly.subplots import make_subplots
import plotly.graph_objects as go
import numpy as np
import pandas as pd

x = np.linspace(0,1, 100)
y = np.cumsum(x)

import yfinance as yf
df_kline = yf.download("AAPL", start="2021-01-01", end="2021-03-01")
df_kline.rename(columns='Open':'O','High':'H','Low':'L','Close':'C', inplace=True)

N=2
fig = make_subplots(rows=N, cols=2, 
                    shared_xaxes=True,    )# vertical_spacing=0.1

fig.add_trace(
    go.Scatter(x=x, y=y),
    row=1, col=1
)

fig.add_trace(
    go.Candlestick(
        x=df_kline.index,
        open=df_kline['O'],
        high=df_kline['H'],
        low=df_kline['L'],
        close=df_kline['C'],

    ),
    row=1, col=2,
)

fig.add_trace(
    go.Scatter(x=x, y=y),
    row=2, col=1
)

fig.add_trace(
    go.Candlestick(
        x=df_kline.index,
        open=df_kline['O'],
        high=df_kline['H'],
        low=df_kline['L'],
        close=df_kline['C'],
    ),
    row=2, col=2
)

fig.update_layout(autosize=False, height=600, width=1000, showlegend=False)

# rangeslider visible false
fig.update_layout(title='Custome subplots',
                  xaxis2=dict(rangeslider=dict(visible=False)),
                  xaxis4=dict(rangeslider=dict(visible=False)))
# yxais customize
fig.update_layout(yaxis1=dict(range=[0,10], title='test'),
                 yaxis3=dict(range=[0,10], title='test2'))
fig.show()

【讨论】:

谢谢!假设我有 20 行(所以 40 个 yaxis 元素)。写yaxis1=..., yaxis3=... 效率很低。有什么方法可以通过代码循环这些吗? 要查看此图的布局结构,请尝试以下操作以了解其设置方式。 `fig.layout' 简单地说,你可以在 dict 中创建一个配置参数来处理这个问题。 this的例子请参考我的其他回答。 你能做循环处理吗?如果我的回答对你有帮助,请采纳。 是的,任务完成。 (有时我需要几天时间来安排我询问的任务)。我会在问题的最后加上一个脚注,以防它帮助其他人。感谢您的努力和专业知识。 ?

以上是关于如何在绘图网格中的行/列上设置属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在绘图中修改网格尺寸?

在 R 中的网格中模拟二维随机游走并使用 ggplot 绘图

我应该如何更新 Matlab 中的绘图数据?

python画图的问题~

使用带有secondary_y的Seaborn + Pandas绘图时如何摆脱网格线

JS之使用Canvas绘图