【问题标题】:Fix blurry/overlapping text when using gganimate使用 gganimate 时修复模糊/重叠的文本
【发布时间】:2018-11-01 03:28:11
【问题描述】:

我在使用gganimate 时无法创建高分辨率文件。图表中的文本模糊不清,几乎就像在为.gif 中的每个新帧编写文本一样。

这个问题有简单的解决方案吗?我尝试摆弄ani.options(),但也没有任何运气。

示例数据和代码:

value <- sample(0:30, 300, replace = TRUE)
year <- rep(c(2000, 2001, 2002), 100)

df <- as.data.frame(cbind(value, year))

library(gganimate)
library(tidyverse)

df <- df %>% group_by(year) %>% mutate(avg.value = mean(value))    

p <- df %>% 
   ggplot(aes(x = value)) + 
   geom_histogram(position = 'identity', color = "white") + 
   geom_segment(aes(xend = avg.value, x = avg.value, y = 0, yend = -.5), 
   color = "red", size = 2.5) +
   transition_states(as.factor(year), transition_length = 2, state_length 
   = 1, wrap = TRUE) + 
   annotate("text", x = df$avg.value, y = -1, label = "Average") + 
   labs(x = " ", 
   y = "", 
   title = "Example chart", 
   subtitle = "Don't it look blurry?")

animate(p, nframes = 100, renderer = gifski_renderer("example.gif"))

【问题讨论】:

  • 您使用的是geom_text吗?请加你ggplot2代码和数据示例,可能有问题。
  • 添加代码和数据示例。

标签: r ggplot2 gganimate


【解决方案1】:

annotate(或我的代码中的geom_text)提交多个相同的avg.value 值。当你每年只需要一个时,你就增加了一百个值。这导致一百个“平均值”相互绘制。
解决方案是向geom_text(即df2)提交仅包含3行(每年一个条目)的不同数据。

代码:

library(gganimate)
library(tidyverse)
value <- sample(0:30, 300, replace = TRUE)
year <- rep(c(2000, 2001, 2002), 100)

df1 <- as.data.frame(cbind(value, year))
df1 <- df1 %>% group_by(year) %>% mutate(avg.value = mean(value))    
df2 <- df1 %>% group_by(year) %>% summarize(avg.value = head(avg.value, 1))    

r1 <- ggplot(df1) + 
   geom_histogram(aes(value), position = "identity", color = "white") + 
   geom_segment(aes(x = avg.value, xend = avg.value, y = 0, yend = -0.5), 
                color = "red", size = 2.5) +
   geom_text(aes(avg.value, -1, label = "Average"), df2) + 
   transition_states(as.factor(year), 2, 1) + 
   labs(title = "Example chart", 
        subtitle = "No more blur",
        x = NULL, 
        y = NULL)
animate(r1, nframes = 100, renderer = gifski_renderer("example.gif"))

【讨论】:

  • 王牌!这肯定会清除“平均”文本。但是图表标题/副标题本身呢?它看起来不像一帧的静态图像那样清晰。这只是将其导出为 .gif 的副产品吗?或者有没有办法提高动画图像的整体分辨率
  • @henryjean 我猜这是文本的设备分辨率问题,您应该查看gganimate 分辨率设置。
  • 感谢您的帮助。我尝试过 gganimate 设置,但从未发现任何与 dpi 相关的内容。不幸的是,它似乎不像在 ggsave 中那样简单,您可以在其中设置 dpi 的值
  • 或者你可以添加check_overlap = TRUEgeom_text
猜你喜欢
  • 1970-01-01
  • 2014-12-04
  • 2013-11-28
  • 2013-03-17
  • 2018-06-07
  • 2012-08-04
  • 1970-01-01
  • 2013-07-19
  • 2019-05-18
相关资源
最近更新 更多