r - 带有 ggplot2 和 dplyr(而不是 plyr)的人口金字塔图

标签 r plot ggplot2 dplyr plyr

我正在尝试从 Simpler population pyramid in ggplot2 帖子中重现简单的人口金字塔

使用 ggplot2dplyr (而不是 plyr )。

这是带有 plyr 和种子的原始示例

set.seed(321)
test <- data.frame(v=sample(1:20,1000,replace=T), g=c('M','F'))

require(ggplot2)
require(plyr)    
ggplot(data=test,aes(x=as.factor(v),fill=g)) + 
  geom_bar(subset=.(g=="F")) + 
  geom_bar(subset=.(g=="M"),aes(y=..count..*(-1))) + 
  scale_y_continuous(breaks=seq(-40,40,10),labels=abs(seq(-40,40,10))) + 
  coord_flip()

Pyramid plot with ggplot2 and plyr

工作良好。

但是如何使用 dplyr 生成相同的图呢?该示例在 plyr 语句中使用 subset = .(g ==

我用 dplyr::filter 尝试了以下操作,但出现错误:
require(dplyr)
ggplot(data=test,aes(x=as.factor(v),fill=g)) + 
  geom_bar(dplyr::filter(test, g=="F")) + 
  geom_bar(dplyr::filter(test, g=="M"),aes(y=..count..*(-1))) + 
  scale_y_continuous(breaks=seq(-40,40,10),labels=abs(seq(-40,40,10))) + 
  coord_flip()

Error in get(x, envir = this, inherits = inh)(this, ...) : 
  Mapping should be a list of unevaluated mappings created by aes or aes_string

最佳答案

您可以通过在 data 中指定参数 geom_bar 来避免错误:

ggplot(data = test, aes(x = as.factor(v), fill = g)) + 
  geom_bar(data = dplyr::filter(test, g == "F")) + 
  geom_bar(data = dplyr::filter(test, g == "M"), aes(y = ..count.. * (-1))) + 
  scale_y_continuous(breaks = seq(-40, 40, 10), labels = abs(seq(-40, 40, 10))) + 
  coord_flip() 

关于r - 带有 ggplot2 和 dplyr(而不是 plyr)的人口金字塔图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31897329/

相关文章:

r - 存储来自 ggplot2 的直方图以供稍后检索

r - 根据另一列中的4个值创建新列

r - 如何在 Shiny 模块中使用 ShinyFiles 包 - 命名空间问题?

r - 为什么 `sapply` 在 R 中处理数据帧中的行比处理列慢得多?

r - 累积粘贴(连接)按另一个变量分组的值

matlab - 在Matlab中从声音文件的原始数据绘制语音数据

python - 如何更改 Seaborn FacetGrid 中子图标题和轴标签的位置?

r - 将网格一侧的 R 图的轴对齐

python - matplotlib 中的层次结构

r - 将线段添加到现有的小平面网格ggplot r