如何根据字符串值分配geom_point颜色

时间:2020-01-26 20:22:36

标签: r ggplot2

我正在尝试在海洋地图上绘制一些点...这是我的数据框(rik_data

location      mean_longitude     mean_latitude      
NSTR002         -63.53341          44.47846
NSTR002         -63.53341          44.47846
NSTR001         -63.52704          44.46643  
NSTR001         -63.52704          44.46643  
NSTR003         -63.50115          44.41449       
HFX014          -63.24095          44.21091
HFX014          -63.24095          44.21091
HFX023          -63.22477          44.19080
HFX0165         -63.21937          44.16828
HFX0165         -63.21937          44.16828
HFX020          -63.20010          44.12228
HFX020          -63.20010          44.12228

我想绘制这些点,以便每个以“ HFX”开头的位置都是一种颜色,而每个以“ NSTR”开头的位置都是另一种颜色。我正在将此代码用于图表。

canada = map_data("worldHires", "Canada")


p = ggplot(data = canada) +
  geom_polygon(data = canada, aes(x=long, y = lat, group = group), fill = "lightgrey") +
  coord_sf(xlim=c(-64.5,-62.8), ylim=c(42.7,45), expand = FALSE) +

#HOW TO ASSIGN COLOR BY STRINGS?
  geom_point(data = rik_data,
             mapping = aes(x = mean_longitude, 
                           y = mean_latitude), color = "black",
             size = 4, alpha = 0.5) +
  labs(colour = "Location") +
  theme(panel.background = element_rect(fill = "#add8e6"),
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),

        axis.ticks.y  = element_blank(),
        axis.ticks.x = element_blank(),

        axis.title.y =element_blank(),
        axis.title.x = element_blank(),

        axis.text.x=element_blank(),
        axis.text.y = element_blank(),

        legend.position = c(0.2, 0.2),
        legend.background = element_blank(),


        text = element_text(size = 25,
                            family = "sans"))

有人知道如何将红色分配给以“ NSTR”开头的位置,将黑色分配给以“ HFX”开头的位置吗?

1 个答案:

答案 0 :(得分:1)

您可以使用grepl在ggplot调用中创建分类(假定所有情况均为HFX或NSTR)。用以下内容替换您的geom_point语句:

geom_point(data = dd,
           mapping = aes(x = mean_longitude, 
                         y = mean_latitude, 
                         color = grepl("^HFX",location)),
           size = 4, alpha = 0.5) +
scale_color_discrete(breaks=c(0,1),labels=c("NSTR","HFX"))