簡體   English   中英

如何使用多個變量更改ggplot中圖例的文本和標題

[英]How to change the text and title of legend in ggplot with several variables

我正在嘗試修復我的圖例文本,以便文本代表適當的符號和顏色。 但是,我有很多變量需要包含在圖例中,它們都在不同的列中。 有誰知道一種快速的方法來指示 ggplot 圖例中的顏色和符號是什么?

這是一些示例代碼

#sample data
temps = data.frame(Temperature= c(15,25,35), 
                                    Growth.Phase = c("exponential", "stationary", "death"),
                                    Carbohydrates = sample(c(3:10), 9, replace = T),
                                    Lipids = sample(c(10:25), 9, replace = T),
                   Chlorophyll = sample(c(2:15), 9),
                   DNA.RNA = sample(c(3:15), 9),
                   Protein = sample(c(5:20), 9))

temps$Shape = if_else(temps$Growth.Phase == "exponential", 21,
                      if_else(temps$Growth.Phase == "stationary", 22, 23))

#Graph code
ggplot(data = temps, aes(x = Temperature, y = "Proportions", shape = factor(Shape))) +
  geom_point(aes(y = Carbohydrates),colour = "darkred", 
             fill = "darkred", size = 3) +
  geom_line(aes(y = Carbohydrates), size = 1, col = "darkred") +
  geom_point(aes(y = Lipids), colour = "darkblue", 
             fill = "darkblue", size = 3, col ="darkblue") + 
  geom_line(aes(y = Lipids), size = 1) +
  geom_point(aes(y = Protein), colour = "violet", 
             fill = "violet", size = 3) +
  geom_line(aes(y = Protein), size = 1, col ="violet") +
  geom_point(aes(y = DNA.RNA), colour = "darkorange",
             fill = "darkorange", size = 3) +
  geom_line(aes(y = DNA.RNA), size = 1, col = "darkorange") +
  geom_point(aes(y = Chlorophyll), size = 3, colour = "darkgreen",
             fill = "darkgreen") +
  geom_line(aes(y = Chlorophyll), size = 1, col = "darkgreen") +
  labs(x = "Temperature (°C)", y = "Proportion") 

這是我得到的圖像

在此處輸入圖像描述

但正如您所看到的,它並沒有在圖例中給我正確的文字。 我希望這些符號指定它們是哪個Growth.Phase以及指定我繪制的列的顏色(即碳水化合物、蛋白質等....)。 有誰知道快速修復?

當我使用自己的數據時,這就是圖表的樣子,請注意線條通過相同的符號,並且顏色相同

在此處輸入圖像描述

為了使您的代碼更簡單並且不必在同一行重復多次,您可以將數據轉換為更長的格式,然后使用這些新變量在您的aes中為 arguments 屬性colorfillshape

然后,使用scale_color_manualscale_shape_manual ,您可以設置適當的顏色和形狀。

為了在適當的點之間添加線條,我添加了一個“rep”列,以便在您的實驗中模仿復制的表現。 否則, geom_line無法決定哪些點關聯在一起。

library(tidyr)
library(dplyr)
library(ggplot2)

temps %>% mutate(Rep = rep(1:3,each = 3)) %>% 
  pivot_longer(cols = Carbohydrates:Protein, names_to = "Type", values_to = "proportions") %>%
  ggplot(aes(x = Temperature, y = proportions))+
  geom_point(aes(fill = Type, shape = Growth.Phase, color = Type), size = 3)+
  geom_line(aes( color = Type, group =interaction(Rep, Type)))+
  scale_color_manual(values = c("darkred","darkgreen","darkorange","darkblue","violet"))+
  scale_fill_manual(values = c("darkred","darkgreen","darkorange","darkblue","violet"))+
  scale_shape_manual(values = c(23,21,22))+
  labs(x = "Temperature (°C)", y = "Proportion") 

在此處輸入圖像描述

它回答了你的問題嗎?

我不確定我的傳說是否正確。 但這個想法與@dc37 的答案相同。 您的 plot 可以使用pivot_longer大大簡化:

#sample data
temps = data.frame(Temperature= c(15,25,35), 
                   Growth.Phase = c("exponential", "stationary", "death"),
                   Carbohydrates = sample(c(3:10), 9, replace = T),
                   Lipids = sample(c(10:25), 9, replace = T),
                   Chlorophyll = sample(c(2:15), 9),
                   DNA.RNA = sample(c(3:15), 9),
                   Protein = sample(c(5:20), 9))

library(ggplot2)
library(dplyr)
library(tidyr)
library(tibble)

temps_long <- temps %>% 
  pivot_longer(-c(Temperature, Growth.Phase)) %>% 
  mutate(
    shape = case_when(
      Growth.Phase == "exponential" ~ 21,
      Growth.Phase == "stationary" ~ 22,
      TRUE ~ 23
    ),
    color = case_when(
      name == "Carbohydrates" ~ "darkred",
      name == "Lipids" ~ "darkblue",
      name == "Protein" ~ "violet",
      name == "DNA.RNA" ~ "darkorange",
      name == "Chlorophyll" ~ "darkgreen",
      TRUE ~ NA_character_
  ),
  )

# named color vector
colors <- select(temps_long, name, color) %>% 
  distinct() %>% 
  deframe()
# named shape vector
shapes <- select(temps_long, Growth.Phase, shape) %>% 
  distinct() %>% 
  deframe()

ggplot(data = temps_long, aes(x = Temperature, y = value, shape = Growth.Phase, color = name, fill = name, group = Temperature)) +
  geom_point(size = 3) +
  geom_line(size = 1) +
  scale_shape_manual(values = shapes) +
  scale_fill_manual(values = colors) +
  scale_color_manual(values = colors) +
  labs(x = "Temperature (C)", y = "Proportion", color = "XXXX") +
  guides(fill = FALSE, shape = guide_legend(override.aes = list(fill = "black")))

代表 package (v0.3.0) 於 2020 年 4 月 4 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM