如何将条形直方图转换为R中的直方图

时间:2014-07-20 09:08:17

标签: r histogram

我见过许多密度图的例子,但密度图的y轴是概率。我正在寻找的是线图(如密度图),但y轴应包含计数(如直方图)。

我可以在excel中执行此操作,我手动制作垃圾箱和频率并制作条形直方图,然后我可以将图表类型更改为一行 - 但无法在R中找到类似的任何内容。

我已经检查了base和ggplot2;但似乎无法找到答案。我知道直方图应该是条形图,但我认为将它们表示为连续线条会产生更多的视觉感受。

5 个答案:

答案 0 :(得分:2)

使用默认的R图形(即不安装ggp​​lot),您可以执行以下操作,这也可能使密度函数更清晰:

# Generate some data
data=rnorm(1000)
# Get the density estimate
dens=density(data)
# Plot y-values scaled by number of observations against x values
plot(dens$x,length(data)*dens$y,type="l",xlab="Value",ylab="Count estimate")

答案 1 :(得分:2)

这是一个老问题,但我认为发布专门解决您问题的解决方案可能会有所帮助。

在ggplot2中,您可以使用以下方式绘制直方图并使用条形显示计数:

ggplot(data) + 
geom_freqpoly()

您还可以使用频率多边形绘制直方图并使用线条显示计数:

{{1}}

更多信息 - grammar production

答案 2 :(得分:0)

要在?stat_density帮助页面上调整示例:

m <- ggplot(movies, aes(x = rating))
# Standard density plot.
m + geom_density()
# Density plot with y-axis scaled to counts.
m + geom_density(aes(y = ..count..))

答案 3 :(得分:0)

虽然这是旧的,但我认为以下内容可能有用。 假设您有10,000个点的数据集,并且您认为它们属于某个分布,并且您希望绘制实际数据的直方图以及理想分布的概率密度线。< / p>

noise <- 2
#
# the noise is tagged onto the end using runif
# just do demo issues w/real data and fitting
# the subtraction causes the data to have some
# negative values, which must be addressed in 
# the fit later on
#
noisylognorm <- rlnorm(10000, 
                        mean = 0.25, 
                        sd = 1) + 
                        (noise * runif(10000) - noise / 10)
#
# using package fitdistrplus
#
# subset is used to remove the negative values
# as the lognormal distribution needs positive only
#
fitlnorm <- fitdist(subset(noisylognorm, 
                           noisylognorm > 0),
                           "lnorm")
fitlnorm_density <- density(rlnorm(10000, 
                                   mean = fitlnorm$estimate[1],
                                   sd = fitlnorm$estimate[2]))
hist(subset(noisylognorm, 
            noisylognorm < 25),
     breaks = seq(-1, 25, 0.5),
     col = "lightblue",
     xlim = c(0, 25),
     xlab = "value",
     ylab = "frequency",
     main = paste0("Log Normal Distribution\n",
                   "noise = ", noise))

lines(fitlnorm_density$x, 
      10000 * fitlnorm_density$y * 0.5,
      type="l",
      col = "red")

注意行功能中的* 0.5。据我所知,有必要考虑hist()条的宽度。

答案 4 :(得分:0)

计数数据有一种非常简单快捷的方法。

首先让我们生成一些虚拟计数数据:

my.count.data = rpois(n = 10000, lambda = 3)

然后是绘图命令(假设您调用了library(magrittr)):

my.count.data %>% table %>% plot