Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从数据框的列中指定图例颜色和标签_R_Ggplot2_Legend - Fatal编程技术网

R 从数据框的列中指定图例颜色和标签

R 从数据框的列中指定图例颜色和标签,r,ggplot2,legend,R,Ggplot2,Legend,我有一个整洁的数据框架。我想用它通过geom_线绘制线。每行应具有的颜色在数据框的一列中指定。每行应具有的标签在另一列(也是组列)中指定。对于这样的数据帧,指定具有正确颜色和标签的图例的绘图的最有效和最不容易出错的方法是什么 下面是一个简单的例子,可以满足我的要求: library(dplyr) library(ggplot2) data(iris) iris %>% mutate( color = recode( Species, setosa =

我有一个整洁的数据框架。我想用它通过geom_线绘制线。每行应具有的颜色在数据框的一列中指定。每行应具有的标签在另一列(也是组列)中指定。对于这样的数据帧,指定具有正确颜色和标签的图例的绘图的最有效和最不容易出错的方法是什么

下面是一个简单的例子,可以满足我的要求:

library(dplyr)
library(ggplot2)
data(iris)
iris %>%
  mutate(
    color = recode(
      Species, 
      setosa = "red", versicolor = "green", virginica = "blue")
  ) %>%

  ggplot(aes(Sepal.Length, Sepal.Width, group = Species, color = Species)) +
  geom_line() + 
  scale_color_manual(
    values = c(setosa = "red", versicolor = "green", virginica = "blue")
  )
我对这种方法的疑虑是双重的。首先,图例根本没有在颜色列中绘制颜色。其次,因为它不是在“颜色”列上绘制的,所以我必须在代码块末尾的“值”参数中再次指定颜色,这样做会增加重新指定颜色时出错的可能性

当然,我可以使用这种方法的修改版本,其中我不创建颜色列。然后我将只指定一次颜色。但我更愿意用另一种方式:将颜色指定为一列,如果必须使用,则从该列手动绘制“缩放颜色” 比例\颜色\所有手册。有办法做到这一点吗

在a中,Pawel Chabros演示了如何使用wrapr包中的点管道操作符%.>%来执行类似的操作。但我不想使用这个操作符,因为我不喜欢它的副作用。它在全局环境中创建一个新对象。除了搜索SO外,我还阅读了,但它也没有直接回答这个问题。

你只是在寻找比例、颜色、身份吗?这将获取列中颜色的名称,并将其映射到颜色美学。因此,根本不需要在ggplot调用中指定颜色。但是,如果希望标签是种类而不是颜色,则需要确保指定labels参数:

图书馆弹琴 图书馆GGPLOT2 数据虹膜 虹膜%>% 变异 颜色=重新编码 种 刚毛=红色,花色=绿色,维吉尼亚=蓝色 %>% 萼片长度,萼片宽度,组=种,颜色=颜色+ 几何线+ 比例\颜色\标识名称=物种,标签=uniqueiris$物种, 指南=指南\图例
谢谢-这是一个很好的解决方案。但是,假设没有在“种类”列中指定标签。假设我创建了一个新列legendLabels。此外,我不会将包含此新列的数据框保存到对象;取而代之的是,我动态地创建它并将其导入ggplot。有没有办法让scale_color_*函数访问此列以及已传递给ggplot的其余数据?@user697473 ggplot中的+运算符不是这样工作的。没有通过管道传输的数据。这些是添加到基本图中的其他对象。如果希望能够动态创建legendLabels列并以管道方式使用它,则需要将整个ggplot调用用大括号括起来并使用。操作人员这将允许您执行label=unique.$legendLabels内部比例\颜色\标识。别忘了添加新的。运算符作为ggplot自身的第一个参数,如果您正在这样做的话。谢谢-这很有帮助。但在某些情况下,数据似乎是通过+操作符传输的。下面是一个示例:iris%>%ggplotaesPetal.Length、Petal.Width+geom_linedata=.%%>%过滤器种类==弗吉尼亚州。为什么可以将数据管道化到geom_线而不是scale_color_*函数?@user697473我猜这是因为geom从主ggplot调用继承数据,但scale对象没有。谢谢。听起来不错,它与帮助文件“几何图形线”和“缩放颜色”手册是一致的。