我有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)
答案 0 :(得分:3)
您需要重塑数据框。 USArrests2
是重新整形的数据框。之后,您可以将Crime
作为x轴上的类别和Number
在y轴上连续绘制。在这种情况下,您还可以使用geom_col()
代替geom_bar(stat = "identity")
。他们是一样的。 facet_wrap
是生成方面的方法。您可以使用ncol
或nrow
指定列号或行号。
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)