2014-12-23 7 views
-3

У меня проблема с R, здесь что-то не так, я хочу добавить легенду для двух разных переменных: одна - «Insgesamt_ALL» с красным цветом, а другая «weiblich_ALL» с черным цветом.как добавить легенду в R к ggplot

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

Результат:

enter image description here

+0

Причина отсутствия легенды заключается в том, что вы фиксируете заполнение до постоянного значения с помощью 'fill =" red "и' fill = "black" '. Легенда печатается автоматически только в том случае, если вы используете заливку как эстетическую. Вы не используете 'ggplot()' так, как он предназначен для использования, и я рекомендую вам изучить его из некоторого введения. – Stibu

+0

Поместите свой код в блок кода, используя '{}'. Do * not * use '' 'для этого. – jlhoward

+0

Кроме того, вы должны предоставить свои данные, чтобы этот пример воспроизводился. Лучшим способом является публикация вывода' dput (data) '. Если набор данных очень большой, загрузите его где-нибудь и отправьте ссылку. – jlhoward

ответ

1

Основная проблема с отсутствующей легенды в том, что вы должны принять преимущество ggplot заполнить эстетическую путем сопоставления его переменной. После этого вы можете изменять цвета заливки по своему усмотрению. У вас есть 2 переменные: 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) 

enter image description here

Что вы после в основном изменения масштаба заливки пользовательских цветов (черный и красный):

fill_colors  <- c("#000000", "#FF0000") 
names(fill_colors) <- levels(nDATA$variable) 
fill_scale <- scale_fill_manual(name = "Variable", values = fill_colors) 

р + fill_scale

enter image description here

И наконец, давайте переключатель черного и красного цвета заливки переупорядочив уровни 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 

enter image description here

Вы должны быть на правильном пути, теперь.

Смежные вопросы