如何在R中为3个自变量和1个因变量绘制线图

时间:2019-06-27 11:44:46

标签: r

我有一个数字数据集。 其中有3个自变量和1个因变量。

ex:变量名是a,b,c和d。 d是因变量。

data sample

在我的数据集中d = f(a,b,c)。 我想在y轴上绘制->变量d,在x轴上绘制所有其他变量。最好是线图。

请告知。

谢谢

2 个答案:

答案 0 :(得分:1)

样本数据集将大大提高您在此处获得成功的机会。有关将来如何提出更好的问题,请参见How to make a great R reproducible example

也就是说,这是一个简单的例子,可以帮助您到达目的地。首先,数据。复制此文本并将其保存为工作目录“ test.csv”。请注意,工作目录必须是默认目录,或者是您从中启动R脚本的目录,或者是您用{{1}设置的目录。 }命令。

setwd

现在有一些代码可以实现:

a,b,c,d
10,8,5,1
8,3,6,2
7,4,4,3
6,6,5,4
5,4,6,5
7,7,4,6

您可以做很多事情来使其漂亮,但这至少说明了我认为您正在尝试实现的目标。神奇之处在于library("reshape2") library("ggplot2") df <- read.csv("test.csv") df2 <- melt(df, id.vars = "d") ggplot(df2, aes(d, value, col = variable, group = variable))+ geom_line() 将数据分成可绘制的列(请查看df2),然后在ggplot中定义多个序列。

这是您的结果应为:

3-series plot example

答案 1 :(得分:1)

如果我对您的理解正确,那么有几种方法可以解决您的问题。

第一个是您尝试将每个自变量编码为图形参数:

library(tidyverse)
  tibble(a = rnorm(50),
         b = rnorm(50),
         c = rnorm(50),
         d = rnorm(50)) %>%
    ggplot(aes(y = d, x = a, size = b, color = c)) +
    geom_line() +
    theme_minimal()

enter image description here

由于该方法会导致混乱的绘图,因此第二种方法是您尝试将一些自变量分组到分位数组中,并尝试对其进行绘图。

一种可能是这样:

  library(tidyverse)
tibble(a = rnorm(50),
       b = rnorm(50),
       c = rnorm(50),
       d = rnorm(50)) %>%
  mutate(c = cut(c,breaks = c(-Inf,quantile(c))),
         b = cut(b,breaks = c(-Inf,quantile(b)))) %>%
  ggplot(aes(y = d, x = a,color = b, group = c)) +
  geom_line() +
  theme_minimal()

enter image description here

或者,由于此命令仍然很凌乱,请使用facet_wrap

tibble(a = rnorm(50),
       b = rnorm(50),
       c = rnorm(50),
       d = rnorm(50)) %>%
  mutate(c = cut(c,breaks = c(-Inf,quantile(c))),
         b = cut(b,breaks = c(-Inf,quantile(b)))) %>%
  ggplot(aes(y = d, x = a,color = b)) +
  geom_line() +
  geom_point() +
  facet_wrap(~c,drop = T) +
  theme_minimal()

enter image description here


您可以尝试的最后一种方法是melt您的数据:

library(tidyverse)
library(reshape2)
tibble(a = rnorm(50),
       b = rnorm(50),
       c = rnorm(50),
       d = rnorm(50)) %>%
  melt(id.vars = 'd') %>%
  ggplot(aes(y = d, x = value,color = variable)) +
  geom_line() +
  theme_minimal()

enter image description here

或者,再整理一下,再次使用facet_wrap

library(tidyverse)
library(reshape2)
tibble(a = rnorm(50),
       b = rnorm(50),
       c = rnorm(50),
       d = rnorm(50)) %>%
  melt(id.vars = 'd') %>%
  ggplot(aes(y = d, x = value,color = variable)) +
  geom_line() +
  theme_minimal() +
  facet_wrap(~variable)

enter image description here