2017-03-02 138 views
0

背景R中创建“柱状图”从X值和概率估计的输入

我试图从“贝叶斯数据分析”关于Dirichlet过程的章节复制类似如下图Gelman等人人。这些图像描绘了一个突破的过程。

这些图有效地显示了四种不同情景的概率分布。横轴是“数据”值,纵轴是与该数据相关的概率估计值。

Desired

我的问题

我想我已经有创造情节所必需的数据;数据点和相应的概率估计值(是的,因为它是一个概率密度函数,所以概率实际上是围绕这些点的小间隔)。问题是我不知道如何制作一个包含上面那些好棒的情节。通常在R中,直方图是根据数据值的向量构建的,但我有两列。 (和搜索没有透露任何东西)

## data 
head(dat) 
    thet prob.estim 
1 -0.1532657 0.05451808 
2 -1.2471313 0.06407723 
3 0.3452990 0.06608997 
4 0.4886357 0.12634090 
5 1.3894174 0.02572439 
6 -0.7041029 0.03688599 

最近我可以得到只是看起来不好。请参阅下面的代码和图片。 (注意,概率估计,由于使用随机数生成的是不同的)

# Best I can do, but not bars 
plot(dat$thet, dat$prob.estim, main = "Alpha = 1") 

Best I can do

回答

0

首先,生成一些数据一起工作:

set.seed(24601) 
thet <- seq(-3, 3, by=.05) 
prob.estim <- rbeta(length(thet), 1, 100) 
dat <- data.frame(thet = thet, 
        prob.estim = prob.estim) 
# putting in the spike in the plot 
dat[thet == 1, ]$prob.estim <- .99 

生成的情节,与基地图形

首先,这里是散点图版本(所以你可以看到我生成的数据与你的数据比较)

plot(dat$thet, dat$prob.estim) 

scatter 这里,它是作为一个barplot

barplot(names.arg = dat$thet, height = dat$prob.estim) 

bar

生成的情节,与GGPLOT2

如果你有兴趣在控制你的图的外观(这听起来像你),你可能想要移动到ggplot2。

library(ggplot2) 
ggplot(dat, aes(y = prob.estim, x = thet)) + 
    geom_bar(stat = "identity") + 
    theme_classic() 

bar_ggplot

+0

感谢。但这对我不起作用。对于ggplot,我只是得到一个空的绘图窗口。如果我先按第一个排序,则barplot会起作用,但我无法调整坐标轴。即使我尝试更改xlim,轴自动从-4到-3。有任何想法吗? – RMurphy

+0

听起来像数据的问题。对于ggplot,你能确认数据是保存在一个数据框(在这个例子中是'dat'),'thet'和'prob.estim'都是数字吗?要检查,使用'str(dat)' –