我有一个关于R的问题,这里应该是错的,我想为两个不同的变量添加一个图例,一个是" Insgesamt_ALL"红色,另一个是#34; weiblich_ALL"黑色。
> data<-read.csv("DatensatzUE4_01.csv",sep=";",header=T)
> nDATA<-subset(data,data$Fach=='Wirtschaftsingenieurw.m.wirtschaftswiss.Schwerpkt.')
>
> library(ggplot2)
>
> p <- ggplot(data=nDATA,aes(x=Semester,fill=y))
+ ggtitle("GGplot")
+ xlab("Year and Semester")
+ ylab("Total of the student")
+ geom_bar(size=3,aes(y=Insgesamt_ALL,fill=Semester),stat="identity",fill="red")
+ geom_bar(size=3,aes(y=weiblich_ALL,fill=Semester),stat="identity",fill="black")
>
> p2<-p+
theme(panel.background=element_rect(fill="white"),
panel.grid.major=element_line(colour="grey",size=0.1),
plot.title=element_text(face="bold"),
axis.text=element_text(colour="black"),
axis.title.x=element_text(face="bold"),
axis.text.x=element_text(angle=90) )
>
> plot(p2)
结果:
答案 0 :(得分:1)
缺少图例的基本问题是,您应该通过将ggplot填充美学映射到变量来利用它。之后,您可以根据需要修改填充颜色。您有两个变量:Insgesamt_ALL
和weiblich_ALL
。
首先让我们构建一些模仿您实际数据集的虚假数据(参见@jlhoward评论):
(tmp_data <- data.frame(Semester = seq(1:12), Insgesamt_ALL = sample(0:3000, 12), weiblich_ALL = sample(2000:5000, 12)))
Semester Insgesamt_ALL weiblich_ALL
1 1 2264 2643
2 2 244 3742
3 3 1681 2897
4 4 1037 4342
5 5 1225 4384
6 6 478 2195
7 7 97 2948
8 8 2537 3509
9 9 1210 3892
10 10 2016 2507
11 11 2524 2415
12 12 427 4167
第一个关键点是你应该给ggplot提供一组键/值观察值,所以让我们重新整形数据集:
library(tidyr)
nDATA <- gather(tmp_data, variable, count_of_student, Insgesamt_ALL, weiblich_ALL)
我在这里使用了tidyr::gather
,但其他任何工具都可以。让我们直接绘制它:
library(ggplot2)
p <- ggplot(nDATA) + geom_bar(aes(x = Semester, y = count_of_student, fill = variable), stat = "identity")
plot(p)
您所追求的基本上是将填充比例更改为自定义颜色(黑色和红色):
fill_colors <- c("#000000", "#FF0000")
names(fill_colors) <- levels(nDATA$variable)
fill_scale <- scale_fill_manual(name = "Variable", values = fill_colors)
p + fill_scale
最后,让我们通过重新排序variable
因子的级别来切换黑色和红色填充颜色:
nDATA$variable <- relevel(nDATA$variable, ref = "weiblich_ALL")
new_fill_colors <- fill_colors
names(new_fill_colors) <- levels(nDATA$variable)
new_fill_scale <- scale_fill_manual(name = "Variable", values = new_fill_colors)
p + new_fill_scale
你现在应该走在正确的轨道上。