我有这样的数据集:
cars trucks suvs
1 2 4
3 5 4
6 4 6
4 5 6
9 12 16
我正在尝试绘制此数据的条形图。目前,我可以使用barplot
:
barplot(as.matrix(autos_data), main="Autos",
ylab= "Total",beside=TRUE, col=rainbow(5))
生成此图表:
所以我的问题是: 我可以使用ggplot2绘制这样的图表吗?具体来说 - 如何使用分面或其他选项按周拆分图表? 如果是的话,我该如何做到这一点? 另外,如何使用facet生成不同的布局?
答案 0 :(得分:33)
以前曾多次询问过这个问题。答案是您必须在stat="identity"
中使用geom_bar
告诉ggplot不要汇总您的数据。
dat <- read.table(text="
cars trucks suvs
1 2 4
3 5 4
6 4 6
4 5 6
9 12 16", header=TRUE, as.is=TRUE)
dat$day <- factor(c("Mo", "Tu", "We", "Th", "Fr"),
levels=c("Mo", "Tu", "We", "Th", "Fr"))
library(reshape2)
library(ggplot2)
mdat <- melt(dat, id.vars="day")
head(mdat)
ggplot(mdat, aes(variable, value, fill=day)) +
geom_bar(stat="identity", position="dodge")
答案 1 :(得分:0)
与tidyr
一起使用:
这里最大的问题是您需要将数据转换为整齐的格式。我强烈建议阅读R for Data Science(http://r4ds.had.co.nz/),以使您入门并使用整洁的数据和ggplot。
通常,一个好的经验法则是,如果您必须输入同一几何的多个实例,则可能存在一种数据格式的解决方案,该解决方案使您可以将所有内容放入aes()
函数中在顶层ggplot()
中。在这种情况下,您需要使用gather()
适当地安排数据。
library(tidyverse)
# I had some trouble recreating your data, so I just did it myself here
data <- tibble(type = letters[1:9],
repeat_1 = abs(rnorm(9)), repeat_2
=abs(rnorm(9)),
repeat_3 = abs(rnorm(9)))
data_gathered <- data %>%
gather(repeat_number, value, 2:4)
ggplot(data_gathered, aes(x = type, y = value, fill = repeat_number)) +
geom_col(position = "dodge")