Вопрос по r – Общая легенда для нескольких сюжетов в R

16

Я использую R и Latex вместе, чтобы нарисовать некоторые сюжеты и пытаюсь сделать общую легенду для всех них.

У меня есть шесть отдельных участков на одной странице. Я сделал каждый график отдельно в R, а затем отобразил их на той же странице, используя \ includegraphics в Latex.

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

Код, который я пытаюсь использовать, чтобы сделать легенду

plot(1, type = "n", axes=FALSE, xlab="", ylab="")
plot_colors <- c("blue","black", "green", "orange", "pink")

legend(.6,1.3,legend = c("Fabricated Metal", "Iron and Steel", "Paper", 
"Beverages", "Tobacco"), 
       col=plot_colors, lwd=5, cex=.5, horiz = TRUE)

Но шрифт слишком маленький, и сторона поля легенды обрезана.

Если все графики используют базовые функции R, вам, возможно, будет проще поместить их все в один график в R, используяlayout. joran

Ваш Ответ

2   ответа
5

Попробуй это,

plot_colors <- c("blue","black", "green", "orange", "pink")
text <- c("Fabricated Metal", "Iron and Steel", "Paper", 
"Beverages", "Tobacco")
plot.new()
par(xpd=TRUE)
legend("center",legend = text, text.width = max(sapply(text, strwidth)),
       col=plot_colors, lwd=5, cex=1, horiz = TRUE)
par(xpd=FALSE)
это будет зависеть от размера вашего шрифта и ширины устройства. Вы можете взглянуть на легенды, которыеlattice могут производить, они могут быть немного более умными в интервале между различными ключами. (вам нужно использоватьgridBase добавить легенду в базовые сюжеты).
Приведенный выше код создает легенду, которая слишком велика - вы можете видеть только ее центр, а стороны обрезаны. Даже когда я экспортировал файл и снова открыл его, у меня не было полной легенды. user1288578
24

Простой пример того, о чем я говорил:

m <- matrix(c(1,2,3,4,5,6,7,7,7),nrow = 3,ncol = 3,byrow = TRUE)

layout(mat = m,heights = c(0.4,0.4,0.2))

for (i in 1:6){
    par(mar = c(2,2,1,1))
    plot(runif(5),runif(5),xlab = "",ylab = "")
}


plot(1, type = "n", axes=FALSE, xlab="", ylab="")
plot_colors <- c("blue","black", "green", "orange", "pink")
legend(x = "top",inset = 0,
        legend = c("Fabricated Metal", "Iron and Steel", "Paper","Beverages", "Tobacco"), 
        col=plot_colors, lwd=5, cex=.5, horiz = TRUE)

enter image description here

Вы можете добавитьpar(mar=c(0,0,0,0)) или иным образом сбросьте поля перед добавлением легенды

Похожие вопросы