适合直方图的分布

时间:2014-02-04 20:22:07

标签: r histogram curve-fitting curve

我有以下数据:

a <- c(rep(1/9, 80), rep(1/7, 7), rep(1/5, 7), rep(1/3, 6))

如何选择1/7,1/5等比率作为x轴的中断?条形应该与间隔一样宽,即1 / 9-0的第一条,1 / 7-1 / 9的第二条等。

如何以方便的方式确定最有可能创建数据的分布?

谢谢!

2 个答案:

答案 0 :(得分:1)

require("ggplot2")

a <- c(rep(1/9, 80), rep(1/7, 7), rep(1/5, 7), rep(1/3, 6))-0.0001
b <- c(1/10,1/9,1/7,1/5,1/3)

ggplot(NULL, aes(x=a)) + 
                geom_histogram(breaks = b, 
                colour = "black", fill = "lightblue")

答案 1 :(得分:0)

a <- c(rep(1/9, 80), rep(1/7, 7), rep(1/5, 7), rep(1/3, 6))

library(ggplot2)
gg <- data.frame(a)
ggplot(gg)+
  geom_histogram(aes(x=factor(a)),fill="lightgreen")+
  scale_x_discrete(labels=c("1/9","1/7","1/5","1/3"))+
  labs(x="a")

编辑(对OP评论的回应)

我有一种下沉的感觉,这就是你想要的:

df<- data.frame(table(a))   # calculate frequencies
df$xmax <- as.numeric(as.character((df$a)))
df$xmin <- c(1/10,df[-nrow(df),]$xmax)
library(ggplot2)
ggplot(df)+
  geom_rect(aes(xmin=xmin, xmax=xmax, ymin=0, ymax=Freq),fill="lightgreen", colour="grey50")+
  scale_x_continuous(breaks=c(1/10,df$xmax),labels=c("1/10","1/9","1/7","1/5","1/3"))

很抱歉不得不说出来,但这是显示数据的一种非常可怕的方式。眼睛自然被吸引到区域,而不是高度,所以当你这样做时,频率会严重失真。