R ggplot多变量小平面

时间:2017-09-12 16:18:37

标签: r ggplot2

我有df USArrests,其中包含每个美国州的3个犯罪统计数据和一个额外的UrbanPop变量。我试图创建包含每个州的3个犯罪统计数据的分面条形图,其中y轴是特定休息时间每100,000人的情况(100,200,300)。图的顶部将读取它来自的状态。

我的主要问题是我还没有完全理解映射/ aes函数以及如何将所有3个变量放在一个图中。感谢

library(ggplot2)

USArrests$state_name <- rownames(USArrests)

p <- ggplot() +
  layer(data = USArrests,
        stat = "identity",
        geom = "bar",
        mapping = aes(x = Assault, Rape, Murder),
          position = "identity") +
  scale_y_discrete(name = "Cases per 100,000 people",
                     breaks = c(100, 200, 300),
                     labels = c("100", "200", "300")) +
           facet_wrap(~ state_name)
plot(p)

1 个答案:

答案 0 :(得分:3)

您需要重塑数据框。 USArrests2是重新整形的数据框。之后,您可以将Crime作为x轴上的类别和Number在y轴上连续绘制。在这种情况下,您还可以使用geom_col()代替geom_bar(stat = "identity")。他们是一样的。 facet_wrap是生成方面的方法。您可以使用ncolnrow指定列号或行号。

library(dplyr)
library(tidyr)
library(ggplot2)

USArrests2 <- USArrests %>%
  gather(Crime, Number, Assault, Rape, Murder)

ggplot(USArrests2, aes(x = Crime, y = Number)) +
  geom_bar(stat = "identity") +
  scale_y_continuous(breaks = c(100, 200, 300)) +
  facet_wrap(~ state_name, nrow = 5)