在动画绘图散点图中,如何更改每帧的轴比例......但在 R 中? (采用 python 解决方案?)
In an animated plotly scatter plot, how to change the axis scale per frame... but in R? (adapt a python solution?)
我正在尝试在 R 中制作动画绘图,其中两个轴的最小值和最大值在动画过程中都会发生变化。最近有人针对 python 问了这个确切的问题,并通过使用布局更新和循环遍历“框架”解决了这个问题。
Python 解决方法:
这是 python 代码。
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()
我一直在查看 R 示例和 R plotly 对象,但我想不通...我如何将此解决方案应用于 R?
这里有一个使用 Shiny 的解决方案,但是动画不太流畅,它没有滑块,而且我对 shiny 一无所知,所以如果可以的话我宁愿避免它:https://community.plotly.com/t/what-is-the-most-performant-way-to-update-a-graph-with-new-data/639/6?u=fabern
如果它有用,我编写了我的代码以开始在 R 中重新创建示例...尽我所能get.Maybe我需要使用 plotly express 或 dash 或类似的东西吗?
library("gapminder")
library('data.table')
data(package = "gapminder")
df <- as.data.table(as.data.frame(gapminder))
df <- df[continent=='Asia' & year %in% c(1997, 2002, 2007)]
graph_animated <- plot_ly(df, x = ~gdpPercap, y = ~lifeExp, frame = ~year, size = ~pop,
type = 'scatter', color = ~continent)
最简单的方法是构建绘图,然后添加更改。您必须先构建,才能看到要修改的框架。
# build
plt <- plotly_build(graph_animated)
# modify the layout for the second frame
plt$x$frames[[2]]$layout = list(yaxis = list(range = c(0, 200)))
在那之后,您可以像想象任何其他情节一样想象它。
我正在尝试在 R 中制作动画绘图,其中两个轴的最小值和最大值在动画过程中都会发生变化。最近有人针对 python 问了这个确切的问题,并通过使用布局更新和循环遍历“框架”解决了这个问题。
Python 解决方法:
这是 python 代码。
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()
我一直在查看 R 示例和 R plotly 对象,但我想不通...我如何将此解决方案应用于 R?
这里有一个使用 Shiny 的解决方案,但是动画不太流畅,它没有滑块,而且我对 shiny 一无所知,所以如果可以的话我宁愿避免它:https://community.plotly.com/t/what-is-the-most-performant-way-to-update-a-graph-with-new-data/639/6?u=fabern
如果它有用,我编写了我的代码以开始在 R 中重新创建示例...尽我所能get.Maybe我需要使用 plotly express 或 dash 或类似的东西吗?
library("gapminder")
library('data.table')
data(package = "gapminder")
df <- as.data.table(as.data.frame(gapminder))
df <- df[continent=='Asia' & year %in% c(1997, 2002, 2007)]
graph_animated <- plot_ly(df, x = ~gdpPercap, y = ~lifeExp, frame = ~year, size = ~pop,
type = 'scatter', color = ~continent)
最简单的方法是构建绘图,然后添加更改。您必须先构建,才能看到要修改的框架。
# build
plt <- plotly_build(graph_animated)
# modify the layout for the second frame
plt$x$frames[[2]]$layout = list(yaxis = list(range = c(0, 200)))
在那之后,您可以像想象任何其他情节一样想象它。