Мой сюжет состоит из трех слоев и не позволит мне изменить легенду? - PullRequest
1 голос
/ 14 февраля 2020

Поэтому я пытаюсь изменить легенду с правой стороны, чтобы она соответствовала определенной c дате. Я хочу изменить название легенды на «Даты», а красный цвет - на «0724», зеленый - на «0802», а синий - на «0815». Я пытался использовать scale_fill_discrete, но это не похоже на работу. Я не уверен, что импорт трех фреймов данных в этот график как-то связан с этим.

Это код, который я сейчас использую

ggplot(data = dataS24, aes(x = NominalKM, y = MassDefectrounded)) +
  geom_point(shape = 16, alpha = 0.7, aes(color = "#00A5FF")) +
  geom_point(data = dataS02, shape = 16, alpha = 0.7, aes(color = "#00BC59"))+
  geom_point(data = dataS15, shape = 16, alpha = 0.7, aes(color = "#FC717F"))+
guides(shape = guide_legend(order = 1))+
theme(panel.grid.major = element_blank(), 
                  panel.grid.minor = element_blank(),
                  panel.background = element_blank(),
                  axis.line = element_line(colour = "black"),
                  axis.text = element_text(size = 11, face = "bold"),
                  axis.title = element_text(size=13, face="bold"),
                  aspect.ratio = 1,
      )

Я не уверен, где интегрировать код для изменения легенды. Заранее спасибо!

Outcome Plot

Примерно так выглядят все три фрейма данных, но в них как минимум 1000 строк и больше столбцов с ненужной информацией .

#data0724
Molecular.Formula  NominalKM  MassDefectRounded
C19H14O6S2         402        0.42889912
C19H14O8S2         433        0.47350283

1 Ответ

2 голосов
/ 14 февраля 2020

Без воспроизводимого примера трудно быть в состоянии помочь вам. Лучшей практикой будет объединение трех данных и создание категориальной переменной для их разделения.

Однако, если вы хотите изменить заголовок и метки легенды, вы можете использовать scale_color_manual (вам придется использовать scale_fill_manual, только если вы передали аргумент, используя fill = в aes, здесь, когда вы используете color, необходимо scale_color_manual):

ggplot(data = dataS24, aes(x = NominalKM, y = MassDefectrounded)) +
  geom_point(shape = 16, alpha = 0.7, aes(color = "#00A5FF")) +
  geom_point(data = dataS02, shape = 16, alpha = 0.7, aes(color = "#00BC59"))+
  geom_point(data = dataS15, shape = 16, alpha = 0.7, aes(color = "#FC717F"))+
  guides(shape = guide_legend(order = 1))+
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(colour = "black"),
        axis.text = element_text(size = 11, face = "bold"),
        axis.title = element_text(size=13, face="bold"),
        aspect.ratio = 1,
  )+
  scale_color_manual(name = "Date", values = c("#00A5FF" = "0724", "#00BC59" = "0802", "#FC717F" = "0815"))

Если это не работает, рассмотрите небольшой воспроизводимый пример трех ваших информационных фреймов (прочитайте эту ссылку : Как создать великолепный воспроизводимый пример R )


Примечание: я не уверен, что эта часть действительно важна для вашего сюжета: guides(shape = guide_legend(order = 1))+..., так как все фигуры равны 16 и не установлены в aes. Но я, возможно, ошибаюсь (я не могу проверить это без примера ваших данных).


РЕДАКТИРОВАТЬ: Объединение трех кадров данных

Предполагая, что все ваши фреймы данных имеют тот же формат, что и тот, который вы предоставили в качестве примера, здесь я генерирую три случайных фрейма данных, которые имитируют вашу структуру:

data0724 = data.frame(Molecular = LETTERS[1:5],
                      Nominal = sample(100:750,5),
                      Mass = rnorm(5, mean = 1, sd = 1)) 
data0802 = data.frame(Molecular = LETTERS[6:10],
                    Nominal = sample(100:750,5),
                    Mass = rnorm(5, mean = 1, sd = 1)) 
data0815 = data.frame(Molecular = LETTERS[11:15],
                      Nominal = sample(100:750,5),
                      Mass = rnorm(5, mean = 1, sd = 1)) 

Затем, чтобы объединить их, я добавлю категорический столбец, который отобразит их имя, затем я использовал rbind, чтобы связать их:

data0724$Grp = "0724"
data0802$Grp = "0802"
data0815$Grp = "0815"

DF <- rbind(data0724,data0802,data0815)

   Molecular Nominal       Mass  Grp
1          A     623  0.8796062 0724
2          B     739  2.0128343 0724
3          C     531  0.7985419 0724
4          D     381 -1.0376825 0724
5          E     303  0.8041108 0724
6          F     244  2.2765787 0802
7          G     310  0.7750387 0802
8          H     168  0.6781074 0802
9          I     448  2.4878378 0802
10         J     576 -0.6679280 0802
11         K     296  1.2796279 0815
12         L     493  2.8778640 0815
13         M     391  0.9959393 0815
14         N     491  0.7215460 0815
15         O     354  1.4749117 0815

Итак, теперь, если вы хотите построить их, вам не нужно использовать строку для eah c dataframe, но скорее сделайте:

library(ggplot2)
ggplot(DF, aes(x = Nominal, y = Mass, color = Grp))+
  geom_point(shape = 16, alpha = 0.7)+
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(colour = "black"),
        axis.text = element_text(size = 11, face = "bold"),
        axis.title = element_text(size=13, face="bold"),
        aspect.ratio = 1,
  )+
  scale_color_manual(name = "Date", values = c("#00A5FF","#00BC59","#FC717F"))

И вы получите: enter image description here

Отвечает ли он на ваш вопрос?

...