我对我生成的以下情节有疑问。使用ggplot2命令生成两个具有相同y轴的条形图。我的问题是,我想为每个标签在两行中写出y轴的标签。而且标签不是数字也不是日期,它们是字符(我认为它们就像这样称呼)。
首先,这是原始数据集:
VS <- data.frame(X = c("sehr viel Spaß/Sehr gut", "Viel Spaß/Gut", "Normal/Neutral","wenig Spaß/schlecht",
"sehr wenig Spaß/Sehr schlecht"),
Spaß = c(4,8,10,3,3), Beurteilung = c(5,6,9,4,4), stringsAsFactors = F)
为了生成绘图,我创建了以下命令:
VS$X <- factor(VS$X, c("sehr wenig Spaß/Sehr schlecht", "wenig Spaß/schlecht", "Normal/Neutral", "Viel Spaß/Gut", "sehr viel Spaß/Sehr gut"))
library(ggplot2)
library(grid)
g.mid<-ggplot(VS,aes(x=1,y=X))+geom_text(aes(label=X))+
geom_segment(aes(x=0.94,xend=0.96,yend=X))+
geom_segment(aes(x=1.04,xend=1.065,yend=X))+
ggtitle("")+
ylab(NULL)+
scale_x_continuous(expand=c(0,0),limits=c(0.94,1.065))+
theme(axis.title=element_blank(),
panel.grid=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank(),
panel.background=element_blank(),
axis.text.x=element_text(color=NA),
axis.ticks.x=element_line(color=NA),
plot.margin = unit(c(1,-1,1,-1), "mm"))
g1 <- ggplot(data = VS, aes(x = X, y = Spaß)) +
geom_bar(stat = "identity", fill="#33FF00", colour="green") + ggtitle("Häufigkeit bei Spaß an Videoserstellung") +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
plot.margin = unit(c(1,-1,1,0), "mm")) +
scale_y_reverse() + coord_flip()
g2 <- ggplot(data = VS, aes(x = X, y = Beurteilung)) +xlab(NULL)+
geom_bar(stat = "identity", fill="#3333FF", colour="blue") + ggtitle("Häufigkeit bei Beurteilung der Software") +
theme(axis.title.x = element_blank(), axis.title.y = element_blank(),
axis.text.y = element_blank(), axis.ticks.y = element_blank(),
plot.margin = unit(c(1,0,1,-1), "mm")) +
coord_flip()
library(gridExtra)
gg1 <- ggplot_gtable(ggplot_build(g1))
gg2 <- ggplot_gtable(ggplot_build(g2))
gg.mid <- ggplot_gtable(ggplot_build(g.mid))
grid.arrange(gg1,gg.mid,gg2, ncol=3, widths=c(4/9,1/9,4/9),top=textGrob("VideoScribe Analyse", gp=gpar(fontsize=19,font=8)))
生成的图如下所示: enter image description here
就像你可能看到的那样,y轴的标签被图表切割了......无论如何它们有点长。但对于我的考试,我无法缩短它们。所以我尝试使用命令\n
将每个标签写成两行,但它不起作用。具体来说:我想用“SehrvielSpaß/ Sehr gut”来制作“SehrvielSpaß”并直接写在“Sehr gut”下面。任何人都可以给我一个提示或帮助我,我怎么能这样做?
我还尝试了一些其他的东西,比如gsub
,但是有问题,我在标签内部没有一致性或重复部分。有人可以帮忙吗?
PS:为了让y轴按此顺序排列,我创建了一个静态命令 - 就像你可能已经看过的那样。我也尝试了以下命令:VS$X <- factor(VS$X, as.character(VS$X))
,但是这样我得到错误顺序的y轴。它应该转过来,“SehrvielSpaß/ Sehr gut”位于顶部。有人可能也有这个想法吗?
答案 0 :(得分:0)
将/
替换为\n
对我有用。我怀疑你在更换和以下因素水平重新安排方面做错了。
VS <- data.frame(X = c("sehr viel Spaß/Sehr gut", "Viel Spaß/Gut",
"Normal/Neutral","wenig Spaß/schlecht",
"sehr wenig Spaß/Sehr schlecht"),
Spaß = c(4,8,10,3,3), Beurteilung = c(5,6,9,4,4),
stringsAsFactors=FALSE)
VS$X <- gsub("/", "\n", VS$X)
VS$X <- factor(VS$X, c("sehr wenig Spaß\nSehr schlecht",
"wenig Spaß\nschlecht",
"Normal\nNeutral",
"Viel Spaß\nGut",
"sehr viel Spaß\nSehr gut"))
library(ggplot2)
library(grid)
g.mid<-ggplot(VS,aes(x=1,y=X))+geom_text(aes(label=X))+
geom_segment(aes(x=0.94,xend=0.96,yend=X))+
geom_segment(aes(x=1.04,xend=1.065,yend=X))+
ggtitle("")+
ylab(NULL)+
scale_x_continuous(expand=c(0,0),limits=c(0.94,1.065))+
theme(axis.title=element_blank(),
panel.grid=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank(),
panel.background=element_blank(),
axis.text.x=element_text(color=NA),
axis.ticks.x=element_line(color=NA),
plot.margin = unit(c(1,-1,1,-1), "mm"))
g1 <- ggplot(data = VS, aes(x = X, y = Spaß)) +
geom_bar(stat = "identity", fill="#33FF00", colour="green") + ggtitle("Häufigkeit bei Spaß an Videoserstellung") +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
plot.margin = unit(c(1,-1,1,0), "mm")) +
scale_y_reverse() + coord_flip()
g2 <- ggplot(data = VS, aes(x = X, y = Beurteilung)) +xlab(NULL)+
geom_bar(stat = "identity", fill="#3333FF", colour="blue") + ggtitle("Häufigkeit bei Beurteilung der Software") +
theme(axis.title.x = element_blank(), axis.title.y = element_blank(),
axis.text.y = element_blank(), axis.ticks.y = element_blank(),
plot.margin = unit(c(1,0,1,-1), "mm")) +
coord_flip()
library(gridExtra)
gg1 <- ggplot_gtable(ggplot_build(g1))
gg2 <- ggplot_gtable(ggplot_build(g2))
gg.mid <- ggplot_gtable(ggplot_build(g.mid))
grid.arrange(gg1,gg.mid,gg2, ncol=3,
widths=c(4/9,1/9,4/9),top=textGrob("VideoScribe Analyse",