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

24

我有一个非常简单的气泡图,如下所示。我唯一需要的是能够获取生成的 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左右,但我需要一种方法来生成轴范围的精确值。

enter image description here

有没有一种方法可以访问生成的轴范围?

4个回答

32
从plotly图中获取轴范围在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 确认了这个事实。 UPDATE 20210129: Plotly已添加 .full_figure_for_development() 方法。

.full_figure_for_development()方法提供了对Plotly.js计算的默认值的Python级别访问。此方法需要Kaleido软件包,该软件包易于安装,也用于静态图像导出。

现在你可以:
full_fig = fig.full_figure_for_development()
print(full_fig.layout.xaxis.range)

1
看起来很奇怪,如此简单的功能却不被允许,但无论如何,谢谢! - Steven Cunden
1
似乎 full_figure_for_development()FigureWidget 上失败了,出现了 AttributeError: 'FigureWidget' object has no attribute 'get' - sdbbs
谢谢。如何在子图中为每个y轴添加标签,例如在row=2中,主要和次要的y轴?谢谢。 - roudan

4

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

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.range 就是 None


1
用户需要kaleido包的答案对我没有用,而你的第二种方法却奏效了!如果您只有一个跟踪,并且只需要x轴的所有值,则更简单,使用fig.data[0]['x']将以列表形式获取它们。 - rmoret

0

我在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

缩放不会更新这些值。


0

有一种方法可以访问您的fig上的X轴,甚至在缩放后也可以。

您需要将您的fig输出为html,然后会有一个名为“xtick”的类。 enter image description here

在xtick下的那些未格式化的数据表示您的fig的x-axes

您可以使用beautiful soup或搜索来浏览html以获取它


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接