Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用gganimate将过渡数据放置在堆叠的条形图上_R_Ggplot2_Gganimate - Fatal编程技术网

R 使用gganimate将过渡数据放置在堆叠的条形图上

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),

我试图在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), 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
绘制随时间变化的
值,其中填充基于值相对于基准值是增加还是减少

seocnd
geom\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
绘制随时间变化的
值,其中填充基于值相对于基准值是增加还是减少

seocnd
geom\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的答案更接近我想要的,但这种方法也很有效。