首页 > 解决方案 > ggplot barplot:将每个单独的令牌作为自己的条形图

问题描述

所以,我正在尝试制作如下图所示的条形图。 1

对于每个发言者(1、2 和 3),有 4 个标记(每个类别 2 个,由黄色和灰色条表示),我希望每个单独的标记都像图片中一样显示(2 个黄色条,两个灰色每个扬声器的条);现在,所有的标记都被折叠在它们各自的类别下,因此每个扬声器只有 2 个条,一个黄色和一个灰色。我怎样才能得到 4 条来表示?

这是我正在使用的代码:

ggplot(EUD, aes(x=Speaker, y=EuD, fill=Gliding)) +
geom_bar(stat="identity", position=position_dodge())+
xlab("Speaker")+
ylab("EuD")+
scale_fill_manual(values = wes_palette("Darjeeling1")) +
theme(axis.text = element_text(size = 9, family="Times"))+
theme(axis.title.x = element_text(size=9, family="Times"))+
theme(axis.title.y = element_text(size=9, family="Times"))+
theme(legend.title = element_text(size=9, family="Times"),  legend.text = 
element_text(size=9, family="Times"))

谢谢!

劳伦

这是 dput(EUD) 的输出:

structure(list(Speaker = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 4L, 4L, 4L, 4L), Token = c("HOTEL", "HOST", "NO", 
"TOAST", "SMOKED", "GHOST", "SLOW", "GOING", "COVE", "BOAT", 
"GO", "AGO", "THOSE", "WOKE", "DON\xd5T", "KNOW"), EuD = c(0.071, 
0.271, 1.476, 2.605, 0.403, 0.127, 2.235, 1.348, 0.794, 0.322, 
1.088, 1.543, 0.137, 0.129, 2.462, 1.327), Gliding = c("UNGLIDED", 
"UNGLIDED", "GLIDED", "GLIDED", "UNGLIDED", "UNGLIDED", "GLIDED", 
"GLIDED", "UNGLIDED", "UNGLIDED", "GLIDED", "GLIDED", "UNGLIDED", 
"UNGLIDED", "GLIDED", "GLIDED")), class = "data.frame", row.names = c(NA, 
-16L))

标签: rggplot2

解决方案


也许你正在寻找这个:

library(ggplot2)
library(dplyr)
#Code
EUD %>%
  group_by(Speaker) %>%
  mutate(Mytoken=paste0(Gliding,row_number())) %>%
  ggplot(aes(x=Speaker, y=EuD, fill=Mytoken)) +
  geom_bar(stat="identity",color='black',
           position=position_dodge(),alpha=0.5)+
  xlab("Speaker")+
  ylab("EuD")+
  scale_fill_manual(values = c('yellow','yellow','gray25','gray25')) +
  theme(legend.position = 'none',
        axis.text = element_text(size = 9, family="Times"))+
  theme(axis.title.x = element_text(size=9, family="Times"))+
  theme(axis.title.y = element_text(size=9, family="Times"))+
  theme(legend.title = element_text(size=9, family="Times"),
        legend.text = element_text(size=9, family="Times"))

输出:

在此处输入图像描述


推荐阅读