如何在 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
。
如果您需要限制,那么您需要自己制作并将其应用于布局:
- 获取 x 值的最小值和最大值:
xmin
、xmax
- 用一些因素填充这些值:
xlim = [xmin*.95, xmax*1.05]
- 更新布局:
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.range
是 None
。
有一种方法可以在您的无花果上甚至在 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
缩放不会更新这些值。
我有一个非常简单的气泡图,见下文。我唯一需要的是能够获得范围(或最小值和最大值)或生成的 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
。
如果您需要限制,那么您需要自己制作并将其应用于布局:
- 获取 x 值的最小值和最大值:
xmin
、xmax
- 用一些因素填充这些值:
xlim = [xmin*.95, xmax*1.05]
- 更新布局:
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.range
是 None
。
有一种方法可以在您的无花果上甚至在 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
缩放不会更新这些值。