Редагування міток легенди (тексту) в ggplot


120

Я витратив години на перегляд документації та на StackOverflow, але, схоже, жодне рішення не вирішило мою проблему. Під час використання ggplotя не можу отримати потрібний текст в легенді, навіть якщо він знаходиться в моєму кадрі даних. Я спробував scale_colour_manual, scale_fill_manualз різними значеннями для labels=таких як c("T999", "T888")", "cols".

Ось мій код:

T999 <- runif(10, 100, 200)
T888 <- runif(10, 200, 300)
TY <- runif(10, 20, 30)
df <- data.frame(T999, T888, TY)


ggplot(data = df, aes(x=T999, y=TY, pointtype="T999")) + 
       geom_point(size = 15, colour = "darkblue") + 
       geom_point(data = df, aes(x=T888, y=TY), colour = 'red', size = 10 ) + 
       theme(axis.text.x = element_text(size = 20), axis.title.x =element_text(size = 20),   axis.text.y = element_text(size = 20)) +
       xlab("Txxx") + ylab("TY [°C]") + labs(title="temperatures", size = 15) + 
       scale_colour_manual(labels = c("T999", "T888"), values = c("darkblue", "red")) +    theme(legend.position="topright")

Допомога буде дуже вдячна!


8
Подивіться на цьому уроці , щоб дізнатися, який формат даних ggplotє найщасливішим (довго, не в ширину), і отримати відчуття різниці між відображенням в aesтетического змінної в aesвиклику, проти установки його зовні aes. Необхідно ввести meltсвої дані у довгий формат і зіставити colour(або fill) aesвідповідну змінну.
Генрік

Відповіді:


146

Згаданий підручник @Henrik є прекрасним ресурсом для вивчення способів створення сюжетів за допомогою ggplot2пакету.

Приклад із вашими даними:

# transforming the data from wide to long
library(reshape2)
dfm <- melt(df, id = "TY")

# creating a scatterplot
ggplot(data = dfm, aes(x = TY, y = value, color = variable)) + 
  geom_point(size=5) +
  labs(title = "Temperatures\n", x = "TY [°C]", y = "Txxx", color = "Legend Title\n") +
  scale_color_manual(labels = c("T999", "T888"), values = c("blue", "red")) +
  theme_bw() +
  theme(axis.text.x = element_text(size = 14), axis.title.x = element_text(size = 16),
        axis.text.y = element_text(size = 14), axis.title.y = element_text(size = 16),
        plot.title = element_text(size = 20, face = "bold", color = "darkgreen"))

це призводить до:

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

Як згадує @ user2739472 у коментарях: Якщо ви хочете лише змінити текстові мітки легенди, а не кольори з палітри ggplot за замовчуванням, ви можете використовувати scale_color_hue(labels = c("T999", "T888"))замість них scale_color_manual().


@Sathish Як ви бачите, заголовок осі y менший від заголовка на осі x. Різні розміри використовуються для ілюстрації можливостей та наслідків. Таким чином, код, використаний у відповіді, є правильним imo.
Яап

@Sathish Додавання до мого попереднього коментаря: це, безумовно, варіант зробити так! Все залежить від того, чого ви хочете досягти ;-)
Jaap

9
Якщо ви хочете лише змінити текстові мітки легенди, а не кольори з палітри ggplot за замовчуванням, ви можете використовувати scale_color_hue(labels = c("T999", "T888"))замістьscale_color_manual()
user2739472

1
@ user2739472 Thx & true. Додамо це до моєї відповіді.
Яап

@Sathish я трохи запізнився, але виправив друкарську помилку зараз :-)
Jaap

41

Назви легенд можуть бути позначені специфічною естетикою .

Цього можна досягти за допомогою функцій guides()або labs()з ggplot2(докладніше тут і тут ). Це дозволяє додавати властивості путівника / легенди за допомогою естетичного відображення.

Ось приклад використання mtcarsнабору даних та labs():

ggplot(mtcars, aes(x=mpg, y=disp, size=hp, col=as.factor(cyl), shape=as.factor(gear))) +
  geom_point() +
  labs(x="miles per gallon", y="displacement", size="horsepower", 
       col="# of cylinders", shape="# of gears")

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

Відповідаючи на питання ОП, використовуючи guides():

# transforming the data from wide to long
require(reshape2)
dfm <- melt(df, id="TY")

# creating a scatterplot
ggplot(data = dfm, aes(x=TY, y=value, color=variable)) + 
  geom_point(size=5) +
  labs(title="Temperatures\n", x="TY [°C]", y="Txxx") +
  scale_color_manual(labels = c("T999", "T888"), values = c("blue", "red")) +
  theme_bw() +
  guides(color=guide_legend("my title"))  # add guide properties by aesthetic

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


Я не згоден з цим. Указуючи лише заголовок, простіше вказати його в аргументах scale_ ..або labs.
Яап

Я коментував ваше рішення з 15 хвилин тому, яке додало назву scale_color_manual(title="...", ...). Я бачу, ви змінили його, щоб відповідати естетиці кольорів labs(). Я пропоную своє рішення як альтернативу.
Мегатрон

На сьогодні це, здається, змінює легенду, якщо градієнт заповнення буде більш безглуздим.
Макс Кандокія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.