【问题标题】:Labelling issue after using gap.plot to create an axis break使用 gap.plot 创建轴中断后的标签问题
【发布时间】:2016-06-28 10:46:32
【问题描述】:

我一直在努力获得一个能准确显示我的数据的图,并且花了一段时间来让 gap.plot 启动并运行。这样做之后,我在标记这些点时遇到了问题。

只是绘制我的数据,结果是这样的:

Plot of abundance data, basically two different tiers of data at ~38,000, and between 1 - 50

如您所见,这并没有清楚地显示我的情节的顶部或底部,足以区分任何东西。

使用间隙图,我设法得到:

gap.plot of abundance data, 100 - 37000 missed, labels only appearing on the lower tier

我的两个情节的代码非常简单:

plot(counts.abund1,pch=".",main= "Repeat 1")
text(counts.abund1, labels=row.names(counts.abund1), cex= 1.5)

gap.plot(counts.abund1[,1],counts.abund1[,2],gap=c(100,38000),gap.axis="y",xlim=c(0,60),ylim=c(0,39000))
text(counts.abund1, labels=row.names(counts.abund1), cex= 1.5)

但我不知道为什么/无法弄清楚为什么标签(只是点表示的字母)在两个图中的应用不同。

我在尝试这一点时有点不知所措,非常不知道如何很好地绘制这样的东西,学习时从未有过这样的数据。

这来自的数据最初是一个大的(10,000 x 10,000 矩阵),其中包含字母 a 到 z 的随机分类,然后有替换和“物种形成”或“移民”,导致第一批字母在 ~ 38,000,第二批通常低于 50。

我在获取该矩阵以获得秩丰度后运行的代码是:

##Abundance 1
counts1 <- as.data.frame(as.list(table(neutral.v1)))
counts.abund1<-rankabundance(counts1)

以neutral.v1 为矩阵。

counts.abund1 的数据框看起来像(格式极差,抱歉):

rank    abundance   proportion  plower  pupper  accumfreq   logabun rankfreq    

a   1   38795   3.9 NaN NaN 3.9 4.6 1.9
x   2   38759   3.9 NaN NaN 7.8 4.6 3.8
j   3   38649   3.9 NaN NaN 11.6    4.6 5.7
m   4   38639   3.9 NaN NaN 15.5    4.6 7.5

并继续所有变量。我现在只使用 Rank 和 Abundance,a,x,j,m 只是适用的变量,以及我想用作图上标签的内容。

任何建议将不胜感激。我不能真正缩短代码太多或提供矩阵,因为数据类型非常具体,某种意义上的数量也是如此。

正如我所提到的,我一直在使用 gap.plot 只是在轴上创建一个中断,但如果有更好的解决方案来绘制这种类型的数据,我绝对会全力以赴。

真的很抱歉,这是一个乱七八糟的问题,现在对整个事情有点疲惫。

【问题讨论】:

    标签: r plot dataframe


    【解决方案1】:

    gap.plot() 不绘制两个图,而是通过减小上部的值、绘制额外的框和重写轴刻度标签来绘制一个图。因此,上部区域的 y 坐标既不等于原始值,也不等于轴刻度标签。上方区域的真实y坐标为"original value" - diff(gap)

    gap.plot(counts.abund1[,1], counts.abund1[,2], gap=c(100,38000), gap.axis="y", 
             xlim=c(0,60), ylim=c(0,39000))
    text(counts.abund1, labels=row.names(counts.abund1), cex= 1.5)
    text(counts.abund1[,1], counts.abund1[,2] - diff(c(100, 38000)), labels=row.names(counts.abund1), cex=1.5)
    
    # the example data I used
    set.seed(1)
    counts.abund1 <- data.frame(rank = 1:50, 
                                abundance = c(rnorm(25, 38500, 100), rnorm(25, 30, 20)))
    

    【讨论】:

    • 太棒了!不知道。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多