使用R在直方图中进行y轴对数

时间:2011-10-19 21:14:24

标签: r histogram logarithm

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

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

4 个答案:

答案 0 :(得分:19)

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

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

enter image description here

enter image description here

答案 1 :(得分:4)

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

您考虑过:

,而不是使用日志转换
  • 将计数除以100万:

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

    h$counts <- h$counts/1e6

    plot(h)

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

    hist(hplot$V1, freq=FALSE)

答案 2 :(得分:2)

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

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

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

答案 3 :(得分: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)

https://issues.apache.org/jira/browse/HADOOP-3078