可能是一个简单的解决方案,但我无法弄清楚为什么会发生以下情况。
var1 <- runif(4, 1, 5)
var2 <- runif(4, 1, 5)
var3 <- runif(4, 1, 5)
time <- c(0,1,3,4)
time2 <- as.factor(c(0,1,3,4))
df <- data.frame(var1, var2, var3, time)
library(ggplot2)
ggplot(df, aes(time)) +
geom_line(aes(y = var1, colour = "var1")) +
geom_line(aes(y = var2, colour = "var2")) +
geom_line(aes(y = var3, colour = "var3"))
这给出了:
然而,重点是我所拥有的时间是:0,1,3和4.不是2.因为time
是数字(或整数),所以它也会放置&#39; 2&#39;在x轴上。出于这个原因,我将时间作为因素(或字符)并尝试使用以下代码进行绘图:
ggplot(df, aes(time2)) +
geom_line(aes(y = var1, colour = "var1")) +
geom_line(aes(y = var2, colour = "var2")) +
geom_line(aes(y = var3, colour = "var3"))
唯一的区别是time2
是一个因素。结果是一个空图,并附有以下消息:
geom_path: Each group consists of only one observation. Do you need to
adjust the group aesthetic?
如何获得与我展示的情节类似的情节,但在X轴上使用time == 0, 1, 3, 4
,而不是0,1,2,3,4?
答案 0 :(得分:1)
您无需修改数值,只需从x轴中删除“2”即可。为此,请使用函数scale_x_continuous
。
数据:
var1 <- runif(4, 1, 5)
var2 <- runif(4, 1, 5)
var3 <- runif(4, 1, 5)
time <- c(0,1,3,4)
time2 <- as.factor(c(0,1,3,4))
df <- data.frame(var1, var2, var3, time)
# Transform data from wide to long
# This will simplify plotting (3 lines of code to 1 line)
library(reshape2)
dfMelt <- melt(df, "time")
简介:
# Using scale_x_continuous we specify breaks (ie, use only existing values)
library(ggplot2)
ggplot(dfMelt, aes(time, value, color = variable)) +
geom_line() +
scale_x_continuous(breaks = unique(dfMelt$time))
然而,这是时间数据(即,它是连续的,3不能在1之后)。所以在实践中人们使用点和线:
ggplot(dfMelt, aes(time, value, color = variable)) +
geom_point(size = 2, alpha = 0.8) +
geom_line()
制作这样的情节:
从这个图中我们可以看到数据是连续的,但我们只在点(0,1,3,4)进行了测量。