有没有办法动态更改每帧的绘图动画轴比例?

Eog*_*Eog 5 python python-3.x plotly plotly-python

我有一个动画绘图散点图,它通常在 0-0.5 范围内绘制 x,y 坐标,日期/时间是帧关键。然而有时我将不得不处理异常数据点,这些数据点将远远超出这个范围。我希望图表能够动态缩放,以便点不会在屏幕外丢失。这可能吗?

def draw(x1,y1,timestamp):

    d = {
        "x1": x1_trim,
        "y1": y1_trim,
        "time": time_trim
    }
    
    df = pd.DataFrame(d)
  
    fig = px.scatter(df, x="x1", y="y1", animation_frame="time")
    fig.update_yaxes(autorange=True)
    fig.update_xaxes(autorange=True)
    fig.show()
Run Code Online (Sandbox Code Playgroud)

我尝试过将 update_x/yaxes 与自动范围一起使用,但它似乎不起作用。

ves*_*and 3

正如评论中指出的,有一种方法可以更改每帧的绘图动画轴比例。问题仍然是它的动态性如何。但是,如果我们可以说您已经进行了一些计算,可以让您知道要调整哪些帧的范围,那么yranges = {2002:[0, 200]}在帧上结合使用 dict 和 for 循环应该可以解决问题。让我们以数据集的子集px.data.gapminder为例。假设您想要调整2002下图中显示年份数据的框架的 y 轴范围:

在此输入图像描述

然后您可以包含以下代码片段,并获取下图year = 2002

yranges = {2002:[0, 200]}
for f in fig.frames:
    if int(f.name) in yranges.keys():
        f.layout.update(yaxis_range = yranges[int(f.name)])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

完整代码:

import plotly.express as px
df = px.data.gapminder()
df = df[(df['continent'] == 'Asia') & (df['year'].isin([1997, 2002, 2007]))]

scales = [2002]

fig = px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country",
           size="pop", color="continent", hover_name="country",
           log_x=True, size_max=55, range_x=[100,100000], range_y=[25,90])

yranges = {2002:[0, 200]}

for f in fig.frames:
    if int(f.name) in yranges.keys():
        f.layout.update(yaxis_range = yranges[int(f.name)])

fig.show()
Run Code Online (Sandbox Code Playgroud)