Переместите легенду за пределы графика влево внизу (в R)

Я использовал пакет likert и ggplot2 для создания этого графика. Теперь я хотел бы переместить легенду внизу немного влево, так как последняя часть (полностью согласен) не показана на графике. К сожалению, пока не нашел решения. Как я могу переместить/сдвинуть легенду влево?

Ссылка на график

Код:

plot(Likert_Uni_Study_Orientation_OF_V, low.color = "#007CC2", high.color = "#F7971C", neutral.color = "grey", neutral.color.ramp = "white", text.size=9) +
  theme(legend.text=element_text(size=24, margin = margin(r = 30, unit = "pt"))) + 
  theme(legend.direction = "horizontal", legend.position = "bottom") +
  theme(legend.title = element_blank()) +
  ggtitle("Uni Study Orientation – Only Fusha Learners") +
  theme(plot.title = element_text(hjust = 0.5, size =30)) + 
  theme(text = element_text(size = rel(6), color = "black"), axis.text.y = element_text(color = "black")) + 
  theme(axis.text.x = element_text(colour="black", size="30")) + 
  theme(axis.title.x = element_text(vjust=2, size=20, color = "black")) 

Спасибо за помощь!


person Steph    schedule 16.04.2020    source источник
comment
Как вы представите график? В журнале? Презентация в аудитории? Интернет-страница? Ширина графического устройства может регулироваться различными способами в зависимости от цели. Очевидный способ — увеличить аргумент width различных функций grDevices. ?Devices   -  person Edward    schedule 16.04.2020
comment
@Steph: можете попробовать это stackoverflow .com/questions/59482694/   -  person Tung    schedule 16.04.2020
comment
@ Эдвард: я представлю это в своей магистерской диссертации, то есть в файле PDF, который также будет напечатан.   -  person Steph    schedule 16.04.2020


Ответы (3)


Укажите большее значение аргумента width при сохранении в файл.

library(likert)

data(pisaitems)
items29 <- pisaitems[,substr(names(pisaitems), 1,5) == 'ST25Q']
names(items29) <- c("Magazines", "Comic books", "Fiction", 
                    "Non-fiction books", "Newspapers")
l29 <- likert(items29)

plot(l29)

введите здесь описание изображения

Обратите внимание, как обрезана легенда. Теперь отправьте график в файл и измените значение по умолчанию для width (для png это 480). Вам может понадобиться несколько попыток, пока он не покажется правильным.

png("l29.png", width=480*1.6)
plot(l29)
dev.off()

введите здесь описание изображения

Другой вариант — разместить легенду справа:

plot(l29, legend.position="right")
person Edward    schedule 16.04.2020
comment
Большое спасибо. Наконец-то я смог отобразить весь свой график! Однако команда legend.position=right не сработала. - person Steph; 16.04.2020

Дополнение к первому ответу для тех, кто также плохо знаком с R и нуждается в дополнительных пояснениях.

Это были мои шаги:

  1. Я запустил код в R. Первая строка содержит измененную ширину (и высоту). Во второй строке я ставлю сюжет со всеми остальными функциями. Третья строка содержит dev.off(). Этот код сохраняет график в формате .png в папку на ноутбуке.
png("Likert_Uni_Study_Orientation_OF_V.png", width=990*2, height=800)
plot("Likert_Uni_Study_Orientation_OF_V, low.color = "#007CC2", high.color = "#F7971C", neutral.color = "grey", neutral.color.ramp = "white", text.size=10) +
  theme(legend.text=element_text(size=28, margin = margin(r = 30, unit = "pt"))) + 
  theme(legend.direction = "horizontal",legend.position = "bottom") +
  theme(legend.title = element_blank()) + 
  ggtitle("Uni Study Orientation – Only Fusha Learners") +
  theme(plot.title = element_text(hjust = 0.5, size =40)) +
  theme(text = element_text(size = rel(7.5), color = "black"), axis.text.y = element_text(color = "black")) +
  theme(axis.text.x = element_text(colour="black", size="30")) +
  theme(axis.title.x = element_text(vjust=2, size=20, color = "black"")
dev.off()
  1. Я должен был выяснить, где R сохранил мой сюжет. Для этого я использовал только функцию поиска на своем ноутбуке. В моем случае он был сохранен в «Мой компьютер» -> «Документы».
person Steph    schedule 16.04.2020
comment
Вы также можете изменить аргумент res, чтобы управлять разрешением графика. По умолчанию используется разрешение 72 dpi, что часто слишком мало для печати. Более высокие значения увеличивают резкость. Для большинства журналов требуется минимум 300. - person Edward; 17.04.2020
comment
Вы можете указать расположение файла в функции png. Например png("D:/My Thesis/Plots/Likert.png", width=..., height=..., res=...) - person Edward; 17.04.2020

Вы можете использовать cowplot, как описано здесь Центрировать легенду в ggplot2 относительно изображения

(ссылка предоставлена ​​@steph в комментариях)

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

a= plot(l29)   
library (cowplot)

p1_legend <- get_legend(a+ theme(legend.position = 'right'))
plot_grid(a + theme(legend.position = 'none'), p1_legend,
      nrow = 2, rel_heights = c(1, 1))
person Julien Colomb    schedule 23.09.2020