安排美国形式的ggplot方面

我有一个美国国家的一个方面的ggplot。我想以美丽的边界(ordered like the second map,但没有夏威夷或阿拉斯加),以美国的形式安排这些方面。

为此,我创建了一个状态级因子变量,由美国状态排序,从地图上从左到右读取。这个因素还包含我要删除的空白面的“空间持有人”。我按照this post的建议(见编辑提供的答案),但名字(g $ grobs)为NULL,所以我无法实现他们的答案。任何想法我能做什么?

这是我的代码:

library(ggplot2)
library(fivethirtyeight)
library(dplyr)
library(gridExtra)

data("police_deaths")
police_deaths_count <- police_deaths %>% arrange(state, -year) %>% group_by(state, year) %>% count()
police_deaths_count <- police_deaths_count %>% arrange(state, -year) %>% 
  filter(year %in% c(1970:2015) & !state %in% c("AK", "HI", "US", "GU", "MP", "PR", "RR", "TR", "VI"))

police_deaths_count$state.name <- state.name[match(police_deaths_count$state, state.abb)]
police_deaths_count$state.name[police_deaths_count$state == "DC"] <- "Washington DC"

police_deaths_count$state.reorder <- factor(police_deaths_count$state.name,
                                         levels = c("e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "e10", "Maine",
                                                    "e11", "e12", "e13", "e14", "e15", "e16", "e17", "e18", "e19", "Vermont", "New Hampshire",
                                                    "Washington", "Idaho", "Montana", "North Dakota", "Minnesota", "Illinois", "Wisconsin", "Michigan", "New York", "Massachusetts", "Rhode Island",
                                                    "Oregon", "Nevada", "Wyoming", "South Dakota", "Iowa", "Indiana", "Ohio", "Pennsylvania", "New Jersey", "Connecticut", "e20",
                                                    "California", "Utah", "Colorado", "Nebraska", "Missouri", "Kentucky", "West Virginia", "Virginia", "Maryland", "Washington DC", "e21",
                                                    "e22", "Arizona", "New Mexico", "Kansas", "Arkansas", "Tennessee", "North Carolina", "South Carolina", "Delaware", "e23", "e24",
                                                    "e25", "e26", "e27", "Oklahoma", "Louisiana", "Mississippi", "Alabama", "Georgia", "e28", "e29",
                                                    "e30", "e31", "e32", "e33", "Texas", "e34", "e35", "e36", "e37", "Florida"))

police_deaths_count2 <- police_deaths_count %>% filter(!(state=="NY" & year==2001))

plot1 <- ggplot(subset(police_deaths_count2, is.na(state.name)==F), #take away 9-11 peak to see trends without it
               aes(y = n, x = year)) +
  geom_line() + 
  facet_wrap( ~ state.reorder, ncol = 11, drop = F) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  ylab("Count of police deaths") +
  xlab("Year")

#the order of these facets is what I want. From here, I'd like to display the facets e1, e2, ..., e37 as completely blank by removing their facet strips and panels.
plot1

#A SO post (next line) provides a potential solution, but it doesn't work for me
#http://stackoverflow.com/questions/30372368/adding-empty-graphs-to-facet-wrap-in-ggplot2 
g <- ggplotGrob(plot1)
names(g$grobs) #this is NULL so I can't implement the SO answer.
g$layout$name
hack-ish选项将为空白方面创建唯一的空白条标签,以便它们可以用作占位符,但不创建任何可见的条带标签。使用状态缩写而不是全名可能会更好,但是我没有这样做。以下是一个例子:

library(ggplot2)
library(fivethirtyeight)
library(dplyr)
library(gridExtra)

data("police_deaths")
police_deaths_count <- police_deaths %>% arrange(state, -year) %>% group_by(state, year) %>% count()
police_deaths_count <- police_deaths_count %>% arrange(state, -year) %>% 
  filter(year %in% c(1970:2015) & !state %in% c("AK", "HI", "US", "GU", "MP", "PR", "RR", "TR", "VI"))

# Create unique blank strip labels for empty facets
bl = sapply(1:37, function(n) paste(rep(" ",n),collapse=""))

police_deaths_count$state.name <- state.name[match(police_deaths_count$state, state.abb)]
police_deaths_count$state.name[police_deaths_count$state == "DC"] <- "Washington DC"

police_deaths_count$state.reorder <- factor(police_deaths_count$state.name,
                                            levels = c(bl[1:10], "Maine",
                                                       bl[11:19], "Vermont", "New Hampshire",
                                                       "Washington", "Idaho", "Montana", "North Dakota", "Minnesota", "Illinois", "Wisconsin", "Michigan", "New York", "Massachusetts", "Rhode Island",
                                                       "Oregon", "Nevada", "Wyoming", "South Dakota", "Iowa", "Indiana", "Ohio", "Pennsylvania", "New Jersey", "Connecticut", bl[20],
                                                       "California", "Utah", "Colorado", "Nebraska", "Missouri", "Kentucky", "West Virginia", "Virginia", "Maryland", "Washington DC", bl[21],
                                                       bl[22], "Arizona", "New Mexico", "Kansas", "Arkansas", "Tennessee", "North Carolina", "South Carolina", "Delaware", bl[23:24],
                                                       bl[25:27], "Oklahoma", "Louisiana", "Mississippi", "Alabama", "Georgia", bl[28:29],
                                                       bl[30:33], "Texas", bl[34:37], "Florida"))


police_deaths_count2 <- police_deaths_count %>% filter(!(state=="NY" & year==2001))

plot1 <- ggplot(subset(police_deaths_count2, is.na(state.name)==F), #take away 9-11 peak to see trends without it
                aes(y = n, x = year)) +
  geom_line() + 
  facet_wrap( ~ state.reorder, ncol = 11, drop = F, strip.position="bottom") +
  theme_classic() +
  theme(axis.text.x = element_blank(),
        strip.background=element_blank(),
        axis.line=element_blank(),
        axis.ticks=element_blank()) +
  ylab("Count of police deaths") +
  xlab("Year (1970 - 2015)")

enter image description here

http://stackoverflow.com/questions/42422669/arrange-ggplot-facets-in-the-shape-of-the-us

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:安排美国形式的ggplot方面