从连续轴移除断裂/标签

时间:2018-03-17 11:37:29

标签: r ggplot2

可能是一个简单的解决方案,但我无法弄清楚为什么会发生以下情况。

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"))

这给出了:

enter image description here

然而,重点是我所拥有的时间是: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?

1 个答案:

答案 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))

结果: enter image description here

然而,这是时间数据(即,它是连续的,3不能在1之后)。所以在实践中人们使用点和线:

ggplot(dfMelt, aes(time, value, color = variable)) + 
    geom_point(size = 2, alpha = 0.8) +
    geom_line()

制作这样的情节:

enter image description here

从这个图中我们可以看到数据是连续的,但我们只在点(0,1,3,4)进行了测量。