【问题标题】:Combining two datasets into one histogram将两个数据集组合成一个直方图
【发布时间】:2014-07-18 23:25:36
【问题描述】:

我正在尝试使用 R 制作一个比较两个数据集的直方图。但是,我还没有找到一种方法来做到这一点。每个数据集都是一个 69 个元素长的基因计数数字列表。前十个元素如下所示:

bt549_counts
##       1       2       3       4       5       6       7       8       9      10      
##  627984  711915  690967 1414629 1097368  274380  432299  165781  329155 1984503
bt549_uniqCounts
##    1    2    3    4    5    6    7    8    9   10  
## 1794 1982 1921 3556 2851  800 1142  457 1013 4911

我尝试绘制每个列表,然后将这些列表组合成一个图,如下所示:

btPlot <- plot(bt549_counts, type="h")
uniqPlot <- plot(bt549_uniqCounts, type="h")
combPlot <- t(cbind(bt549_counts,bt549_uniqCounts))
barplot(combPlot, beside=TRUE, space=rep(0,2*ncol(combPlot)), col=c("red", "black"))

这是前两个图:

btPlot:

uniqPlot:

但结果图似乎并没有显示两组:

我原以为会看到两组并排的条,一组黑色和一组红色。我在这里读错了什么以及如何制作我想要的图表?

PS:抱歉,我似乎无法正确显示这两个列表。第一行 [1-10] 是列号,第二行包含每列的值。

【问题讨论】:

    标签: r plot histogram


    【解决方案1】:

    如果您绘制测试数据,您会发现它正在工作。问题是您正在绘制计数并且计数是如此不同(bt549_uniqCounts 要小得多,所以您几乎看不到它)。我添加了border=F,所以它不会在条形周围画一条黑线并掩盖填充。仔细看的话,5点就可以看到一点红了。

    cnt1<-c(627984,711915,690967,1414629,1097368,274380,432299,165781,329155,1984503)
    cnt2<-c(1794,1982,1921,3556,2851,800,1142,457,1013,4911)
    names(cnt1)<-1:10
    names(cnt2)<-1:10
    barplot(t(cbind(cnt1, cnt2)), beside=T, col=c("black","red"), border=F)
    

    也许您想对它们进行归一化以比较相对频率。在这种情况下,您可以将每个除以它的总和。这给了

    barplot(t(cbind(cnt1/sum(cnt1), cnt2/sum(cnt2))), 
        beside=T, col=c("black","red"), border=F)
    

    【讨论】:

    • 谢谢,这有助于清除它。我也很晚才想到将 y 轴设为对数刻度,这进一步有助于显示数据。
    猜你喜欢
    • 1970-01-01
    • 2016-10-30
    • 2021-09-05
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多