2013-11-25 2 views
2

Вот мой код; в основном я помещаю четыре графика на одно и то же устройство и помещаю на них легенду. [edit: Я работаю с RStudio]R как сделать положение легенды независимо от размера графа

dev.new() 
par(mfrow=c(2,2), oma=c(0,0,2,0)) 

#plot1 
plot(parameters...) 
par(new=TRUE) 
plot(parameters, col="red") 
legend("bottomright", c("seed match", "background"), bty="n", lty=c(1,1), 
    col=c("red","black"), cex=0.8, inset=0) 

#plot2 
plot(parameters...) 
par(new=TRUE) 
plot(parameters..., col="red") 
legend("bottomright", c("seed match", "background"), bty="n", lty=c(1,1), 
    col=c("red","black"), cex=0.8,inset=0) 

#etc. same for plot2 and plot 3 

title("bla bla bla", outer=TRUE) 

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

(2) Объем пространства, занимаемого легендой, неадекватен. Я пробовал модифицировать cex =, но это только заботится о размере шрифта, общее пространство, занимаемое легендой, остается, что означает, что чем меньше шрифт, тем больше пространство между строками. Я бы хотел, чтобы легенда была немного меньше «распространена».

Иллюстрация Это выглядит вроде нормально, хотя я хотел бы, чтобы уменьшить расстояние между строками внутри легенды: before resizing

Но при изменении размера по горизонтали она не делает. Я хотел бы привязать легенду справа от графика. after resizing

+0

Вы пробовали распечатать графики снова после изменения размера выходного устройства? – Roland

+0

Geez, так что мне нужно, чтобы мое устройство вывода было точного размера, я хочу, чтобы мой график был экспортирован? Это делает его сверхпрочной работой на 11-дюймовом Mac Air ... – biohazard

+0

Нет, используйте функции (устройства), такие как 'png' или' pdf', которые позволяют указать размер. – Roland

ответ

2

(1): Поскольку ваши графики масштабируются одинаково, вы можете использовать координаты x и y для размещения легенды, а не ключевых слов. например .:

legend(x = 0.25, y = 35, c("seed match", "background"), bty="n", lty=c(1,1), col=c("red","black"), cex=0.8, inset=0) 

(2): я не знаю, если существует способ управления межстрочного интервала через легенду(), я так и не нашел. Я всегда переключаюсь на ручную генерацию легенды через mtext(), abline() и такие, когда легенда должна выглядеть очень красиво. Это больше работы, но вы получили контроль над каждым аспектом вашей легенды.

Последний комментарий: Я думаю, вы хотите, чтобы ваш график понравился не на вашем экране, а на какой-то бумаге или презентации. Я всегда создаю графы с такими устройствами, как cairo_ps(), svg() или jpeg() (jpeg только в редких случаях, потому что он растровый, а не векторный). Эти функции дают вам больше контроля над вашими графиками, чем экспорт графического устройства R. Но способ отображения графика изменяется с устройством, каждый из которых нужно настроить отдельно. Лучше сделайте это только для той, которую вы собираетесь использовать в конце.

Надеюсь, это поможет

+0

Если вам нужна растровая графика, не используйте 'jpeg', используйте' png'. – Roland

0

Вместо использования "bottomright", вы могли бы использовать legend() дважды, для каждого элемента легенды с позиции значения, которые вы выбираете, такие как

legend(x1,y1,c("seed match"), bty="n", lty=1, col="red", cex=0.8)

для первого. Таким образом вы можете выбрать свое положение индивидуально и, следовательно, контролировать расстояние между ними. Я думаю, это решит ваши два вопроса.

+0

Я опубликовал ранее принятого ответа и дал решение, которое позволяет решить проблемы с положением и интервалом ... * sad * – Ouistiti

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