【问题标题】:Make y-axis logarithmic in histogram using R [duplicate]使用R在直方图中使y轴对数
【发布时间】:2011-12-11 07:27:53
【问题描述】:

您好,我正在使用 R 制作直方图,但是 Y 轴的数量太大,我需要将其转换为对数。请参阅下面的脚本:

hplot<-read.table("libl")
hplot
pdf("first_end")
hist(hplot$V1, breaks=24, xlim=c(0,250000000), ylim=c(0,2000000),main="first end mapping", xlab="Coordinates")
dev.off()

那么我应该如何更改我的脚本? 谢谢

【问题讨论】:

  • 直方图上的对数 y 轴没有意义 - 条形向下延伸到 0,在对数刻度上是负无穷大。

标签: r histogram logarithm


【解决方案1】:

您可以保存直方图数据以在绘图前对其进行调整:

set.seed(12345)
x = rnorm(1000)

hist.data = hist(x, plot=F)
hist.data$counts = log10(hist.data$counts)

dev.new(width=4, height=4)
hist(x)

dev.new(width=4, height=4)
plot(hist.data, ylab='log10(Frequency)')

【讨论】:

  • 这有点误导,因为您已将基线从 0 移动到 10^0 = 1。
  • @hadley 是的,我也觉得这很奇怪。有一个原因你不能像正常情节一样通过log='y'
  • 工作得很好,只是 dev.new(width=4, height=4) 在我使用 RStudio 时说“In (function () : Only one RStudio graphics device is allowed”不起作用。
  • @saganas 是的,你可以跳过 rstudio 中的那些,UI 让你在绘图之间导航
【解决方案2】:

另一种选择是使用plot(density(hplot$V1), log="y")

它不是直方图,但它显示的信息几乎相同,并且它避免了不合逻辑的部分,即计数为零的 bin 在日志空间中没有明确定义。

当然,这仅在您的数据是连续的而不是真正分类或有序的数据时才相关。

【讨论】:

    【解决方案3】:

    y 轴在对数刻度上的直方图将是一个相当奇怪的直方图。从技术上讲,它仍然符合定义,但它可能看起来相当具有误导性:峰值将相对于分布的其余部分变平。

    您是否考虑过,而不是使用对数转换:

    • 将计数除以 100 万:

      h &lt;- hist(hplot$V1, plot=FALSE)

      h$counts &lt;- h$counts/1e6

      plot(h)

    • 将直方图绘制为密度估计:

      hist(hplot$V1, freq=FALSE)

    【讨论】:

    • y 轴为对数刻度的直方图是相当常见的事情,特别是如果您想处理尾部,即具有极值的罕见事件。您可以在这里找到类似问题的回复:stackoverflow.com/questions/1245273/…
    【解决方案4】:

    您可以记录绘图的 y 值,然后添加自定义日志 y 轴。

    这是一个随机正态分布数的表格对象的示例:

    # data
    count = table(round(rnorm(10000)*2))
    # plot
    plot(log(count) ,type="h",  yaxt="n", xlab="position", ylab="log(count)")
    # axis labels
    yAxis = c(0,1,10,100,1000)
    # draw axis labels
    axis(2, at=log(yAxis),labels=yAxis, las=2)
    

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 2018-09-01
      • 1970-01-01
      • 2017-08-31
      相关资源
      最近更新 更多