ggplot dot覆盖错误栏

时间:2016-12-15 15:38:58

标签: r ggplot2

我有一个巨大的文件,我不知道我可以在这里给出的小测试数据集在图中产生同样的问题,所以我不会给出任何测试数据集,我只会附上图表图像这里显示问题。

enter image description here

我的代码:

ggplot(tgc, aes(x=Week, y=MuFreq)) + 
theme_gray(base_size=18) + 
theme(plot.title=element_text(hjust=.5), 
      axis.title.x = element_text(face="bold"),
      axis.title.y = element_text(face="bold")) + 
geom_errorbar(aes(ymin=MuFreq-(1.96*se), ymax=MuFreq+(1.96*se)), width=3) +
geom_line() +
geom_point(aes(size= N), color="blue")+
scale_x_continuous(breaks=c(68,98,188), labels=c("Wk68", "Wk98", "Wk188")) +
scale_y_continuous(limits=c(0,0.15)) +
scale_size( breaks = unique(tgc$N))

所以问题是我根据每周的样本大小确定点的大小,中间点实际上有与之关联的误差条,但它覆盖了误差条。我尝试使用水平误差条,但它没有工作,因为我的x轴被定制为非数字。

我该怎么做才能显示被覆盖的错误栏?

还有什么方法可以使背景垂直网格线均匀分布?

1 个答案:

答案 0 :(得分:0)

Q要求改进ggplot2图表中的两件事:

  1. 显示正在涵盖的错误栏
  2. 使背景垂直网格线均匀分布
  3. 数据

    由于OP没有提供任何数据,我们需要一个虚拟数据集。这可以通过从图中读取值来轻松完成:

    tgc <- data.frame(Week = c(68, 98, 188),
                      MuFreq = c(0.08, 0.09, 0.091),
                      se = c(0.003, 0.001, 0.019)/1.96,
                      N = c(91, 835, 7))
    

    这很好地再现了原始情节:

    enter image description here

    变式1

    这个人正在接受Nick Criswell的评论:

    • 更改绘制图层的顺序,以便在顶部绘制误差线
    • 更改颜色和alpha

    • 删除所有垂直网格线,但明确指定为断点的网格线除外。主要网格线的距离仍然不均匀但反映了时间的差异

    使用此代码

    library(ggplot2)
    ggplot(tgc, aes(x = Week, y = MuFreq)) +
      theme_gray(base_size = 18) +
      theme(plot.title = element_text(hjust = .5),
            axis.title = element_text(face = "bold")) +
      geom_line() +
      geom_point(aes(size = N), color = "dodgerblue1", alpha = 0.5) +
      geom_errorbar(aes(ymin = MuFreq - (1.96 * se), 
                        ymax = MuFreq + (1.96 * se)), width = 3) +
      scale_x_continuous(
        breaks = c(68, 98, 188),
        labels = c("Wk68", "Wk98", "Wk188"),
        minor_breaks = NULL
      ) +
      scale_y_continuous(limits = c(0, 0.15)) +
      scale_size(breaks = unique(tgc$N))
    

    我们得到:

    enter image description here

    变式2

    为了在x轴上获得均匀间隔的数据点,我们可以将周数转换为因子。这需要告诉ggplot2数据属于一个组,以便绘制线条并添加自定义x轴标签。

    此外,使用theme_bw代替theme_gray

    library(ggplot2)
    ggplot(tgc, aes(x = factor(Week, labels = c("Wk68", "Wk98", "Wk188")), 
                    y = MuFreq, group = 1)) +
      theme_bw(base_size = 18) +
      theme(plot.title = element_text(hjust = .5),
            axis.title = element_text(face = "bold")) +
      geom_line() +
      geom_point(aes(size = N), color = "dodgerblue1", alpha = 0.5) +
      geom_errorbar(aes(ymin = MuFreq - (1.96 * se),
                        ymax = MuFreq + (1.96 * se)), width = 0.05 ) +
      scale_y_continuous(limits = c(0, 0.15)) +
      scale_size(breaks = unique(tgc$N)) + 
      xlab("Week")
    

    enter image description here