表示ggplot2 geom_line()中值之间的间隔

时间:2015-12-01 12:55:18

标签: r ggplot2

我需要绘制大量数据,但大多数都等于0.我的想法是,为了节省空间和计算时间,不存储等于0的值。

此外,我想在R中使用geom_line()包的ggplot2函数,因为对于我的数据,这种表示是最好的,具有我想要的美学。

我的问题是:如何在我的X轴的两个值之间,我可以在0处绘制一条线。我是否必须生成相关的数据帧,或者可以绘制一个技巧?

示例:

    X    Y
   117   1
   158  14
   179   4
   187   1
   190   1
   194   2
   197   1
   200   4
   203   3
   208   1
   211   1
   212   5
   218   1
   992   15
  1001   1
  1035   1
  1037   28
  1046   1
  1048   1
  1064   14
  1078   1

# To generate the DF
X <- c(117, 158, 179, 187, 190, 194, 197, 200, 203, 208, 211, 212, 218, 992, 1001, 1035, 1037, 1046, 1048, 1064, 1078)
Y <- c(1,14,4,1,1,2,1,4,3,1,1,5,1,15,1,1,28,1,1,14,1)
data <- data.frame(X,Y)
g <- ggplot(data = data, aes(x = data$X, y = data$Y))
g <- g + geom_line()
g

为了给你一个想法,我想做的是转换这个图像:

这样的事情: http://www.hostingpics.net/viewer.php?id=407269stack2.png

为了生成第二个图,我必须在峰周围定义两个位置,以便具有良好的形状。

我试图将比例改为连续比例或离散,但我没有很好的峰值。所以,在ggplot2有一个诀窍,如果X轴上的一个位置在两个X值之间,这个位置将显示在0?

非常感谢,任何形式的帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

您的问题是R没有看到X的任何间隔值。您可以通过执行以下操作来解决此问题:

X <- c(117, 158, 179, 187, 190, 194, 197, 200, 203, 208, 211, 212, 218, 992, 1001, 1035, 1037, 1046, 1048, 1064, 1078)
Y <- c(1,14,4,1,1,2,1,4,3,1,1,5,1,15,1,1,28,1,1,14,1)

这是您的原始数据框架。

Z <- data.frame(seq(min(X),max(X)))

创建一个包含所有X值的数据框。

colnames(Z)[1] <- "X"

将第一列重命名为“X”,以便能够将其与“数据”数据框合并。

data <- data.frame(X,Y)
data <- merge(Z[1],data, all.x = X)

创建一个包含所有区间X值的新数据框。

data[is.na(data)] <- 0

将所有NA的X值设置为0。

g <- ggplot(data = data, aes(x = data$X, y = data$Y))
g <- g + geom_line()
g

现在绘制它。