我需要绘制大量数据,但大多数都等于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?
非常感谢,任何形式的帮助都将受到高度赞赏。
答案 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
现在绘制它。