2015-02-28 1 views
0

Я использую следующий код для построения некоторых гамма-распределений.Как масштабировать поле легенды или увеличить размер шрифта в поле легенды в R

par(mfrow=c(2, 2)) 
a = 0.5; b = 2 
curve(dgamma(x, a, b), from=0.01, to=0.2, ylab="p(x)", cex.lab=1.5) 
b = 1 
curve(dgamma(x, a, b), from=0.01, to=0.2, col=2, add=T) 
b = 0.5 
curve(dgamma(x, a, b), from=0.01, to=0.2, col=4, add=T) 
legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), cex=0.5,ft.cex=1, 
     c("a = 0.5, b = 2","a = 0.5, b = 1","a = 0.5, b = 0.5")) 

a = 1; b = 2 
curve(dgamma(x, a, b), from=0.01, to=4, ylab="p(x)", cex.lab=1.5) 
b = 1 
curve(dgamma(x, a, b), from=0.01, to=4, col=2, add=T) 
b = 0.5 
curve(dgamma(x, a, b), from=0.01, to=4, col=4, add=T) 
legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), cex=0.5, 
     c("a = 1, b = 2","a = 1, b = 1","a = 1, b = 0.5")) 

a = 2; b = 2 
curve(dgamma(x, a, b), from=0.01, to=8, ylab="p(x)", cex.lab=1.5) 
b = 1 
curve(dgamma(x, a, b), from=0.01, to=8, col=2, add=T) 
b = 0.5 
curve(dgamma(x, a, b), from=0.01, to=8, col=4, add=T) 
legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), 
     c("a = 2, b = 2","a = 2, b = 1","a = 2, b = 0.5")) 

a = 20; b = 2 
curve(dgamma(x, a, b), from=0.01, to=70, ylab="p(x)", cex.lab=1.5) 
b = 1 
curve(dgamma(x, a, b), from=0.01, to=70, col=2, add=T) 
b = 0.5 
curve(dgamma(x, a, b), from=0.01, to=70, col=4, add=T) 
legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), 
     c("a = 20, b = 5","a = 20, b = 1","a = 20, b = 0.2")) 
par(mfrow=c(1, 1)) 

Examples of Gamma distributions

Как вы можете видеть, размер окна легенды слишком велик. Я использовал cex = 0.5 для сокращения полей легенды в первых двух подграфах. Однако при сжатии ящиков трудно читать тексты. Следовательно,

Q1: Как я могу увеличить текст в поле легенды?

Другая проблема заключается в том, что по мере увеличения размера шрифта меток в верхнем левом графе он выходит за пределы поля. Следовательно,

Q2: Как увеличить левое поле, чтобы он не отрубил голову от моего ярлыка?

И, наконец, соотношение сторон странно. Следовательно,

Q3: Как настроить ширину и высоту всего графика вручную? или Есть ли способ уменьшить пробел между двумя строками подграфов?

Спасибо!

ответ

1

Для Q2 и Q3 вы можете использовать царапанию аргумент в номинальной функции, например:

par(mar=c(2,6,2,2), mfrow=c(2, 2)) 

Это устанавливает нижний, левый, верхний и правый края. Просто увеличьте левое поле (чтобы показать Y-метку) и уменьшите верхнее и нижнее поля (чтобы получить меньше пробелов).

Это не соответствует вашему Q1. Но поскольку ваши цифры будут больше, потому что у вас меньше свободного места, ваша легенда скорее всего подойдет.

+0

Да, он решил Q2 & Q3. Благодаря! Но размер шрифта по-прежнему слишком мал. – wen

1

Если вы увеличите размер шрифта, я думаю, что текст больше не будет соответствовать рамке легенды. Поэтому вам нужно настроить cex, пока вы не сможете прочитать текст. На моем экране работает скрипт ниже. Если у вас недостаточно места внутри сюжета, вы можете поставить легенду за пределы участка.

par(mar=c(2.5,5,1,1), mfrow=c(2, 2)) 
a = 0.5; b = 2 
curve(dgamma(x, a, b), from=0.01, to=0.2, ylab="p(x)", cex.lab=1.5) 
b = 1 
curve(dgamma(x, a, b), from=0.01, to=0.2, col=2, add=T) 
b = 0.5 
curve(dgamma(x, a, b), from=0.01, to=0.2, col=4, add=T) 
legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), cex=0.7, pt.cex(2), 
     c("a = 0.5, b = 2","a = 0.5, b = 1","a = 0.5, b = 0.5")) 

a = 1; b = 2 
curve(dgamma(x, a, b), from=0.01, to=4, ylab="p(x)", cex.lab=1.5) 
b = 1 
curve(dgamma(x, a, b), from=0.01, to=4, col=2, add=T) 
b = 0.5 
curve(dgamma(x, a, b), from=0.01, to=4, col=4, add=T) 
legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), cex=0.5, 
     c("a = 1, b = 2","a = 1, b = 1","a = 1, b = 0.5")) 

a = 2; b = 2 
curve(dgamma(x, a, b), from=0.01, to=8, ylab="p(x)", cex.lab=1.5) 
b = 1 
curve(dgamma(x, a, b), from=0.01, to=8, col=2, add=T) 
b = 0.5 
curve(dgamma(x, a, b), from=0.01, to=8, col=4, add=T) 
legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), 
     c("a = 2, b = 2","a = 2, b = 1","a = 2, b = 0.5")) 

a = 20; b = 2 
curve(dgamma(x, a, b), from=0.01, to=70, ylab="p(x)", cex.lab=1.5) 
b = 1 
curve(dgamma(x, a, b), from=0.01, to=70, col=2, add=T) 
b = 0.5 
curve(dgamma(x, a, b), from=0.01, to=70, col=4, add=T) 
legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), 
     c("a = 20, b = 5","a = 20, b = 1","a = 20, b = 0.2")) 
par(mfrow=c(1, 1)) 

enter image description here

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

  • Нет связанных вопросов^_^