簡體   English   中英

如何在ggplot2中分隔圖例,以使其不重疊?

[英]How can I separate legends in ggplot2 so they don't overlap?

我無法弄清楚如何為geom_point和geom_line數據制作兩個單獨的圖例。 當前,我有一個圖例描述了不同線型的含義,但是當我嘗試添加圖例來描述不同點形狀的含義(藍色三角形和圓形)時,藍色圓圈會簡單地重疊線型圖例。 非常感謝任何可以幫助我為線型和點形制作兩個單獨圖例的人。 以下是我的代碼,數據和當前圖形的圖片:

這是我的數據,稱為“數據”:

           site_name                    Watershed Fish_IBI_Tool2_percent     Fish_IBI_Tool7_percent Exceptional_2_percent Poor_2_percent
1           Piersons Six Mile Creek & Schutz Lake              12.888889                     NA              42.22222              0
2         Wassermann Six Mile Creek & Schutz Lake             -17.111111                     NA              42.22222              0
3             Church Six Mile Creek & Schutz Lake                     NA                     NA                    NA             NA
4            Steiger Six Mile Creek & Schutz Lake             -35.777778                     NA              42.22222              0
5             Zumbra Six Mile Creek & Schutz Lake               2.666667                     NA              42.22222              0
6              Stone Six Mile Creek & Schutz Lake                     NA                     NA                    NA             NA
7        East Auburn Six Mile Creek & Schutz Lake             -35.333333                     NA              42.22222              0
8        West Auburn Six Mile Creek & Schutz Lake             -35.333333                     NA              42.22222              0
9             Turbid Six Mile Creek & Schutz Lake                     NA                     NA                    NA             NA
10            Schutz Six Mile Creek & Schutz Lake             -49.333333                     NA              42.22222              0
11           Brownie              Minnehaha Creek                     NA                     NA                    NA             NA
12           Calhoun              Minnehaha Creek              -6.888889                     NA              42.22222              0
13             Cedar              Minnehaha Creek               6.666667                     NA              42.22222              0
14           Harriet              Minnehaha Creek              -6.222222                     NA              42.22222              0
15          Hiawatha              Minnehaha Creek                     NA                     NA                    NA             NA
16 Lake of the Isles              Minnehaha Creek                     NA                7.50000                    NA             NA
17           Nokomis              Minnehaha Creek              -4.888889                     NA              42.22222              0
18                                Minnehaha Creek                     NA                     NA                    NA             NA
19              Taft              Minnehaha Creek                     NA                     NA                    NA             NA
20               Mud Six Mile Creek & Schutz Lake                     NA               13.61111                    NA             NA
21            Parley Six Mile Creek & Schutz Lake                     NA               45.83333                    NA             NA
   Degraded_2_percent Exceptional_4_percent Poor_4_percent Degraded_4_percent Poor_7_percent Degraded_7_percent
1           -51.11111                    NA             NA                 NA             NA                 NA
2           -51.11111                    NA             NA                 NA             NA                 NA
3                  NA              55.26316              0          -76.31579             NA                 NA
4           -51.11111                    NA             NA                 NA             NA                 NA
5           -51.11111                    NA             NA                 NA             NA                 NA
6                  NA              55.26316              0          -76.31579             NA                 NA
7           -51.11111                    NA             NA                 NA             NA                 NA
8           -51.11111                    NA             NA                 NA             NA                 NA
9                  NA              55.26316              0          -76.31579             NA                 NA
10          -51.11111                    NA             NA                 NA             NA                 NA
11                 NA              55.26316              0          -76.31579             NA                 NA
12          -51.11111                    NA             NA                 NA             NA                 NA
13          -51.11111                    NA             NA                 NA             NA                 NA
14          -51.11111                    NA             NA                 NA             NA                 NA
15                 NA              55.26316              0          -76.31579             NA                 NA
16                 NA                    NA             NA                 NA              0          -52.77778
17          -51.11111                    NA             NA                 NA             NA                 NA
18                 NA                    NA             NA                 NA              0          -52.77778
19                 NA              55.26316              0          -76.31579             NA                 NA
20                 NA                    NA             NA                 NA              0          -52.77778
21                 NA                    NA             NA                 NA              0          -52.77778

這是我的數據的副本:

structure(list(site_name = structure(c(10L, 13L, 18L, 14L, 12L, 
19L, 16L, 17L, 20L, 15L, 5L, 4L, 1L, 3L, 6L, 8L, 2L, 9L, 7L, 
22L, 21L), .Label = c("Cedar", "Nokomis", "Harriet", "Calhoun", 
"Brownie", "Hiawatha", "Taft", "Lake of the Isles", " ", "Piersons", 
"Kelser's Pond", "Zumbra", "Wassermann", "Steiger", "Schutz", 
"East Auburn", "West Auburn", "Church", "Stone", "Turbid", "Parley", 
"Mud"), class = "factor"), Watershed = c("Six Mile Creek & Schutz Lake", 
"Six Mile Creek & Schutz Lake", "Six Mile Creek & Schutz Lake", 
"Six Mile Creek & Schutz Lake", "Six Mile Creek & Schutz Lake", 
"Six Mile Creek & Schutz Lake", "Six Mile Creek & Schutz Lake", 
"Six Mile Creek & Schutz Lake", "Six Mile Creek & Schutz Lake", 
"Six Mile Creek & Schutz Lake", "Minnehaha Creek", "Minnehaha Creek", 
"Minnehaha Creek", "Minnehaha Creek", "Minnehaha Creek", "Minnehaha Creek", 
"Minnehaha Creek", "Minnehaha Creek", "Minnehaha Creek", "Six Mile Creek & Schutz Lake", 
"Six Mile Creek & Schutz Lake"), Fish_IBI_Tool2_percent = c(12.88888889, 
-17.11111111, NA, -35.77777778, 2.666666667, NA, -35.33333333, 
-35.33333333, NA, -49.33333333, NA, -6.888888889, 6.666666667, 
-6.222222222, NA, NA, -4.888888889, NA, NA, NA, NA), Fish_IBI_Tool7_percent = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 7.5, 
NA, NA, NA, 13.61111111, 45.83333333), Exceptional_2_percent = c(42.22222222, 
42.22222222, NA, 42.22222222, 42.22222222, NA, 42.22222222, 42.22222222, 
NA, 42.22222222, NA, 42.22222222, 42.22222222, 42.22222222, NA, 
NA, 42.22222222, NA, NA, NA, NA), Poor_2_percent = c(0L, 0L, 
NA, 0L, 0L, NA, 0L, 0L, NA, 0L, NA, 0L, 0L, 0L, NA, NA, 0L, NA, 
NA, NA, NA), Degraded_2_percent = c(-51.11111111, -51.11111111, 
NA, -51.11111111, -51.11111111, NA, -51.11111111, -51.11111111, 
NA, -51.11111111, NA, -51.11111111, -51.11111111, -51.11111111, 
NA, NA, -51.11111111, NA, NA, NA, NA), Exceptional_4_percent = c(NA, 
NA, 55.26315789, NA, NA, 55.26315789, NA, NA, 55.26315789, NA, 
55.26315789, NA, NA, NA, 55.26315789, NA, NA, NA, 55.26315789, 
NA, NA), Poor_4_percent = c(NA, NA, 0L, NA, NA, 0L, NA, NA, 0L, 
NA, 0L, NA, NA, NA, 0L, NA, NA, NA, 0L, NA, NA), Degraded_4_percent = c(NA, 
NA, -76.31578947, NA, NA, -76.31578947, NA, NA, -76.31578947, 
NA, -76.31578947, NA, NA, NA, -76.31578947, NA, NA, NA, -76.31578947, 
NA, NA), Poor_7_percent = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, 0L, NA, 0L, NA, 0L, 0L), Degraded_7_percent = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, -52.77777778, 
NA, -52.77777778, NA, -52.77777778, -52.77777778)), .Names = c("site_name", 
"Watershed", "Fish_IBI_Tool2_percent", "Fish_IBI_Tool7_percent", 
"Exceptional_2_percent", "Poor_2_percent", "Degraded_2_percent", 
"Exceptional_4_percent", "Poor_4_percent", "Degraded_4_percent", 
"Poor_7_percent", "Degraded_7_percent"), class = "data.frame", row.names = c(NA, 
-21L))

這是我的代碼:

#Import, fix up, and subset Data data.frame
Data = read.csv("Lakes_data_for_R2.csv", 
            stringsAsFactors=FALSE)
colnames(Data)[1] <- "site_name"

#Order site_name
 Data$site_name <- factor(Data$site_name, levels = c("Cedar",
                                                "Nokomis",
                                                "Harriet",
                                                "Calhoun",
                                                "Brownie",
                                                "Hiawatha",
                                                "Taft",
                                                "Lake of the Isles",
                                                " ",
                                                "Piersons",
                                                "Kelser's Pond",
                                                "Zumbra",
                                                "Wassermann",
                                                "Steiger",
                                                "Schutz",
                                                "East Auburn",
                                                "West Auburn",
                                                "Church",
                                                "Stone",
                                                "Turbid",
                                                "Parley",
                                                "Mud"))

#Load ggplot
library(ggplot2)

#Make plot
ggplot() +
  geom_point(data = Data, aes(x = site_name, y = Fish_IBI_Tool2, shape = "tool2"), size = 5, color = "blue", show_guide = TRUE) +
  geom_point(data = Data, aes(x = site_name, y = Fish_IBI_Tool7, shape = "tool7"), size = 5, color = "blue", show_guide = TRUE) +

  geom_line(data = Data, aes(x = site_name, y = Exceptional_2_percent, group = 1, linetype = "Exceptional", color = "Exceptional"), size = 1) +
  geom_line(data = Data, aes(x = site_name, y = Poor_2_percent, group = 1, linetype = "Poor", color = "Poor"), size = 1) +
  geom_line(data = Data, aes(x = site_name, y = Degraded_2_percent, group = 1, linetype = "Degraded", color = "Degraded"), size = 1) +
  geom_line(data = Data, aes(x = site_name, y = Exceptional_4_percent, group = 1, linetype = "Exceptional", color = "Exceptional"), size = 1) +
  geom_line(data = Data, aes(x = site_name, y = Poor_4_percent, group = 1, linetype = "Poor", color = "Poor"), size = 1) +
  geom_line(data = Data, aes(x = site_name, y = Degraded_4_percent, group = 1, linetype = "Degraded", color = "Degraded"), size = 1) +
  geom_line(data = Data, aes(x = site_name, y = Poor_7_percent, group = 1, linetype = "Poor", color = "Poor"), size = 1) +
  geom_line(data = Data, aes(x = site_name, y = Degraded_7_percent, group = 1, linetype = "Degraded", color = "Degraded"), size = 1) +

  scale_linetype_manual(values = c("dashed", "twodash", "solid"), breaks = c("Degraded", "Poor", "Exceptional"), name = "Legend") +
  scale_color_manual(values = c("red", "springgreen4", "red"), breaks = c("Degraded", "Poor", "Exceptional"), name = "Legend") +
  scale_shape_manual(values = c(17, 16), breaks = c("Tool 2", "Tool 7")) +

  ylab ("Fish IBI (% difference from Poor threshold)") + xlab("") +
  facet_grid(~Watershed, scale = "free", space = "free") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1, color = "black"),
    axis.text.y = element_text(color = "black"),
    panel.grid.major.x = element_blank(),
    panel.grid.major.y = element_blank(),
    panel.grid.minor = element_blank(), 
    axis.line.x = element_line(color = "black"),
    axis.line.y = element_line(color = "black"),
    panel.background = element_rect(fill = "white"),
    legend.key=element_blank(),
    legend.title = element_blank(),
    text = element_text(size=18),
    panel.spacing = unit(2, "lines"))

這是我的圖形當前的樣子:

在此處輸入圖片說明

如前所述,這里的問題是show_guide的使用。 但是,也許公平地說,如果將數據重新格式化為長而不是寬的格式,則ggplot2通常會更好地工作,從而使圖例更自然地落入數據之外:

library(tidyr)
data_long <- gather(Data, variable, value, -c(site_name, Watershed)) %>%
  separate(variable, paste0("var", 1:4), fill = "right")


ggplot(mapping = aes(x = site_name, y = value)) +
  geom_point(aes(shape = var3), data = data_long %>% filter(var1 == "Fish"),
    colour = "blue", size = 5) +
  geom_line(aes(linetype = var1, colour = var1,
    group = interaction(var1, var2)),
    data = data_long %>% filter(var1 != "Fish"), size = 1) +
  scale_linetype_manual("", values = c(Degraded = "dashed", Exceptional = "twodash",
    Poor = "solid")) +
  scale_color_manual("", values = c(Degraded = "red", Exceptional = "springgreen4",
    Poor = "red")) +
  scale_shape_manual("", values = c(Tool2 = 17, Tool7 = 16)) +

  ylab("Fish IBI (% difference from Poor threshold)") +
  xlab("") +
  facet_grid(~Watershed, scale = "free", space = "free") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1, color = "black"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), 
        panel.background = element_rect(fill = "white"),
        axis.line.x = element_line(color = "black"),
        axis.line.y = element_line(color = "black"),
        legend.key = element_blank(),
        text = element_text(size=18),
        panel.spacing = unit(2, "lines"))

樣地

暫無
暫無

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

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