嗨我正在使用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
答案 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)')
答案 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)