如何使用ggplot2在R中创建此特定图形?

时间:2017-05-12 05:28:33

标签: r graph ggplot2

我是R的新手,我在RStudio中使用R.我最近在一本R书中看到了这张图(请看下图)(尽管它没有解释这张图是如何实现的):

R Graph

我想用以下数据复制此图表:

序列观察数(显示在x轴上):1,2,3,4,5

每次观察的价值:140,165,125,175,185

平均预算值(将是图表中的水平线):150

如何创建此图表?

2 个答案:

答案 0 :(得分:3)

您可以使用geom_segment完成大部分繁重的工作:

library(ggplot2)

ggplot(data.frame(x = 1:5, 
                  y = c(140, 165, 125, 175, 185)), 
       aes(x, y, xend = x, yend = 150, label = y - 150)) + 
    geom_point(color = 'seagreen') + 
    geom_hline(yintercept = 150, color = 'seagreen') + 
    geom_segment(linetype = 'dashed', color = 'seagreen') + 
    geom_text(nudge_x = .1)

答案 1 :(得分:2)

dat <- data.frame(x = 1:5, val=c(140, 165, 125, 175, 185), mean=150)
dat <- dat %>% gather(var, budget, val:mean)

ggplot(dat, aes(x, budget, group=as.factor(x))) + 
    geom_line() + 
    geom_hline(yintercept=150) + 
    geom_point(data=dat %>% filter(var=="val"))

enter image description here

插入点与均值之间的差异:

dat2 <- dat %>% 
        group_by(x) %>% 
        summarise(val=diff(budget)*-1, mean=mean(budget)

ggplot(dat, aes(x, budget, group=as.factor(x))) + 
    geom_line(linetype="dotted") + 
    geom_hline(yintercept=150) + 
    geom_point(data=dat %>% filter(var=="val")) + 
    geom_text(data=dat2, aes(x+.1, mean, label=val))

enter image description here