首页 文章

如何创建一个包含1000行数据的散点图,由一个变量索引/绘制,用R?

提问于
浏览
0

我有一个1000行和100列的数据集,数字从最小到最大从左到右排序(这些都是日期或事情发生的年份) . 我想创建这个数值数据的散点图,每行按升序排列数字1-100的序数索引 . 例如,数据框是:

[1] [2] [3] [4] ... [100]
   [1] 202 216 398 401 ... 2000
   [2] 203 243 284 350 ... 1998
   [3] 211 269 299 321 ... 2000
  ...
[1000] 200 247 273 300 ... 1999

我想将每行中的每个点索引1-100,所以基本上用1-100的数字绘制所有行 . 是否有捷径可寻?我是R的新手和自学成才 . 我用ggplot尝试过它,我也尝试将数据帧转换为矩阵并使用matplot,但不能完全正确 . 我在y轴上拍摄数字1-100,在x上拍摄数字1-2000 .

这是我试图复制的图表的一个例子,我在Excel中创建(只有250个系列) .

Here's

我知道这将是一个非常混乱的图形,但我正在复制其他人的基于代理的模型,并希望将我的图形和结果与其发布的数据进行比较 .

2 回答

  • 1

    R几乎总是考虑列中的数据而不是行,而对于 ggplot ,您需要长格式而不是宽格式的数据 .

    我们来看一些示例输入:

    nr = 1000
    nc = 100
    set.seed(47)
    m = matrix(sample(1:2000, size = nr * nc, replace = TRUE), ncol = nc)
    
    # base
    plot(x = c(1,2000), y = c(1,100), type = "n")
    for(i in 1:nr) points(m[i, ], 1:100, cex = 0.1, pch = 20)
    
    # ggplot
    # get data in long format
    d = data.frame(x = c(t(m)), y = rep(1:100, nr))
    ggplot(d, aes(x = x, y = y)) +
      geom_point(shape = '.', alpha = 0.1)
    

    这些都看起来很糟糕,因为假数据只是均匀分布,但它应该给你正确的想法 .

  • 2

    这是一个包含2行绘图代码的解决方案 . 第一个创建具有指定轴限制的空图 . 第二行一次绘制一行数据矩阵 . 这可能不是最优雅的解决方案,但考虑到数据的大小,这将运行得足够快:

    # generate fake data matching your example
    mat <- matrix(NA, nrow=1000, ncol=100)
    for(r in 1:1000) mat[r, ] <- sort(sample(0:2000, 100))
    
    # create empty plot
    plot(x=NA, y=NA, xlim=c(0,2000), ylim=c(0,100), xlab="", ylab="")
    
    # plot your data
    for(r in 1:1000) points(x=mat[r,], y=1:100, pch=20)
    

相关问题