【问题标题】:a graph with two lines, separating into different graphs based on one column values具有两条线的图形,根据一列值分成不同的图形
【发布时间】:2019-05-21 01:39:33
【问题描述】:

我有一个这种格式的数据框,但还有几百行:

dfex = data.frame(dot = c('A', 'B', 'C', 'D', 'E', 'F'), 
                  group = c('A1', 'A1', 'A1', 'A2', 'A2', 'A2'), 
                  x1 = c(1, 2, 3, 4, 5, 6), 
                  x2 = c(4, 5, 6, 1, 2, 3), 
                  y = c(1, 2, 3, 4, 5, 6))

我想根据group 中的值创建不同的图表,因此一个图表将只有 A1 组行,而另一个图表只有 A2 组行。

在每个图表上,x1-y 对和 x2-y 对应该有两条不同的线。最好我也可以列出这些行的相关性。

我熟悉 ggplot2,所以使用它会很棒。

这是一幅令人惊叹的绘画作品,可以更好地理解我的意思:

【问题讨论】:

  • 您只是在寻找刻面?
  • 我不清楚那是什么,但也许吧。浏览文档,我认为这会创建两个基于 group 类别的图表?我不确定这是否也会让我的每张图有两条线。如果您能提供一个如何与 myexdf 一起使用 facetting 的示例,那将很有帮助!
  • 您需要重塑您的数据以将所有 x 值放在一列中,而不是单独的 x1 和 x2 列。然后你可以添加facet_wrap。几个问题分别涵盖了每个步骤,一些答案here 解决了这两个问题

标签: r ggplot2


【解决方案1】:

我同意@camille,最好在绘图前将数据重新整形为长格式。

library(tidyverse)

dfex %>%
  gather(key, value, -c(dot, group, y)) %>%
  ggplot() +
  aes(value, y, color = key) + 
  geom_line() + 
  facet_wrap(.~group)

【讨论】:

  • 这几乎可以工作,但我想显示点和线。 geom_point()gather 之后似乎不起作用
  • @Liquidity 你的意思是? dfex %>% gather(key, value, -c(dot, group, y)) %>% ggplot() + aes(value, y, color = key) + geom_line() + geom_point() + facet_wrap(.~group)
  • 我想我做到了!我不知道 geom_line() 之后需要的 geom_point
【解决方案2】:

下面的代码将分为两部分。 facet_wrap 将图表分成组上的两列。由于变量存储在不同的列中,因此我创建了两行。

ggplot(dfex) +
  geom_line(mapping = aes(x = x1, y = y, color = "blue")) +
  geom_line(mapping = aes(x = x2, y = y, color = "red")) +
  facet_wrap(. ~group)

或者另外将数据收集成更整洁的格式,

gather(dfex, "xVar", "x", 3:4) %>% 
  ggplot() +
  geom_line(mapping = aes(x = x, y = y, color = xVar)) +
  facet_wrap(. ~group)

【讨论】:

  • 看看ggplot 是如何工作的:你很少想重复做基本相同的事情的几何图形,或者在你的aes 中硬编码值,而不是映射像颜色这样的美学到一个变量。您可以将数据重新整形为更适合ggplot的长格式
  • 同意,但只是使用原始数据集进行操作。将编辑帖子以收集数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
相关资源
最近更新 更多