使用ggplot2绘制条形图

17

我有这样一个数据集:

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 生成不同的布局?


6
请在屏幕右上方的搜索框中搜索“barplot ggplot2”,否则将被扣分。 - Andrie
2
我尝试在谷歌和这个网站上搜索。事实上,我可以使用ggplot2为我的原始数据绘制条形图。因为ggplot2可以为您计算数量。问题是,如果您已经获得了计数结果,如何使用ggplot2绘制类似于一般“barplot”命令的条形图? - boyang
1
好的,那听起来更合理。现在把那个额外的信息加入你的问题中,我会撤回我的投票。同时添加一些示例代码,展示你已经完成了什么以及遇到了哪些问题。 - Andrie
1
可能是使用ggplot2创建预汇总数据的条形图的重复问题。 - Brian Diggs
2个回答

34

这个问题之前已经被问过很多次了。答案是你需要在 geom_bar 中使用 stat="identity" 来告诉 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")

在此输入图片描述


0

这里是使用 tidyr 的方法:

最大的问题在于你需要将数据转换为整洁的格式。我强烈建议阅读《R数据科学》(http://r4ds.had.co.nz/)来帮助你开始使用整洁的数据和 ggplot。

一般来说,一个好的经验法则是,如果你必须输入多个相同的几何对象,则可能存在一种解决方案,可以使你将所有内容放入顶层 ggplot() 中的 aes() 函数中。在这种情况下,你需要使用 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")

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接