繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM