使用 ggplot 2 创建李克特比例图
Create Likert scale sort of graph using ggplot 2
我有一个结构如下的数据框
structure(list(Set = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("Set2",
"Set1"), class = "factor"), Subset = c("Feminine", "Masculine",
"Neutral", "Feminine", "Masculine", "Neutral"), Genderity = c(4.47,
-3.65, 1.54, 4.13, -4.03, -0.61)), row.names = c(NA, -6L), class = "data.frame")
我想绘制一个李克特比例的图,如下所示
我正在努力在 ggplot 2 中复制它(下面是我的代码,尽管它提供了与预期相似的输出。y 轴上的空间偏离了,因为我在 x 和 y 参数中都使用了性别)。如果我将 y 参数留空就会出错
ggplot(aes(x=Genderity, y=Genderity), data=df_2, position="stack", stat="identity")+
geom_bar(stat="identity",aes(fill=Subset),position="dodge")+
coord_flip()+
geom_hline(yintercept = 0, color =c("black")) +
scale_y_continuous(breaks=seq(-5,5,1), limits=c(-5,5))+
facet_wrap(facets = .~Set, ncol = 2, nrow=1)
从我的代码中输出 ggplot
我知道我的输出非常接近我想要的,但这不是正确的方法。请帮助如何通过 ggplot 2
做到这一点
我们可以尝试解决方法:
# add a fake column
df_2$fake <-rownames(df_2)
library(ggplot2)
# we add as x the fake
ggplot(aes(x=fake, y=Genderity), data=df_2, position="stack")+
geom_bar(stat="identity",aes(fill=Subset),position="dodge")+
coord_flip()+
geom_hline(yintercept = 0, color =c("black")) +
scale_y_continuous(breaks=seq(-5,5,1), limits=c(-5,5))+
# to avoid riffle, we use the scales="free" option
facet_wrap(facets = .~Set, ncol = 2, nrow=1,scales="free")+
# last, we make blank the y axis
theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank())
而且,如果您想要 mock-up 中的订单,并且还想要 x-axis 空白,您可以试试这个:
# the reorder option:
ggplot(aes(x=reorder(fake,Genderity), y=Genderity), data=df_2, position="stack")+
geom_bar(stat="identity",aes(fill=Subset),position="dodge")+
coord_flip()+
geom_hline(yintercept = 0, color =c("black")) +
scale_y_continuous(breaks=seq(-5,5,1), limits=c(-5,5))+
facet_wrap(facets = .~Set, ncol = 2, nrow=1,scales="free")+
theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank(),
# x-axis blank:
axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank())
并且:
+ ggtitle("Conveyed gender")
会给你标题。
编辑:
要添加标签,您必须:
p <- ggplot(aes(x=reorder(fake,Genderity), y=Genderity), data=df_2, position="stack")+
geom_bar(stat="identity",aes(fill=Subset),position="dodge")+
coord_flip()+
geom_hline(yintercept = 0, color =c("black")) +
scale_y_continuous(breaks=seq(-5,5,1), limits=c(-5,5))+
facet_wrap(facets = .~Set, ncol = 2, nrow=1,scales="free")+
theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank(),
# x-axis blank:
axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank())
p <- p + ggtitle("Conveyed gender") + geom_text(aes(label=Genderity), hjust=1)
p
或者您也可以使用:
+ geom_text(aes(label = Genderity), position = position_dodge(0.9))
这似乎是将 Subset
字符串转换为因子的好地方,这样您就可以按需要对其进行排序。请注意,在定义映射时,我使用 fct_rev
将女性栏置于顶部,与按顺序显示因素的图例对齐。
df_2_mod <- df_2 %>%
mutate(Subset = fct_relevel(Subset, "Feminine", "Neutral", "Masculine"))
ggplot(df_2_mod,
aes(x=Subset %>% fct_rev(), y=Genderity, fill = Subset))+
geom_col()+ # geom_col uses values by default, vs. counts for geom_bar
coord_flip()+
geom_hline(yintercept = 0, color =c("black")) +
facet_wrap(facets = .~Set, nrow=1) +
labs(x="")
我有一个结构如下的数据框
structure(list(Set = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("Set2",
"Set1"), class = "factor"), Subset = c("Feminine", "Masculine",
"Neutral", "Feminine", "Masculine", "Neutral"), Genderity = c(4.47,
-3.65, 1.54, 4.13, -4.03, -0.61)), row.names = c(NA, -6L), class = "data.frame")
我想绘制一个李克特比例的图,如下所示
我正在努力在 ggplot 2 中复制它(下面是我的代码,尽管它提供了与预期相似的输出。y 轴上的空间偏离了,因为我在 x 和 y 参数中都使用了性别)。如果我将 y 参数留空就会出错
ggplot(aes(x=Genderity, y=Genderity), data=df_2, position="stack", stat="identity")+
geom_bar(stat="identity",aes(fill=Subset),position="dodge")+
coord_flip()+
geom_hline(yintercept = 0, color =c("black")) +
scale_y_continuous(breaks=seq(-5,5,1), limits=c(-5,5))+
facet_wrap(facets = .~Set, ncol = 2, nrow=1)
从我的代码中输出 ggplot
我知道我的输出非常接近我想要的,但这不是正确的方法。请帮助如何通过 ggplot 2
做到这一点我们可以尝试解决方法:
# add a fake column
df_2$fake <-rownames(df_2)
library(ggplot2)
# we add as x the fake
ggplot(aes(x=fake, y=Genderity), data=df_2, position="stack")+
geom_bar(stat="identity",aes(fill=Subset),position="dodge")+
coord_flip()+
geom_hline(yintercept = 0, color =c("black")) +
scale_y_continuous(breaks=seq(-5,5,1), limits=c(-5,5))+
# to avoid riffle, we use the scales="free" option
facet_wrap(facets = .~Set, ncol = 2, nrow=1,scales="free")+
# last, we make blank the y axis
theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank())
而且,如果您想要 mock-up 中的订单,并且还想要 x-axis 空白,您可以试试这个:
# the reorder option:
ggplot(aes(x=reorder(fake,Genderity), y=Genderity), data=df_2, position="stack")+
geom_bar(stat="identity",aes(fill=Subset),position="dodge")+
coord_flip()+
geom_hline(yintercept = 0, color =c("black")) +
scale_y_continuous(breaks=seq(-5,5,1), limits=c(-5,5))+
facet_wrap(facets = .~Set, ncol = 2, nrow=1,scales="free")+
theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank(),
# x-axis blank:
axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank())
并且:
+ ggtitle("Conveyed gender")
会给你标题。
编辑:
要添加标签,您必须:
p <- ggplot(aes(x=reorder(fake,Genderity), y=Genderity), data=df_2, position="stack")+
geom_bar(stat="identity",aes(fill=Subset),position="dodge")+
coord_flip()+
geom_hline(yintercept = 0, color =c("black")) +
scale_y_continuous(breaks=seq(-5,5,1), limits=c(-5,5))+
facet_wrap(facets = .~Set, ncol = 2, nrow=1,scales="free")+
theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank(),
# x-axis blank:
axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank())
p <- p + ggtitle("Conveyed gender") + geom_text(aes(label=Genderity), hjust=1)
p
或者您也可以使用:
+ geom_text(aes(label = Genderity), position = position_dodge(0.9))
这似乎是将 Subset
字符串转换为因子的好地方,这样您就可以按需要对其进行排序。请注意,在定义映射时,我使用 fct_rev
将女性栏置于顶部,与按顺序显示因素的图例对齐。
df_2_mod <- df_2 %>%
mutate(Subset = fct_relevel(Subset, "Feminine", "Neutral", "Masculine"))
ggplot(df_2_mod,
aes(x=Subset %>% fct_rev(), y=Genderity, fill = Subset))+
geom_col()+ # geom_col uses values by default, vs. counts for geom_bar
coord_flip()+
geom_hline(yintercept = 0, color =c("black")) +
facet_wrap(facets = .~Set, nrow=1) +
labs(x="")