如何在段的开头向geom_segment添加标签?

时间:2017-07-14 21:45:19

标签: r ggplot2

我确信这很简单,但我无法理解。

我有以下图表:

library(data.table)
library(magrittr)
library(ggplot2)

cambodia <- 
    data.table(Period = c("Funan", "Chenla/Zhenla","Khmer Empire","Dark Ages of Cambodia"),
               StartDate = c(-500,550,802,1431), 
               EndDate = c(550,802,1431,1863), 
               Color = c("lightblue","lightgreen","lightyellow","pink")) %>%
    extract(order(-StartDate)) %>%
    extract(, Period := factor(Period,levels = Period))

ggplot() +
    geom_segment(data=cambodia, aes(x=StartDate, xend=EndDate, y=Period, yend=Period, color=Color), 
                 linetype=1, size=2) +
    scale_colour_brewer(palette = "Pastel1")+
    xlab("Date")+
    ylab("Ruler")+
    theme_bw() + 
    theme(panel.grid.minor = element_blank(), panel.grid.major =   element_blank()) + 
    theme(aspect.ratio = .2) +
    theme(legend.position="none")

enter image description here

但我希望标签不在轴上和页面上。在线的中间左侧或顶部。 E.g。

enter image description here

geom_text的大多数例子都给了我gobbledeegook。我似乎无法将它们应用于我在这里的因子数据。你知道怎么做吗? 谢谢

2 个答案:

答案 0 :(得分:4)

在段的末尾标记可能会扭曲段长度和位置到年范围的可视化映射。您可以将标签放在段的中间。

library(data.table)
library(magrittr)
library(ggplot2)
library(stringr)

cambodia <- 
  data.table(Period = c("Funan", "Chenla/Zhenla","Khmer Empire","Dark Ages of Cambodia"),
             StartDate = c(-500,550,802,1431), 
             EndDate = c(550,802,1431,1863), 
             Color = c("lightblue","lightgreen","lightyellow","pink")) %>%
  extract(order(-StartDate)) %>%
  extract(, Period := factor(Period,levels = Period))

ggplot(cambodia, aes(x=StartDate, xend=EndDate, y=Period, colour=Period)) +
  geom_segment(aes(xend=EndDate, yend=Period), linetype=1, size=2) +
  geom_label(aes(label=str_wrap(Period,12), x=(StartDate + EndDate)/2), size=3) +
  scale_colour_brewer(palette = "Set1") +
  xlab("Date")+ ylab("Ruler")+
  theme_bw() + 
  theme(panel.grid.minor = element_blank(), panel.grid.major = element_blank(), 
        aspect.ratio = .2,
        legend.position="none",
        axis.text.y=element_blank(),
        axis.ticks.y=element_blank())

enter image description here

或者最小化:

ggplot(cambodia, aes(x=StartDate, y=1)) +
  geom_rect(aes(xmin=StartDate, xmax=EndDate, ymin=0.97, ymax=1.03, fill=Period), 
            show.legend=FALSE, colour="white", size=0.5) +
  geom_label(aes(label=str_wrap(Period,12), x=(StartDate + EndDate)/2), size=3.5) +
  geom_text(aes(label=StartDate, y=0.96), size=3.5) +
  geom_text(aes(label=ifelse(EndDate==max(EndDate), EndDate,""), x=EndDate, y=0.96), size=3.5) +
  scale_colour_brewer(palette = "Set1") +
  scale_y_continuous(limits=c(0.95,1.05)) +
  theme_void() 

enter image description here

答案 1 :(得分:3)

ggplot() +
  geom_segment(data=cambodia, aes(x=StartDate, xend=EndDate, y=Period, yend=Period, color=Color), 
               linetype=1, size=2) +
  geom_label(data=cambodia, aes(x=StartDate, y=Period,  label = Period),
             nudge_x = c(-300, -200, -200, -100)) +
  scale_colour_brewer(palette = "Pastel1")+
  xlab("Date")+
  ylab("")+
  theme_bw() + 
  theme(legend.position="none") +
  theme(aspect.ratio = .2) +
  theme(panel.grid.minor = element_blank(), panel.grid.major =   element_blank(),
        axis.line.y = element_blank(), axis.text.y = element_blank(),
        axis.ticks.y = element_blank())

您需要使用element_blank()删除y轴元素,然后使用nudge_x中的geom_label参数来适当地偏移标签。