【问题标题】:gganimate round values during transition过渡期间的 gganimate 舍入值
【发布时间】:2019-07-04 03:10:12
【问题描述】:

我想用 gganimate 包创建一个动画条形图。在每个条的顶部,我想将条的值四舍五入到零位。

考虑以下示例:

# Example data
df <- data.frame(ordering = c(rep(1:3, 2), 3:1, rep(1:3, 2)),
                 year = factor(sort(rep(2001:2005, 3))),
                 value = round(runif(15, 0, 100)),
                 group = rep(letters[1:3], 5))

# Create animated ggplot
ggp <- ggplot(df, aes(x = ordering, y = value)) +
  geom_bar(stat = "identity", aes(fill = group)) +
  transition_states(year, transition_length = 2, state_length = 0) +
  geom_text(y = df$value, label = as.integer(round(df$value)))
ggp

不幸的是,我没有设法正确地舍入这些值。有没有办法在过渡期间对值进行舍入?

【问题讨论】:

  • round(runif(15, 0, 100),0)? 不确定
  • @NelsonGon 不幸的是,这不起作用。
  • stackoverflow.com/questions/53055118/… 我认为目前没有其他选择,但您可以轻松适应这个问题的“手动”解决方案。
  • @Freguglia 感谢您的回复!另一个线程中提供的手动解决方案的问题是会缩短条形水平过渡的持续时间。在建议的线程中没有水平过渡,因此该解决方案适用于另一个线程的条形图,但不适用于我的。您知道如何保持水平过渡持续时间吗?

标签: r ggplot2 bar-chart rounding gganimate


【解决方案1】:

由于 df$value 已经通过 round() 舍入为零小数,因此您可以在设置标签时使用 as.character()。

> df$value
[1] 29 81 92 50 43 73 40 41 69 15 11 66  4 69 78
> as.character(df$value)
[1] "29" "81" "92" "50" "43" "73" "40" "41" "69" "15" "11" "66" "4"  "69" "78"

结果:

ggp <- ggplot(df, aes(x = ordering, y = value)) +
  geom_bar(stat = "identity", aes(fill = group)) +
  transition_states(year, transition_length = 2, state_length = 0) +
  geom_text(label = as.character(df$value))

【讨论】:

  • 感谢您的回答!您的解决方案的问题是这些值不反映两者之间的移动,而只是反映输入数据中定义的固定点。您知道这些值如何反映过渡运动吗?
猜你喜欢
  • 2019-04-06
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2019-07-06
  • 2018-07-15
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多