R 使用gganimate将过渡数据放置在堆叠的条形图上
我试图在R中重新创建,但我无法将转换数据显示在红色的堆叠条中。我也不知道如何用另一种颜色显示值减小的条,如链接的图形 下面是一个示例代码:R 使用gganimate将过渡数据放置在堆叠的条形图上,r,ggplot2,gganimate,R,Ggplot2,Gganimate,我试图在R中重新创建,但我无法将转换数据显示在红色的堆叠条中。我也不知道如何用另一种颜色显示值减小的条,如链接的图形 下面是一个示例代码: df <- data.frame(group=c("A","B","C"), values=c(31,2,4,25,6,7,20,9,10,15,12,13,10,15,16,5,18,19), frame=c(rep('a',3), rep('b',3),
df <- data.frame(group=c("A","B","C"), values=c(31,2,4,25,6,7,20,9,10,15,12,13,10,15,16,5,18,19),
frame=c(rep('a',3), rep('b',3), rep('c',3), rep('d',3), rep('e',3), rep('f',3)))
ggplot(df, aes(x=group, y=values, fill=group)) +
coord_flip() +
geom_bar(stat = 'identity') +
geom_text(aes(label = values), vjust = -0.3, size = 3.5) +
transition_manual(frame) +
theme(legend.position = "none")
df在我看来,您的数据(df)中缺少了堆叠条形图的信息。我创建了一列frac
,其中包含值的乘数。在这个简单的示例中,我们将绘制一个堆叠条形图,其中每个组都有一个条形图,其中值和值*frac是堆叠的。这就是你想要的吗
library(ggplot2)
library(gganimate)
library(dplyr)
library(tidyr)
df <- data.frame(group=c("A","B","C"),
values= c(31,2,4,25,6,7,20,9,10,15,12,13,10,15,16,5,18,19),
frac = c(1, 1, 1, 1.1, 0.9, 0.8, 1.2, 0.8, 0.7, 1.2, 0.7, 0.6, 1.3, 0.6, 0.5, 1.4, 0.5, 0.4),
frame=c(rep('a',3), rep('b',3), rep('c',3), rep('d',3), rep('e',3), rep('f',3)))
df <- df %>%
mutate(values2 = values * frac) %>%
pivot_longer(cols = contains("values"),
names_to = "values",
values_to = "data")
ggplot(df, aes(x = group, y = data)) +
coord_flip() +
geom_col(aes(fill = values)) +
geom_text(aes(label = values), vjust = -0.3, size = 3.5) +
transition_manual(frame) +
theme(legend.position = "none")
库(ggplot2)
库(gganimate)
图书馆(dplyr)
图书馆(tidyr)
df%
pivot_longer(cols=包含(“值”),
name_to=“values”,
值_to=“数据”)
ggplot(df,aes(x=组,y=数据))+
coord_flip()+
几何坐标(aes(填充=值))+
几何图形文本(aes(标签=值),vjust=-0.3,大小=3.5)+
过渡_手册(框架)+
主题(legend.position=“无”)
在我看来,您的数据(df)中缺少堆叠条形图的信息。我创建了一列frac
,其中包含值的乘数。在这个简单的示例中,我们将绘制一个堆叠条形图,其中每个组都有一个条形图,其中值和值*frac是堆叠的。这就是你想要的吗
library(ggplot2)
library(gganimate)
library(dplyr)
library(tidyr)
df <- data.frame(group=c("A","B","C"),
values= c(31,2,4,25,6,7,20,9,10,15,12,13,10,15,16,5,18,19),
frac = c(1, 1, 1, 1.1, 0.9, 0.8, 1.2, 0.8, 0.7, 1.2, 0.7, 0.6, 1.3, 0.6, 0.5, 1.4, 0.5, 0.4),
frame=c(rep('a',3), rep('b',3), rep('c',3), rep('d',3), rep('e',3), rep('f',3)))
df <- df %>%
mutate(values2 = values * frac) %>%
pivot_longer(cols = contains("values"),
names_to = "values",
values_to = "data")
ggplot(df, aes(x = group, y = data)) +
coord_flip() +
geom_col(aes(fill = values)) +
geom_text(aes(label = values), vjust = -0.3, size = 3.5) +
transition_manual(frame) +
theme(legend.position = "none")
库(ggplot2)
库(gganimate)
图书馆(dplyr)
图书馆(tidyr)
df%
pivot_longer(cols=包含(“值”),
name_to=“values”,
值_to=“数据”)
ggplot(df,aes(x=组,y=数据))+
coord_flip()+
几何坐标(aes(填充=值))+
几何图形文本(aes(标签=值),vjust=-0.3,大小=3.5)+
过渡_手册(框架)+
主题(legend.position=“无”)
有几种方法可以获得这种动画。使用两个geom\u col
层来实现所需的结果,而不是使用某种堆叠条形图
第一个geom_col
绘制随时间变化的值,其中填充基于值相对于基准值是增加还是减少。第二个geom_col
绘制随时间变化的值,其中填充基于值相对于基准值是增加还是减少
seocndgeom\u col
仅绘制基本值
,在这种情况下,我使用alpha
aes根据值相对于基本值是增加还是减少来获得透明度
库(ggplot2)
库(gganimate)
图书馆(dplyr)
df%
变异(基=值[帧==“a”],
差异=值-基准)%>%
解组()
ggplot(df1,aes(x=组))+
coord_flip()+
geom_col(aes(y=值,fill=diff>0),position=“identity”)+
geom_col(aes(y=base,alpha=diff>0),fill=“blue”,position=“identity”)+
刻度填充手动(数值=c(“蓝色”、“红色”))+
比例α手动(值=c(“真”=1,“假”=0.2))+
几何图形文本(aes(y=值,标签=值),vjust=-0.3,大小=3.5)+
过渡_手册(框架)+
主题(legend.position=“无”)
#>调整N帧和fps以匹配过渡
有几种方法可以获得这种动画。使用两个geom\u col
层来实现所需的结果,而不是使用某种堆叠条形图
第一个geom_col
绘制随时间变化的值,其中填充基于值相对于基准值是增加还是减少。第二个geom_col
绘制随时间变化的值,其中填充基于值相对于基准值是增加还是减少
seocndgeom\u col
仅绘制基本值
,在这种情况下,我使用alpha
aes根据值相对于基本值是增加还是减少来获得透明度
库(ggplot2)
库(gganimate)
图书馆(dplyr)
df%
变异(基=值[帧==“a”],
差异=值-基准)%>%
解组()
ggplot(df1,aes(x=组))+
coord_flip()+
geom_col(aes(y=值,fill=diff>0),position=“identity”)+
geom_col(aes(y=base,alpha=diff>0),fill=“blue”,position=“identity”)+
刻度填充手动(数值=c(“蓝色”、“红色”))+
比例α手动(值=c(“真”=1,“假”=0.2))+
几何图形文本(aes(y=值,标签=值),vjust=-0.3,大小=3.5)+
过渡_手册(框架)+
主题(legend.position=“无”)
#>调整N帧和fps以匹配过渡
非常感谢,这正是我想要的。我不知道有人能定义两个不同的几何体。非常好的解决方案。非常感谢,这就是我想要的。我不知道有人能定义两个不同的几何体。非常好的解决方案。非常感谢您的回答。虽然Stefan的答案更接近我想要的,但这种方法也很有效。非常感谢你的回答。虽然Stefan的答案更接近我想要的,但这种方法也很有效。