2017-07-14 15 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()) 

あなたはy軸の要素を削除するelement_blank()を使用して、適切にラベルを相殺するためにgeom_labelnudge_x引数を使用する必要がありますありがとうございました。

+1

あなたは、次のようなものでnudgesをハードコーディングを避けることができます: 'geom_label(AES(X =開始日 - 0.005 *(最大(終了日) - 分(開始日))、 y =期間、ラベル=期間)、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

関連する問題