2017-07-14 23 views
4

我敢肯定,這是簡單的,但我無法弄清楚。如何添加標籤,在該段的開始geom_segment?

我有以下圖表:

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

但我想的標籤是斷軸,並在網頁上。可以在行的左邊或中間的頂部。例如。

enter image description here

大多數geom_text的例子給我gobbledeegook。我似乎無法將它們應用於我在這裏的因子數據。你知道如何做到這一點? 謝謝

回答

2
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適當地抵消標籤。

+1

可避免硬編碼微移用類似如下:'GEOM_LABEL(AES(X = StartDate - 0.005 *(max(EndDate) - min(StartDate)), y = Period,label = Period),hjust = 1)' – eipi10

3

在段的末尾添加標籤可能會使段長度和位置的視覺映射扭曲到年份範圍。您可以將標籤放在細分中間。

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