[英]Represent interval between values in ggplot2 geom_line()
我需要绘制大量数据,但是大多数数据都等于0。我的想法是,为了节省空间和计算时间,不存储等于0的值。
此外,我想用geom_line()
的函数ggplot2
包R,因为我的数据,这种表示是最好的之一,并有我想要的美学。
我的问题是:如何在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?
非常感谢您,任何帮助将不胜感激。
您的问题是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
现在绘制它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.