在ggplot2中将一列用于颜色,将另一列用于图例

时间:2019-01-06 20:51:38

标签: r ggplot2 legend

我有一个带有5个变量的数据框:

head(drop(rast.df))
  Longitude Latitude Values   Color
1 -15.10068 16.68171     32 #98d604
2 -15.08271 16.68171     32 #98d604
3 -14.99288 16.68171     32 #98d604
4 -14.97492 16.68171     32 #98d604
5 -14.95695 16.68171     32 #98d604
6 -15.11865 16.66375     32 #98d604
                                                                    Main
1 Sparse Herbaceous: dominated by herbaceous annuals (<2m) 10-60% cover.
2 Sparse Herbaceous: dominated by herbaceous annuals (<2m) 10-60% cover.
3 Sparse Herbaceous: dominated by herbaceous annuals (<2m) 10-60% cover.
4 Sparse Herbaceous: dominated by herbaceous annuals (<2m) 10-60% cover.
5 Sparse Herbaceous: dominated by herbaceous annuals (<2m) 10-60% cover.
6 Sparse Herbaceous: dominated by herbaceous annuals (<2m) 10-60% cover.

我想将Color列用作颜色定义,将Main用作图例中的标签。

我尝试过

ggplot(rast.df)+
  geom_raster(aes(x = Longitude, y = Latitude, fill=as.factor(Values)))+
  scale_fill_manual(values=as.character(unique(rast.df$Color)), 
                       name="Experimental\nCondition",
                       breaks=unique(rast.df$Values),
                       labels=unique(rast.df$Main))

但是没用!

我找不到自动执行此操作的方法,我需要一个线索。 谢谢。

2 个答案:

答案 0 :(得分:1)

可复制的示例:

tibble(
  Longitude = 1:5,
  Latitude = 10:14,
  Color = c('red', 'green', 'blue', 'red', 'green'),
  Main = c('A', 'C', 'B', 'A', 'C')
) %>%
  arrange(Main) %.>%
  ggplot(., aes(
    x = Longitude,
    y = Latitude,
    color = Main
  )) +
  geom_point() +
  scale_color_manual(values = unique(.$Color))

您需要按“主要”列进行排列,以免颜色被标签弄乱。
%.>%管道来自wrapr包。

答案 1 :(得分:0)

这可能有帮助。

ggplot( ... +
        scale_color_manual(labels = Main, values = Color) +
       ...)

否则,更多的代码可能会有用。