2017-04-03 98 views
0

我无法弄清楚如何为我的geom_point和我的geom_line数据创建两个独立的图例。目前,我有一个描述不同线型意味着什么的图例,但是当我尝试添加图例来描述不同点形状的意思(蓝色三角形和圆形)时,蓝色圆圈会简单地重叠线型图例。非常感谢任何能够帮助我为线型和点形做出两个独立传奇的人。下面是我的代码,我的数据,我的电流图的照片:如何分离ggplot2中的图例以便它们不重叠?

这里是我的数据,所谓的“数据”:

  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 

这里是我的数据的dput:

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")) 

这里就是我的图表目前的样子:

enter image description here

+2

可能你发布数据的“输入”? 'show_guide'也被弃用。你使用的是什么版本的ggplot? – Vandenman

+0

@Vandenman感谢您的快速回复!刚刚发布dput(数据)输出。让我知道这是否有帮助。 – snalven

+0

@Vandenman oops--我没有意识到show.legend和show_guide之间有区别。虽然他们似乎在这里做同样的事情......我将从现在开始使用show.legend。 – snalven

回答

0

如前所述,这里的问题是使用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")) 

Sample plot

相关问题