如何在 plotly plot 中获取生成的 x 轴和 y 轴范围?

How to obtain generated x-axis and y-axis range in plotly plot?

我有一个非常简单的气泡图,见下文。我唯一需要的是能够获得范围(或最小值和最大值)或生成的 x 轴和 y 轴。

trace = go.Scatter(
    x=df_test['total_points_mean'],
    y=df_test['total_points_std'],
    mode='markers',
    text=df_test['play_maker'],
    marker=dict(size=df_test['week_nunique'],
                color = df_test['week_nunique'],
                showscale=True)
)

layout = go.Layout(title='Scatter Plot')
fig = go.Figure(data=[trace],layout=layout)

从结果图中,x 轴的最小值和最大值似乎在 ~10 和 ~29 左右,但我需要一种方法来生成轴范围的精确值。

有没有办法访问生成的轴范围?

在 python 实现中无法从绘图中获取轴范围。如果您在布局中指定轴范围,则只能检索范围(但实际上并不需要它)。

因此,如果您尝试 print(fig.layout.xaxis.range),您将得到 None

如果您需要限制,那么您需要自己制作并将其应用于布局:

  1. 获取 x 值的最小值和最大值:xminxmax
  2. 用一些因素填充这些值:xlim = [xmin*.95, xmax*1.05]
  3. 更新布局:fig.update_layout(xaxis=dict(range=[xlim[0],xlim[1]]))

现在,如果您尝试 print(fig.layout.xaxis.range),您将获得坐标轴范围。

这让我很困扰,所以我不得不更深入地挖掘,credit goes to @Emmanuelle on the plotly forums 以确认这一现实。

更新 20210129:Plotly 添加了 .full_figure_for_development() 方法。

The .full_figure_for_development() method provides Python-level access to the default values computed by Plotly.js. This method requires the Kaleido package, which is easy to install and also used for static image export.

现在您可以:

full_fig = fig.full_figure_for_development()
print(full_fig.layout.xaxis.range)

如果您无法访问输入数据,但可以访问跟踪:

x_min = min(trace.x)
x_max = max(trace.x)

如果您无法访问轨迹但无法访问图形句柄,则以下应该有效(我认为这是通常情况):

x_mins = []
x_maxs = []
for trace_data in fig.data:
    x_mins.append(min(trace_data.x))
    x_maxs.append(max(trace_data.x))
x_min = min(x_mins)
x_max = max(x_maxs)

如果轴范围是自动的,我假设 fig.layout.xaxis.rangeNone

有一种方法可以在您的无花果上甚至在 zooming

之后访问 X axis

您必须将无花果输出到 html 并且会有一个名为 xtick 的 class

xtick下未格式化的数据代表x-axes of your fig

你可以用beautiful soup或者搜索缩放通过html得到那个

我在 y 轴上有类似的情况。我去了绘图数据,检查了每个绘图系列并从那里检索它。

plot_min = fig.data[0].y.min()
plot_max = fig.data[0].y.max()

for plot_series in fig.data:
    plot_series_min = plot_series.y.min()
    plot_series_max = plot_series.y.max()

    if plot_series_min < plot_min:
        plot_min = plot_series_min

    if plot_series_max > plot_max:
        plot_max = plot_series_max

缩放不会更新这些值。