【问题标题】:ScatterPlot and ONLY one Histogram plot together散点图和只有一个直方图一起绘制
【发布时间】:2014-04-07 04:56:14
【问题描述】:

我想用“散点图”和右侧的直方图可视化时间序列数据,但我无法弄清楚如何关闭上方的直方图。

代码示例:

install.packages("psych")
library(psych)
data = matrix(rnorm(n=100000,mean=2,sd=1.5), nrow = 100, ncol=1000)
fs = list()
fs$p_Z = 1*(data>2)
n_p = 1;
  for(i in floor(seq(1,dim(data)[2],length.out=n_p)))
{
  scatter.hist(x = rep(1:length(data[,i])), y = data[,i],
               xlab = 'observations',
               ylab = 'log(TPM)',
               title = 'Mixture Plot',
               col = c("red","blue")[fs$p_Z[,i]+1], 
               correl = FALSE, ellipse = FALSE, smooth = FALSE)
}

结果:

预期结果: 和我的一样,但上面没有直方图。即,只有右侧的直方图用于 log(TPM)。

注意:我正在使用psych package, scatter.hist function,它看起来简单易用,但找不到如何关闭一个直方图。

【问题讨论】:

    标签: r


    【解决方案1】:

    灵活性结束的地方,黑客就开始了。如果您查看 scatter.hist 函数,您会发现它是 R 基础图形的基本用法。以下修改后的代码将创建您想要的情节:

    scat.hist <- function(x, y, xlab = NULL, ylab = NULL, title = "", ...) {
    
    ## Create layout
    layout(matrix(c(1,2),1,2,byrow=TRUE), c(3,1), c(1,3))
    
    ## Plot scatter
    par(mar=c(5,5,3,1))
    plot(x= x, y = y, xlab = xlab, ylab = ylab, main = title, ...)
    
    ## Right histogram
    yhist <- hist(y, plot = FALSE, breaks = 11)
    par(mar=c(5,2,3,1))
    mp <- barplot(yhist$density, space=0, horiz=TRUE, axes = FALSE)
    ## Density
    d <- density(y, na.rm = TRUE, bw = "nrd", adjust = 1.2)
    temp <- d$y
            d$y <- (mp[length(mp)] - mp[1] + 1) * (d$x - min(yhist$breaks))/(max(yhist$breaks) - min(yhist$breaks))
            d$x <- temp
    lines(d)
    }
    

    让我们试试第一行:

    i = 1
    scat.hist(x = seq_along(data[,i]), y = data[,i], col = c("red", "blue")[fs$p_Z[,i]+1], xlab = 'observations', ylab = 'log(TPM)', title = 'Mixture Plot')
    

    【讨论】:

    • 不错的答案和不错的技巧!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 2013-08-29
    相关资源
    最近更新 更多