ggplot - 将数据框中的变量集绘制到单个图上

时间:2018-01-04 12:16:58

标签: r ggplot2

使用如下数据框

> set.seed(99)
> data = data.frame(name=c("toyota", "nissan"), a=sample(1:10,2)/10,b=sample(-150:-50,2),c=sample(1e2:1e3,2),d=sample(1e3:1e5,2), e=sample(-15:30,2))
> data
    name   a   b   c     d   e
1 toyota 0.6 -81 582 67471   -7
2 nissan 0.2 -51 969 30163   13

我需要为每个列a到e创建一个条形图。我可以单独做ggplot(data, aes(x=name, y=a)) + geom_bar(stat = "identity"),这很好。但是我需要将所有这些图表放到一个图表中,可能会以迭代的方式使用两列 - 如何解决这个问题?

更新1 : -

为了增加问题的清晰度,创建单个堆积条形图没有意义,因为每列的值范围变化很​​大。答案here中的简单堆积条形图将生成如下图 - 这对于表示某些变量并不有用

enter image description here

更新2 : - 建议使用facet_grid(~ variable, scales = "free")并不能让这更好 - 请参阅下面的图表。

enter image description here

2 个答案:

答案 0 :(得分:1)

或许facet_wrap()更适合您的需求?

library(ggplot2)
library(reshape2)
ggplot(melt(data, id = "name")) + 
  aes(name, value, fill = variable) + 
  geom_col(position = "dodge") +
  facet_wrap(~ variable, scales = "free_y") 

enter image description here

答案 1 :(得分:0)

你需要首先融化你的数据并绘制它,使用创建的列变量作为分组列:

data = data.frame(name=c("toyota", "nissan"), a=sample(1:10,2)/10,b=sample(-150:-50,2),c=sample(1e2:1e3,2),d=sample(1e3:1e5,2), e=sample(-15:30,2))

library(reshape2)
data <- melt(data, id="name")

library(ggplot2)
ggplot(data,aes(x=name, y=value, fill=variable)) + geom_bar(stat = "identity", position = "dodge")