我有以下数据框:
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生成一个图,这样
图中的每条线代表一个运行(即三个运行)。我尝试了以下方法:
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")
但是我得到以下信息:
我该如何解决?
答案 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")
答案 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")