r - gganimate:在标题表达式中包含除状态级别变量或框架之外的其他变量
问题描述
我想将我的数据的另一列值插入到gganimate
动画标题中。
例如,这里的状态级别变量是x
,我想添加到标题变量y
:
df <- tibble(x = 1:10, y = c('a', 'a', 'b', 'd', 'c', letters[1:5]))
df
A tibble: 10 x 2
x y
<int> <chr>
1 1 a
2 2 a
3 3 b
4 4 d
5 5 c
6 6 a
7 7 b
8 8 c
9 9 d
10 10 e
这按预期工作:
ggplot(df, aes(x, x)) +
geom_point() +
labs(title = '{closest_state}') +
transition_states(x,
transition_length = 0.1,
state_length = 0.1)
这失败了:
ggplot(df, aes(x, x)) +
geom_point() +
labs(title = '{closest_state}, another_var: {y}') +
transition_states(x,
transition_length = 0.1,
state_length = 0.1)
eval 中的错误(解析(文本 = 文本,keep.source = FALSE),envir):
找不到对象“y”
也试过这个,但y
不会改变:
ggplot(df, aes(x, x)) +
geom_point() +
labs(title = str_c('{closest_state}, another_var: ', df$y)) +
transition_states(x,
transition_length = 0.1,
state_length = 0.1)
另一种选择是映射y
为状态级别变量并使用该frame
变量而不是x
,但在我的应用程序y
中,要么是像上面那样的非必要唯一的字符变量,要么是数字变量,但又不是必要的唯一且不是-必然有序。在这种情况下gganimate
(或ggplot
?)将按照它认为合适的方式对其进行排序,从而使最终结果变得奇怪,而不是按以下顺序排序x
:
ggplot(df, aes(x, x)) +
geom_point() +
labs(title = '{frame}, another_var: {closest_state}') +
transition_states(y,
transition_length = 0.1,
state_length = 0.1)
那么如何简单地添加无序而非数字y
变量的变化值呢?
最后:这个问题在这里被问到但没有一个可重复的例子,所以没有回答,希望这个更好。
解决方案
One dirty solution would be to paste
together the variables and make a new one to use in the transition_states
:
df <- mutate(df, title_var = factor(paste(x, y, sep="-"), levels = paste(x, y, sep="-")))
# # A tibble: 6 x 3
# x y title_var
# <int> <chr> <fct>
# 1 1 a 1-a
# 2 2 a 2-a
# 3 3 b 3-b
# 4 4 d 4-d
# 5 5 c 5-c
# 6 6 a 6-a
Then we could use gsub()
in ordet to strip closest_state
from the unwanted part, like this:
gsub(pattern = "\\d+-", replacement = "", "1-a")
"a"
So:
ggplot(df, aes(x, x)) +
geom_point() +
labs(title = '{gsub(pattern = "\\d+-", replacement = "", closest_state)}') +
transition_states(title_var, transition_length = 0.1, state_length = 0.1)
推荐阅读
- docker - docker-compose 3.7 多平台配置
- assembly - 在某些情况下,MOVing and using and SUB or ADD 可以用 LEA 代替吗?
- java - 通过 apache httpclient 中的拦截器刷新访问令牌
- python - 如何在pycharm中使用pybind11创建的C++模块
- sql - Snowflake - 生成嵌套的 JSON 输出
- react-native - 如何使平面列表在 ReactNative 中不可滚动
- java - 在 Java Image I/O 中安全地丢弃 ICC 配置文件信息
- php - 将 mbstring 添加到 php7.0 但不添加到 php7.2
- c - 编写C代码时如何实现内存安全?
- python - 从 R 到 Python:突变数据帧中的 ifelse 条件