How to add a label to geom_segment at the beginning of a segment?

I am sure it is simple, but I cannot understand.

I have the following diagram:

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

But I would like the labels to be off-axis and on the page. Either on the left or on top of the middle of the line. For instance.

enter image description here

Most geom_text examples give me gobbledeegook. I cannot apply them to the factor data that I have. Do you know how to do this? Thanks you

+4
source share
2 answers
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())

You need to use element_blank()to remove elements of the axis y, and then use the argument nudge_xin geom_labelto the proper offset labels.

+2
source

. .

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

+3

Source: https://habr.com/ru/post/1681491/


All Articles