Способ установки легенды вне сюжета - PullRequest
1 голос
/ 19 июня 2019

Все решения этой проблемы, которые я видел до сих пор, включают ручную настройку координат легенды так, чтобы она находилась вне графика. У меня> 100 графиков, поэтому я хочу иметь возможность повторно использовать один и тот же код для каждого из них, чтобы по умолчанию разместить легенду вне графика.

Вот два фрейма данных, один с успешными соискателями и один со всеми, кто претендовал на должность:

Id <- c(1,5,7,9,11,12,13,15,17,18)
Type <- c("Beginner", "Expert", "Intermediate", "Beginner", 
"Professional", "Expert", "Intermediate", "Professional", "Professional", 
"Expert")
Response<- c(0,1,2,2,1,2,1,2,1,1)
Successful <- data.frame(Id, Type, Response)
Successful

#   Successful
Id  Type             Response    
1   Beginner         0
5   Expert           1
7   Intermediate     2
9   Beginner         2
11  Professional     1
12  Expert           2
13  Intermediate     1
15  Professional     2
17  Professional     1
18  Expert           1

Id <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18)
Type <- c("Beginner", "Expert", "Professional", "Beginner", "Expert", 
"Expert", "Intermediate", "Expert", "Beginner", "Intermediate", 
"Professional", "Expert", "Intermediate","Intermediate", "Professional", 
"Beginner", "Professional","Expert")
Response<- c(0,2,2,1,1,0,2,0,2,0,1,2,1,1,2,2,1,1)
AllApplicants <- data.frame(Id, Type, Response)
AllApplicants

#   AllApplicants
Id  Type             Response        
1   Beginner         0
2   Expert           2
3   Professional     2
4   Beginner         1
5   Expert           1
6   Expert           0
7   Intermediate     2
8   Expert           0
9   Beginner         2
10  Intermediate     0
11  Professional     1
12  Expert           2
13  Intermediate     1
14  Intermediate     1
15  Professional     2
16  Beginner         2
17  Professional     1
18  Expert           1

Если мы подготовим график этих данных:

colors <- c("red", "orange", "green")
barplot(round(100*prop.table(table(AllApplicants$Response, 
AllApplicants$Type),2), 1),
    main="Responses of applicants", xlab="Level", ylab= "Proportion", 
    col=colors, legend.text = T)

Легенда показывает перекрытие сюжета. Я знаю, что можно задать поля графика и расположение легенды вручную:

par(mar=c(5.1,4.1,4.1,8))
legend(5,90, legend=c(0,1,2), fill=colors, xpd=T)

Однако я надеюсь сохранить легенду, которая автоматически генерируется, если я добавлю legend.text = TRUE в функцию barplot (), и сделаю так, чтобы она автоматически размещала легенду снаружи и справа от графика. Мне также нужно, чтобы он оставался там, когда я изменяю размер графика и увеличиваю его.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 20 июня 2019

Будет ли работать решение ggplot2?

library(ggplot2)

df <- as.data.frame(round(100*prop.table(table(AllApplicants$Response, AllApplicants$Type),2), 1))

ggplot(df, aes(x=Var2, y=Freq)) + 
geom_col(aes(fill=Var1)) + 
ggtitle("Responses of applicants") + 
theme(plot.title = element_text(hjust=0.5)) + 
xlab("Level") + ylab("Proportion") + 
theme(legend.title = element_blank())

pic

...