如何在R中绘制不同列的数据

时间:2019-02-14 14:37:13

标签: r ggplot2 reshape

我有以下数据框:

Class   Step    1   2   3
TestMe  1       5   10  6
TestMe  2       7   11  5
TestMe  3       9   13  9
TestMe  4       11  15  10
TestMe  5       13  18  4
TestMe  6       15  20  3
TestMe  7       17  23  8
TestMe  8       19  25  11
TestMe  9       21  27  13
TestMe  10      23  30  7

我想使用R生成一个图,这样

enter image description here

图中的每条线代表一个运行(即三个运行)。我尝试了以下方法:

dataset <- dataset %>% melt(id.vars = c("Class"))

dataset <- transform(dataset, value = as.numeric(value))

YaxisTitle <- "Fitness"

pp2 <- dataset %>% ggplot(aes(x=variable, y=value, group=Class, colour=Class)) +
  geom_line() +
  scale_x_discrete(breaks = seq(0, 10, 1)) +
  labs(x = as.character(dataset$Class), y = YaxisTitle) +
  theme(text = element_text(size=10),legend.position="none")

但是我得到以下信息:

enter image description here

我该如何解决?

2 个答案:

答案 0 :(得分:2)

我一直努力并确保您的数据可重复。我不确定我的答案是否完全符合您的要求,但是从您的数据看来,这对我来说最明显。

library(tidyverse)

dataset <- tribble(
  ~Class,   ~Step,  ~"1", ~"2", ~"3",
  "TestMe",  1,       5,   10,  6,
  "TestMe",  2,       7,   11,  5,
  "TestMe",  3,       9,   13,  9,
  "TestMe",  4,       11,  15,  10,
  "TestMe",  5,       13,  18,  4,
  "TestMe",  6,       15,  20,  3,
  "TestMe",  7,       17,  23,  8,
  "TestMe",  8,       19,  25,  11,
  "TestMe",  9,       21,  27,  13,
  "TestMe",  10,      23,  30,  7,
)

YaxisTitle <- "Fitness"

dataset <- dataset %>%
  gather("1", "2", "3", key = "variable", value = "value") 

  ggplot(dataset, aes(x=Step, y=value, group=variable, colour=variable)) +
  geom_line() +
  scale_x_discrete(breaks = seq(0, 10, 1)) +
  labs(x = as.character(dataset$Class), y = YaxisTitle) +
  theme(text = element_text(size=10),legend.position="none")

enter image description here

答案 1 :(得分:1)

您的melt有问题。请参见以下示例,以重塑数据框并进行绘制。

library(tidyverse)

dataset <- read.table(text = "Class   Step    1   2   3
TestMe  1       5   10  6
TestMe  2       7   11  5
TestMe  3       9   13  9
TestMe  4       11  15  10
TestMe  5       13  18  4
TestMe  6       15  20  3
TestMe  7       17  23  8
TestMe  8       19  25  11
TestMe  9       21  27  13
TestMe  10      23  30  7",
                      header = TRUE, stringsAsFactors = FALSE)


dataset <- dataset %>% 
  gather(Variable, Value, starts_with("X"))

YaxisTitle <- "Fitness"

dataset %>% 
  ggplot(aes(x = Step, y = Value, group = Variable, colour = Variable)) +
  geom_line() +
  scale_x_discrete(breaks = seq(0, 10, 1)) +
  scale_color_manual(values = c("X1" = "Blue", "X2" = "Red", "X3" = "Gold")) +
  labs(x = as.character(dataset$Class), y = YaxisTitle) +
  theme_minimal() +
  theme(text = element_text(size=10),legend.position="none") 

enter image description here