使用 R 使直方图中的 y 轴对数

发布于 2024-12-11 01:18:45 字数 281 浏览 0 评论 0原文

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

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

Hi I'm making histogram using R, but the number of Y axis is so large that I need to turn it into logarithmic.See below my script:

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

So how should I change my script?
thx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

空城缀染半城烟沙 2024-12-18 01:18:45

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

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

在此处输入图像描述

在此处输入图像描述

You can save the histogram data to tweak it before plotting:

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

淑女气质 2024-12-18 01:18:45

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

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

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

Another option would be to use plot(density(hplot$V1), log="y").

It's not a histogram, but it shows just about the same information, and it avoids the illogical part where a bin with zero counts is not well-defined in log-space.

Of course, this is only relevant when your data is continuous and not when it's really categorical or ordinal.

戒ㄋ 2024-12-18 01:18:45

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

,而不是使用对数转换

  • 您是否考虑过:

    将计数除以 100 万:

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

    h$counts <- h$counts/1e6

    plot(h)

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

    hist(hplot$V1, freq=FALSE)

A histogram with the y-axis on the log scale will be a rather odd histogram. Technically it will still fit the definition, but it could look rather misleading: the peaks will be flattened relative to the rest of the distribution.

Instead of using a log transformation, have you considered:

  • Dividing the counts by 1 million:

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

    h$counts <- h$counts/1e6

    plot(h)

  • Plotting the histogram as a density estimate:

    hist(hplot$V1, freq=FALSE)

最好是你 2024-12-18 01:18:45

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

带日志轴标签的日志数据

You can log your y-values for the plot and add a custom log y-axis afterwards.

Here is an example for a table object of random normal distribution numbers:

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

log data with log axis labeling

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文