Использование ggtable и grid для создания новых полос для графика, созданного в ggplot2 - PullRequest
0 голосов
/ 23 февраля 2020

Ниже код создает график в ggplot2. Чтобы реорганизовать график, показывающий состояния по регионам / цветам в предпочтительном порядке, мы использовали ggtable и grid. При запуске кода он создает новую полосу (перекрывая старые полосы). Но, это не производит текст в новых полосах. Не уверены, почему текст не будет отображаться на полосах в новом сюжете.


library("ggplot2")
library("gtable")
library("grid")

setwd("C:/Downloads")

dta<-read.csv(file="medians_appcs2_regions.csv")

dta$state_f = factor(dta$state, levels=c('Illinois', 'Indiana', 'Iowa','Kansas','Michigan','Minnesota', 'Missouri','Nebraska','North Dakota', 'Ohio', 'South Dakota','Wisconsin','Connecticut','Maine', 'Massachusetts', 'New Hampshire', 'New Jersey','New York','Pennsylvania','Rhode Island', 'Vermont', 'Alabama', 'Arkansas', 'Delaware','D.C.','Florida', 'Georgia', 'Kentucky','Louisiana','Maryland', 'Mississippi', 'North Carolina','Oklahoma','South Carolina', 'Tennessee', 'Texas','Virginia','West Virginia', 'Alaska', 'Arizona','California','Colorado', 'Hawaii', 'Idaho','Montana','Nevada','New Mexico','Oregon','Utah','Washington','Wyoming'))

p1<-ggplot(dta,aes(x=year, y=median_appc, group=group))+
      geom_abline(slope = 0, intercept =0, colour = "grey", size = 1)+
      facet_wrap(~state_f,ncol=6,scales="free_x")+  
  labs(x="Time Period",y="Median average annual percentage point change")+
  geom_line(aes(y=median_appc, colour=group)) +
  scale_colour_manual(values=c("#FF8C00","#8B4513","#2C80B8"))+
  geom_point(aes(y=median_appc, colour=group))+ 
  theme(panel.background=element_rect(fill="white"),
        panel.border = element_rect(linetype = 1, color = "black",fill="NA"),
        panel.grid.major=element_blank(),
        panel.grid.minor=element_blank(),
        plot.title = element_text(color = "blue",face="bold",size=12),
        plot.background = element_rect(fill = "white"),
        axis.text=element_text(color="blue",size=11),
        axis.title=element_text(color="blue",face="bold",size=12),
        aspect.ratio=1,
        strip.background=element_rect(fill="grey89"),
        strip.text=element_text(face="bold",color="black",size=7),text = element_text(size=10),
        legend.position=c(.7,0.04),
    legend.text=element_text(size=12),
    legend.title=element_blank())
p1

p2 <- ggplot(data = dta, aes(x=year, y=median_appc))+ facet_wrap(~state_f,ncol=6,scales="free_x") + 
  geom_rect(aes(fill=region), xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf)+ scale_fill_manual(values = c("pink", "grey","cadetblue1","burlywood1"))+
  theme_minimal()+theme(strip.text=element_text(face="bold",color="black",size=10), legend.position=c(.9,0.04),legend.text=element_text(size=12),
    legend.title=element_blank()) 
p2


gtable_select <- function (x, ...) 
{
  matches <- c(...)
  x$layout <- x$layout[matches, , drop = FALSE]
  x$grobs <- x$grobs[matches]
  x
}

g1 <- ggplotGrob(p1)
g2 <- ggplotGrob(p2)

panels <- grepl(pattern="panel", g2$layout$name)
strips <- grepl(pattern="strip_t", g2$layout$name)
legends <- grepl(pattern="guide-box", g2$layout$name)      

g2$layout$t[panels] <- g2$layout$t[panels]  - 1
g2$layout$b[panels] <- g2$layout$b[panels]  - 1

new_strips <- gtable_select(g2, panels | strips)
new_legends <- gtable_select(g2, legends)      



  grid.newpage()
  grid.draw(new_strips)
  grid.draw(new_legends)  


gtable_stack <- function(g1, g2){
  g1$grobs <- c(g1$grobs, g2$grobs)
  g1$layout <- transform(g1$layout, z= z-max(z), name="g2")
  g1$layout <- rbind(g1$layout, g2$layout)
  g1
  }


new_plot <- gtable_stack(g1, new_strips)
grid.newpage()
grid.draw(new_plot)
grid.draw(new_legends)     


jpeg(filename="test104.jpeg", unit="in",width = 9, height = 16,res=800)
  new_plot <- gtable_stack(g1, new_strips)
  grid.newpage()
  grid.draw(new_plot)
  grid.draw(new_legends)     
dev.off()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...