R语言 为什么我的组织草图的标签中出现颜色?

qvk1mo1f  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(172)

我在R中有一个gganimate草图,我希望我的条形图的百分比显示为标签。
但由于一些奇怪的原因,我得到了看似随机的颜色,而不是我所要求的标签。

如果我运行ggplot部分而没有动画,那么它是一个烂摊子(因为它应该),但很明显,百分比显示正确。

有什么想法吗?颜色代码并不对应于我单独选择的条形的颜色。显示的代码也循环通过大约六个不同的代码,在一个不同的速率,我选择的帧速率。而当条形是相同的高度(他们增长,直到他们达到所选择的高度显示在动画),然后他们显示相同的代码,直到他们停止,它得到冻结。
代码片段:

df_new <- data.frame(index, rate, year, colour)
df_new$rate_label <- ifelse(round(df_new$rate, 1) %% 1 == 0, 
                            paste0(round(df_new$rate, 1), ".0%"), paste0(round(df_new$rate, 1), "%"))

p <- ggplot(df_new, aes(x = year, y = rate, fill = year)) +
  geom_bar(stat = "identity", position = "dodge") + 
  scale_fill_manual(values = colour) + 
  #geom_text(aes(y = rate, label = paste0(rate, "%")), vjust = -0.7) + 
  geom_shadowtext(aes(y = rate, label = rate_label),
                  bg.colour='white',
                  colour = 'black',
                  size = 9,
                  fontface = "bold",
                  vjust = -0.7,
                  alpha = 1
  ) +
  coord_cartesian(clip = 'off') +
  ggtitle("% population belonging to 'No religion', England and Wales census") +
  theme_minimal() + 
  xlab("") + ylab("") +
  theme(legend.position = "none") + 
  theme(plot.title = element_text(size = 18, face = "bold")) +
  theme(axis.text = element_text(size = 14)) +
  scale_y_continuous(limits = c(0, 45), breaks = 10*(0:4))
p

p <- p + transition_reveal(index) + view_follow(fixed_y = T)

animate(p, renderer = gifski_renderer(), nframes = 300, fps = frame_rate, height = 500, width = 800,
        end_pause = 0)

anim_save("atheism.gif")
rnmwe5a2

rnmwe5a21#

我想你可能忽略了ggplot2的一些细节,我会尽力向你描述。首先,你需要将离散值作为因子或整数输入。所以你可以在绘图前使用as.factor(),或者在美学上只使用factor()。另外,你应该考虑根据自己的意愿对百分比进行四舍五入。下面是一个例子:

set.seed(2023)
df_new <- data.frame(index=1:10, rate=runif(10), year=2001:2010, colour=1:10)
df_new$rate_label <- ifelse(round(df_new$rate, 1) %% 1 == 0, 
                            paste0(round(df_new$rate, 1), ".0%"), 
                            paste0(round(df_new$rate, 1), "%"))

该数据的gg图为:

library(ggplot2)
p <- ggplot(df_new, aes(x = factor(year), y = rate, fill = factor(colour))) +
  geom_bar(stat = "identity", position = "dodge") + 
  geom_text(aes(y = rate, label = paste0(round(rate,2), "%")), vjust = -0.7) +
  coord_cartesian(clip = 'off') +
  ggtitle("% population belonging to 'No religion', England and Wales census") +
  theme_minimal() + 
  xlab("") + ylab("") +
  theme(legend.position = "none",
        plot.title = element_text(size = 18, face = "bold"),
        axis.text = element_text(size = 14)) 
p

你可以把所有的theme元素合并到一个theme()函数中(就像我做的那样)。

并且您可以使用以下代码轻松地为绘图制作动画:

library(gganimate)
p + transition_reveal(index)

输出结果如下:

希望有帮助。

q8l4jmvw

q8l4jmvw2#

所以它的答案是here,虽然我不知道为什么修复工作。
出于某种原因,标签需要作为因素进入组织

as.factor()

我只需要加上一句:

df_new$rate_label <- as.factor(df_new$rate_label)

而且效果很好。

相关问题