首页 > 解决方案 > 是否可以仅使用 R 中的起点和终点信息绘制图形(一种箱线图)?

问题描述

我想画一种箱线图,但该图将代表数据集的起点和终点。例如,我可以在下面表示我的输入,但我在 excel 中绘制输出。

dt<-data.frame(Start=c(5,15,22), End=c(10,21,38))

在此处输入图像描述

标签: rplotboxplot

解决方案


你可以使用geom_rect

library(dplyr)
library(ggplot2)

dt %>% 
  mutate(group = factor(seq(n())), 
         ymin = seq(n()), 
         ymax = seq(n()) + 1) %>%
  ggplot() +
  geom_rect(aes(xmin = Start, xmax = End, ymin = ymin, 
                ymax = ymax, fill = group), color = "gray50") +
  scale_y_reverse(expand = c(0.5, 0.5), breaks = 0:5) +
  scale_x_continuous(breaks = 0:10 * 5) +
  scale_fill_manual(values = c("#ea3323", "#bdd6ac", "#779de6")) +
  theme_bw() +
  theme(legend.position = "none",
        axis.text.y = element_blank(),
        axis.ticks.length.y = unit(0, "pt"),
        panel.grid.minor = element_blank())

在此处输入图像描述

或者,为了更接近地复制更多代码:

dt %>% 
  mutate(group = factor(seq(n())), 
         ymin = seq(n()), 
         ymax = seq(n()) + 1) %>%
  ggplot() +
  geom_rect(aes(ymin = 1, ymax = 2, xmin = -Inf, xmax = Inf),
            fill = "#00000004") +
  geom_rect(aes(ymin = 3, ymax = 4, xmin = -Inf, xmax = Inf),
            fill = "#00000004") +
  geom_rect(aes(xmin = Start, xmax = End, ymin = ymin, 
                ymax = ymax, fill = group), color = "gray50") +
  scale_y_reverse(expand = c(0.25, 0.25), breaks = 0:5) +
  scale_x_continuous(breaks = 0:10 * 5, limits = c(0, 40)) +
  scale_fill_manual(values = c("#ea3323", "#bdd6ac", "#779de6")) +
  theme_bw() +
  theme(legend.position = "none",
        axis.text.y = element_blank(),
        axis.ticks.length.y = unit(0, "pt"),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        axis.line = element_line(color = "black")
        )

在此处输入图像描述


推荐阅读