【问题标题】:How to use ggplot2 legend to denote different geoms如何使用 ggplot2 图例来表示不同的几何图形
【发布时间】:2019-03-04 04:44:39
【问题描述】:

我正在使用 ggplot2 绘制 .csv 文件中的点,该文件只是使用 x 值的列和使用 y 值的列。我对 ggplot 如何决定为什么制作传奇感到有些困惑,并且在网上没有找到任何好的例子。

我希望图例表明geom_point 是压力与应变,而我的geom_smooth 是最合适的线。

这是我的代码:

library(ggplot2)
imported = read.csv("data.csv")

Strain = imported$Strain
Stress = imported$Stress..N.m.2.
err = .0005

gg <-
  ggplot(imported, aes(x=Strain, y=Stress)) + 
  geom_point(aes(group = "Points"), shape = 79, colour = "black", size = 2, stroke = 4) + 
  geom_smooth(method = "lm", se = FALSE, color = "orange") + 
  geom_errorbarh(xmin = Strain - err, xmax = Strain + err, show.legend = TRUE) + 
  theme_gray() + ggtitle("Stress vs Strain") + 
  theme(legend.position = "top")

gg 

它正在产生以下情节: my plot

【问题讨论】:

  • 我不清楚您要达到的目标。在ggplot 中,会自动添加图例以用于特定的美学(如colourfilllinetype 等)。group 美学似乎在您的代码中没有任何用途。你能澄清你想要做什么吗?你想在传说中加入什么?最后:请通过包含示例数据使您的示例可重现。除了你之外,没有人可以访问imported
  • geom_errorbarh 中的show.legend 选项确定误差条层是否应包含在图例中的任何相关几何图形周围。例如,如果您从geom_point 代码中删除colour = "black",并添加aes(color = Strain &gt; 1),我希望您会得到点颜色的图例,并且这些图例中可能包含错误栏。由于您不包含示例数据,因此难以确认。
  • PS 顺便说一句。您正在做的事情可能非常危险:您使用的是data = imported,但随后引用了StrainStress,它们是全局变量。这不是ggplot 的方式。 data 函数参数的全部意义在于指定data.frame,其中ggplot 应查找包含您要绘制的数据的列。
  • 我想要做的是获取只是 x 和 y 坐标的数据,并得到一个图例,基本上只是说我的 geom_point 是应力与应变,而我的 geom_smooth 是最适合的线。

标签: r ggplot2


【解决方案1】:

编辑:在顶部添加了为每个几何图形创建图例的方法,通过创建虚拟映射来分离美学。

library(ggplot2)
ggplot(mtcars, aes(mpg, wt)) +
  geom_point(aes(color = "point")) +   # dummy mapping to color
  geom_smooth(method = "lm", se = FALSE, color = "orange",
               aes(linetype = "best fit")) +  # dummy mapping to linetype
  geom_errorbarh(aes(xmin = mpg - 2, xmax = mpg + 1)) +

  scale_color_manual(name = "Stress vs. Strain", values = "black") +
  scale_linetype_manual(name = "Best fit line", values = "solid")


原始答案

请注意此处图例的区别:

library(ggplot2)
ggplot(mtcars, aes(mpg, wt, color = as.character(cyl))) +
    geom_point() +
    geom_errorbarh(aes(xmin = mpg - 2, xmax = mpg + 1), 
      show.legend = TRUE)  # error bars reflected in legend

ggplot(mtcars, aes(mpg, wt, color = as.character(cyl))) +
    geom_point() +
    geom_errorbarh(aes(xmin = mpg - 2, xmax = mpg + 1), 
      show.legend = FALSE)   # error bars not shown in legend

【讨论】:

  • 我认为您可能不小心为两个代码 sn-ps 上传了相同的图,所以我重新生成了您的第一个 sn-p 的输出并上传了它。
  • 好吧,这有点帮助,但我仍然很困惑,如果我只有 x 和 y 坐标,基本上只是说我的 geom_point 是压力与应变,而我的 geom_smooth是最合适的线。
  • 我不确定是否有一种简单的方法可以做到这一点。 ggplot 中的图例用于显示美学(如颜色、大小、形状等)如何映射到变量。它们通常不用于标记单独的几何图形。也就是说,可能有一种 hacky 方法可以做到这一点。 (顺便说一句,我已经编辑了你的问题,因为这个目标在原文中没有明确。)
猜你喜欢
  • 2016-06-02
  • 2016-08-31
  • 2021-12-23
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 2021-12-22
相关资源
最近更新 更多