พล็อตดัชนีลำดับใน ggplot2 โดยใช้ geom_tile()

ฉันกำลังพยายามใช้ ggplot เพื่อสร้างลำดับพล็อต เพื่อประโยชน์ในการรักษาสไตล์ภาพเดียวกันในรายงานของฉันโดยใช้การวิเคราะห์ลำดับ ฉันทำ:

library(ggplot2)
library(TraMineR)
library(dplyr)
library(tidyr)    
data(mvad)    
mvad_seq<-seqdef(mvad,15:length(mvad))
mvad_trate<-seqsubm(mvad_seq,method="TRATE")
mvad_dist<-seqdist(mvad_seq,method="OM",sm=mvad_trate)
cluster<-cutree(hclust(d=as.dist(mvad_dist),method="ward.D2"),k=6)
mvad$cluster<-cluster
mvad_long<-gather(select(mvad,id,contains("."),-matches("N.Eastern"),-matches("S.Eastern")),
                    key="Month",value="state",
                    Jul.93, Aug.93, Sep.93, Oct.93, Nov.93, Dec.93, Jan.94, Feb.94, Mar.94,
                    Apr.94, May.94, Jun.94, Jul.94, Aug.94, Sep.94, Oct.94, Nov.94, Dec.94, Jan.95,
                    Feb.95, Mar.95, Apr.95, May.95, Jun.95, Jul.95, Aug.95, Sep.95, Oct.95, Nov.95,
                    Dec.95, Jan.96, Feb.96, Mar.96, Apr.96, May.96, Jun.96, Jul.96, Aug.96, Sep.96,
                    Oct.96, Nov.96, Dec.96, Jan.97, Feb.97, Mar.97, Apr.97, May.97, Jun.97, Jul.97,
                    Aug.97, Sep.97, Oct.97, Nov.97, Dec.97, Jan.98, Feb.98, Mar.98, Apr.98, May.98,
                    Jun.98, Jul.98, Aug.98, Sep.98, Oct.98, Nov.98, Dec.98, Jan.99, Feb.99, Mar.99,
                    Apr.99, May.99, Jun.99)

mvad_long<-left_join(mvad_long,select(mvad,id,cluster))
ggplot(data=mvad_long,aes(x=Month,y=id,fill=state))+geom_tile()+facet_wrap(~cluster)

ฉันพยายามพล็อตลำดับตามคลัสเตอร์ และสิ่งนี้ทำให้ฉันได้พล็อตต่อไปนี้:Sequence index plot with ggplot

อย่างที่คุณเห็น มีช่องว่างสำหรับรหัสที่ไม่อยู่ในคลัสเตอร์ที่แสดงโดยแต่ละแง่มุม ฉันต้องการกำจัดช่องว่างเหล่านี้ เพื่อให้ลำดับแสดงซ้อนกันเช่นเดียวกับฟังก์ชัน seqIplot() ของ TraMineR ดังในรูปถัดไป: SeqIplot

ข้อเสนอแนะใด ๆ เกี่ยวกับวิธีการดำเนินการ?


person Kenji    schedule 23.06.2015    source แหล่งที่มา
comment
รหัสของคุณทำให้เกิดข้อผิดพลาดกับฉัน Error in layout_base(data, vars, drop = drop) : At least one layer must contain all variables used for facetting   -  person SabDeM    schedule 23.06.2015
comment
@SabDeM: ฉันลืมเพิ่มตัวแปรคลัสเตอร์ลงในชุดข้อมูลก่อนที่จะปรับรูปร่างใหม่ รหัสได้รับการแก้ไขแล้ว และตอนนี้ควรสร้างพล็อตของฉันขึ้นมาใหม่   -  person Kenji    schedule 23.06.2015


คำตอบ (2)


การเปลี่ยนแปลงเล็กๆ สองประการ:

mvad_long$id <- as.factor(mvad_long$id)
ggplot(data=mvad_long,aes(x=Month,y=id,fill=state))+
       geom_tile()+facet_wrap(~cluster,scales = "free_y")

ggplot ถือว่า id เป็นตัวแปรตัวเลข แทนที่จะเป็นปัจจัย จากนั้นสเกลก็ได้รับการแก้ไข

person jeremycg    schedule 23.06.2015

การอัปเดต: ฉันต้องแปลงเดือนเป็นวันที่เพื่อให้ใช้งานได้ วิธีแก้ปัญหาแบบเต็มมีดังนี้:

library(ggplot2)
library(TraMineR)
library(dplyr)
library(tidyr)    
library(lubridate)

data(mvad)    

mvad_seq <- seqdef(mvad, 15:length(mvad))
mvad_trate <- seqsubm(mvad_seq, method = "TRATE")
mvad_dist <- seqdist(mvad_seq, method = "OM", sm = mvad_trate)

cluster <- cutree(hclust(d = as.dist(mvad_dist), method = "ward.D2"), k = 6)
mvad$cluster <- cluster

mvad_long <- mvad %>% 
  select(id, matches("\\.\\d\\d")) %>% 
  gather(key = "month", value = "state", -id) %>% 
  inner_join(
    mvad %>% 
      select(id, cluster),
    by = "id"
  ) %>% 
  mutate(
    id = factor(id),
    date = myd(paste0(month, "01"))
  )

mvad_long %>% 
  ggplot(aes(x = date, y = id, fill = state, color = state)) +
  geom_tile() +
  facet_wrap(~cluster, scales = "free_y", ncol = 2) +
  theme_bw() +
  theme(
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    panel.grid = element_blank()
  ) +
  scale_fill_brewer(palette = "Accent") +
  scale_colour_brewer(palette = "Accent") +
  labs(x = "", y = "")

ป้อนคำอธิบายรูปภาพที่นี่

person conrad-mac    schedule 19.11.2019