具有对数标度和自定义中断的直方图

Wee*_*gee 72 logarithm r histogram

我正在尝试在R中生成直方图,y为对数标度.目前我这样做:

hist(mydata$V3, breaks=c(0,1,2,3,4,5,25))
Run Code Online (Sandbox Code Playgroud)

这给了我一个直方图,但是0到1之间的密度是如此之大(大约一百万个值的差异),你几乎无法看出任何其他的条形.

然后我尝试过:

mydata_hist <- hist(mydata$V3, breaks=c(0,1,2,3,4,5,25), plot=FALSE)
plot(rpd_hist$counts, log="xy", pch=20, col="blue")
Run Code Online (Sandbox Code Playgroud)

它给了我一个我想要的东西,但是底部显示了值1-6而不是0,1,2,3,4,5,25.它还将数据显示为点而不是条形.barplot工作,但后来我没有任何底轴.

Dir*_*tel 60

直方图是穷人的密度估计.请注意,在hist()使用默认参数的调用中,您获得的频率不是概率 - ,prob=TRUE如果您想要概率,请添加 到调用中.

至于日志轴问题,如果你不想转换x轴,请不要使用'x':

plot(mydata_hist$count, log="y", type='h', lwd=10, lend=2)
Run Code Online (Sandbox Code Playgroud)

在log-y尺度上获得条形图 - 外观仍然有点不同,但可能会被调整.

最后,您还 hist(log(x), ...) 可以获取数据日志的直方图.

  • 抑制plot()中的轴和显式调用axis()给出'where'和'what'允许你这样做. (3认同)

Thi*_*rry 47

另一种选择是使用包ggplot2.

ggplot(mydata, aes(x = V3)) + geom_histogram() + scale_x_log10()
Run Code Online (Sandbox Code Playgroud)


had*_*ley 10

从您的问题来看,您是否想要记录的x轴或记录的y轴并不完全清楚.使用条形时记录的y轴不是一个好主意,因为它们锚定在零,记录时变为负无穷大.您可以使用频率多边形或密度图来解决此问题.


Qui*_*lor 10

德克的答案很棒.如果你想要一个像hist产生的外观,你也可以试试这个:

buckets <- c(0,1,2,3,4,5,25)
mydata_hist <- hist(mydata$V3, breaks=buckets, plot=FALSE)
bp <- barplot(mydata_hist$count, log="y", col="white", names.arg=buckets)
text(bp, mydata_hist$counts, labels=mydata_hist$counts, pos=1)
Run Code Online (Sandbox Code Playgroud)

最后一行是可选的,它在每个栏的顶部添加值标签.这对于对数刻度图可能很有用,但也可以省略.

我还传递main,xlabylab参数来提供绘图标题,x轴标签和y轴标签.


小智 7

运行hist()函数而不创建图形,对计数进行对数转换,然后绘制图形.

hist.data = hist(my.data, plot=F)
hist.data$counts = log(hist.data$counts, 2)
plot(hist.data)
Run Code Online (Sandbox Code Playgroud)

它应该看起来像常规直方图,但y轴将是log2频率.

  • 要防止 - 如果你必须使用以下内容:`hist.data $ counts [hist.data $ counts> 0] < - log(hist.data $ counts [hist.data $ counts> 0],2)` (2认同)