用ggplot2构建箱线图

时间:2018-08-16 16:16:17

标签: r ggplot2 boxplot

我正在尝试使用某些给定数据重现箱形图。一个变量是能源消耗,另一个变量是共和党选民或民主选民的数量。我试图获得一个箱形图,根据共和党人和民主党人的选民和每个县的能源消耗来比较他们的能源消耗中位数。我的数据在一个称为master的数据帧中。

p <- ggplot(master)
boxdata2 <- rbind(data.frame(Change = master$Energy.Expenditures,
                             Votes = master$votes_dem,
                             Party = "Democratic",
                             color = "blue"),
                  data.frame(Change = master$Energy.Expenditures,
                             Votes = master$votes_gop,
                             Party = "Republican",
                             color = "red"))
boxdata2 <- na.omit(boxdata2)
p + geom_boxplot(data = boxdata2,
                 aes(x = Party, y = Change~Votes, fill = color)) 

但是,我遇到此错误

  

错误:美学必须为长度1或与数据相同   (6222):x,y,填充

有什么办法解决这个问题吗?

编辑1: 这是我要使用boxplot命令构建的内容:

data1<-(data.frame(Change=rep(master$Energy.Expenditures, 
times = master$votes_dem), Party="Democratic",color="blue"))
data2<-(data.frame(Change=rep(master$Energy.Expenditures,
times= master$votes_gop), Party="Republican",color="red"))
boxplot(c(data1[1],data2[1]))

我想得到它(请参阅链接,对不起,但我没有足够的声誉来发布图像),但是使用ggplot来获取我之前使用的格式,但是,考虑到行的总数(每行6000万) R用完了内存,这就是为什么我尝试了上面提到的

https://i.imgur.com/R4FT74y.jpg

EDIT2:

我可以使用EDIT 1中的摘要统计信息来构建它,但是我想知道是否有一种方法可以在ggplot下执行EDIT1。

2 个答案:

答案 0 :(得分:0)

这显示了如何在ggplot2中生成简单的箱线图,并将其与base R代码进行比较以生成相同的箱线图。正如其中一条注释中已经指出的那样,尽管您在Change~Votes R代码中使用了公式(例如,示例中的base),但是在ggplot2中却没有这样做;在那里,您只需指定x和y变量即可。

library(ggplot2)
ggplot(mpg, aes(class, hwy)) + geom_boxplot()

enter image description here

boxplot(hwy~class, data=mpg)

enter image description here

答案 1 :(得分:0)

require(ggplot2)

# fake numeric data
dd <- function(){
  round(rnorm(10, 10, 2), 0)
}

# your dummy data
boxdata2 <- rbind(data.frame(Change = dd(),
                             Votes = dd(),
                             Party = "Democratic",
                             color = "blue"),
                  data.frame(Change =  dd(),
                             Votes =  dd(),
                             Party = "Republican",
                             color = "red"))

ggplot(boxdata2) +
    geom_boxplot(data = boxdata2, aes(x = Party, y = Change, color = color)) + 
  scale_color_manual(values = c("blue", "red"), labels = c("Democrat","Republican")) +
  facet_wrap(~Votes)

enter image description here