14

嗨,我正在使用 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()

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

4

4 回答 4

24

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

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)')

在此处输入图像描述

在此处输入图像描述

于 2011-10-19T22:08:28.220 回答
4

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

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

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

于 2015-11-26T14:29:51.370 回答
3

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

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

  • 将计数除以 100 万:

    h <- hist(hplot$V1, plot=FALSE)

    h$counts <- h$counts/1e6

    plot(h)

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

    hist(hplot$V1, freq=FALSE)

于 2011-10-20T00:46:41.410 回答
2

您可以记录绘图的 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)

使用日志轴标签记录数据

于 2016-02-13T02:02:53.543 回答