【问题标题】:Plotting points and lines separately in R with ggplot使用ggplot在R中分别绘制点和线
【发布时间】:2015-08-14 11:48:22
【问题描述】:

我正在尝试使用 ggplot 在 R 中绘制 2 组数据点和一条线。 我遇到的问题是传说。 从附图中可以看出,图例将线条应用于所有 3 个数据集,即使其中只有一个用线条绘制。

我已将数据融合到一个长帧中,但这仍然需要我过滤每个单独调用 geom_line() 和 geom_path() 的数据集。

我想绘制融化的数据,基于一个数据集绘制一条线,并在其余两个上绘制点,并带有完整的图例。

这是我为生成情节而编写的示例脚本:

xseq <- 1:100
x <- rnorm(n = 100, mean = 0.5, sd = 2)
x2 <- rnorm(n = 100, mean = 1, sd = 0.5)
x.lm <- lm(formula = x ~ xseq)
x.fit <- predict(x.lm, newdata = data.frame(xseq = 1:100), type = "response", se.fit = TRUE)
my_data <- data.frame(x = xseq, ypoints = x, ylines = x.fit$fit, ypoints2 = x2)

## Now try and plot it
melted_data <- melt(data = my_data, id.vars = "x")

p <- ggplot(data = melted_data, aes(x = x, y = value, color = variable, shape = variable, linetype = variable)) +
  geom_point(data = filter(melted_data, variable == "ypoints")) +
  geom_point(data = filter(melted_data, variable == "ypoints2")) +
  geom_path(data = filter(melted_data, variable == "ylines"))

pushViewport(viewport(layout = grid.layout(1, 1))) # One on top of the other
print(p, vp = viewport(layout.pos.row = 1, layout.pos.col = 1))

【问题讨论】:

标签: r ggplot2


【解决方案1】:

您可以像这样手动设置它们:

我们为第一个项目设置 linetype = "solid",为其他项目设置 "blank"(无线)。

类似地,对于第一个项目,我们不设置形状 (NA),而对于其他项目,我们将设置我们需要的任何形状(我只是将 7 和 8 放在那里作为示例)。参见例如http://www.r-bloggers.com/how-to-remember-point-shape-codes-in-r/ 帮助您根据需要选择正确的形状。

如果您对点感到满意,那么您可以使用my_shapes = c(NA,16,16),并且不需要scale_shape_manual(...)。

my_shapes = c(NA,7,8)

ggplot(data = melted_data, aes(x = x, y = value, color=variable, shape=variable )) +
   geom_path(data = filter(melted_data, variable == "ylines") ) + 
   geom_point(data = filter(melted_data, variable %in% c("ypoints", "ypoints2"))) +
   scale_colour_manual(values =  c("red", "green", "blue"),
                       guide = guide_legend(override.aes = list(
                          linetype = c("solid", "blank","blank"),
                          shape = my_shapes))) +
   scale_shape_manual(values = my_shapes)

但我很好奇是否有更自动化的方式。希望有人可以发布更好的答案。

这篇文章非常依赖这个答案:ggplot2: Different legend symbols for points and lines

【讨论】:

  • 感谢@Pekka,这正是我想要的! :-) 我也很想听听潜在的自动答案。我在某处听说有可能,但不记得出处
  • 嗨 Pekka,这不太正确,因为我无法更改情节的形状。虽然传说中说的绿点和蓝色三角形是正确的,但情节并不复杂
  • 我明白你的意思。然后我们还需要手动设置形状。我编辑了答案。幸运的是,我们可以定义一次形状向量,然后为图例和绘图使用相同的向量。
  • 在这种情况下,我将删除对我的问题的编辑 :-) 再次感谢@Pekka
猜你喜欢
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多