首页 > 解决方案 > R ggplot颜色编码线按数据框列

问题描述

我正在绘制一个最多绘制 51 条线的图,我希望使用 ggplot 以不同的颜色、线宽和线型绘制组中绘制的最后一条线。这里的原因是,绘制的最后一条线是某些模拟的输入模型,而所有其他线都是模拟结果。我有这个过程使用 Base R 代码,但它与许多循环非常复杂,我希望 ggplot 更简单。

下面我尝试使用 iris 数据集将问题简化为三行。

# Code the species with some colours
tmp <- iris %>% 
       mutate(Spc = as.numeric(Species)) %>% 
       mutate(Clr = if_else(Spc == 1 , "red", "grey"))

# create the plot
ggplot(tmp, aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_line(aes(group = Species, colour = Clr)) 

这里有几个问题。首先,出于兴趣,我无法让“if_else”与因子变量一起使用。我将 Species 的因子转换为数字以获得结果,我怀疑这是侥幸而不是理解。我想要一个示例,说明如何使用 dplyr 在这种类型的条件语句中使用因子或字符变量。我还玩了“case_when”,希望能够为三个物种中的每一个设置不同的颜色,但无法让它发挥作用。

其次,虽然产生的情节似乎确实有一种颜色代表“setosa”,而其他两个物种的颜色相同,但颜色不是我指定的颜色吗?我还需要整理图例,以便在两种颜色选项中显示“Setosa”和“Others”之类的内容 在此处输入图像描述

标签: rggplot2dplyr

解决方案


不确定理解这个问题,这会是你想要做的吗?

ggplot(iris, aes(Sepal.Length, Sepal.Width)) + 
    geom_line(aes(group = Species, colour = (Species == "setosa"))) +
    scale_color_discrete(labels = c("Other", "Setosa"), name = "Species")

在此处输入图像描述

或者

ggplot(iris, aes(Sepal.Length, Sepal.Width)) + 
    geom_line(aes(group = Species, colour = (Species == "setosa"))) +
    scale_color_manual(labels = c("Other", "Setosa"), name = "Species", values = c("brown", "yellow"))

在此处输入图像描述


推荐阅读