我想用ggplot2创建一个人口金字塔.之前曾问过这个问题,但我相信解决方案必须简单得多.
test <- (data.frame(v=rnorm(1000), g=c('M','F')))
require(ggplot2)
ggplot(data=test, aes(x=v)) +
geom_histogram() +
coord_flip() +
facet_grid(. ~ g)
Run Code Online (Sandbox Code Playgroud)
生成此图像.在我看来,这里创建人口金字塔的唯一步骤是反转第一个方面的x轴,使其从50变为0,同时保持第二个不变.有人可以帮忙吗?

我想在一个类似于人口金字塔的图上绘制两个变量:

由于我将在下面列出的原因,这个情节几乎存在但不完全.
我使用以下代码制作了这个图:
DATA <- data.frame(
state = c("AK", "TX", "CA", "MT", "NM", "AZ", "NV", "CO", "OR", "WY", "MI", "MN", "UT", "ID", "KS", "NE", "SD", "WA", "ND", "OK"),
sales_staff = c(20,30,40,10,15,35,18,25,22,7,12,22,3,4,5,8,14,28,24,32)
)
set.seed(1)
DATA$sales <- DATA$sales_staff * 50 + (runif(nrow(DATA)) * 1000)
# Order the state factor by number of sales staff so that it is plotted in that order
DATA$state <- factor(DATA$state, levels = DATA[order(DATA$sales_staff),"state"])
Run Code Online (Sandbox Code Playgroud)
我想背靠背"粘合"两个图,所以我使用了多个()函数来自http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_%28ggplot2%29/
(为简洁起见,我不会在这里重现该功能的代码)
我的最终情节代码是:
library(ggplot2)
g1 <- ggplot(data = DATA, aes(x = …Run Code Online (Sandbox Code Playgroud) 对于示例数据集,我按国家/地区创建金字塔图,显示人口中超重男性和女性的级别(%).
library(plotrix)
xy.males.overweight<-c(23.2,33.5,43.6,33.6,43.5,43.5,43.9,33.7,53.9,43.5,43.2,42.8,22.2,51.8,
41.5,31.3,60.7,50.4)
xx.females.overweight<-c(13.2,9.4,13.5,13.5,13.5,23.7,8,3.18,3.9,3.16,23.2,22.5,22,12.7,12.5,
12.3,10,0.8)
agelabels<-c("uk","scotland","france","ireland","germany","sweden","norway",
"iceland","portugal","austria","switzerland","australia","new zealand","dubai","south africa",
"finland","italy","morocco")
par(mar=pyramid.plot(xy.males.overweight,xx.females.overweight,labels=agelabels,
gap=9))
Run Code Online (Sandbox Code Playgroud)
我在这里使用'plotrix'找到了这种方法:https://stats.stackexchange.com/questions/2455/how-to-make-age-pyramid-like-plot-in-r
我希望创建一个稍微更详细的金字塔图,两边都添加一个堆积条形图,显示男性和女性的超重和百分比肥胖(最好是红色/蓝色的不同色调)."肥胖"的示例数据值如下:
xx.females.obese<-c(23.2,33.5,43.6,33.6,43.5,23.5,33.9,33.7,23.9,43.5,18.2,22.8,22.2,31.8,
25.5,25.3,31.7,28.4)
xy.males.obese<-c(13.2,9.4,13.5,13.5,13.5,23.7,8,3.18,3.9,3.16,23.2,22.5,22,12.7,12.5,
12.3,10,0.8)
Run Code Online (Sandbox Code Playgroud)
此外,如果图表上的"年龄"可以更改(到国家/地区),那将有所帮助.
非常感谢您的任何帮助/建议.我愿意在适当时使用plotrix或ggplot2.
我创建了金字塔,如图,我想为图的每一面添加标签(类似于构面标签).
我的数据:
dt <- data.frame(Answer = factor(x = rep(x = c(1:3), times = 2),
labels = c("Yes", "No", "Maybe")),
Gender = factor(x = rep(x = c(1:2), each = 3),
labels = c("Female", "Male")),
Prc = c(74.4, 25.0, 0.6, 61.3, 35.5, 3.2),
label = c("74.4%", "25.0%", "0.6%", "61.3%", "35.5%", "3.2%"))
Run Code Online (Sandbox Code Playgroud)
我的情节:

我的剧情生成代码:
xmi <- -70
xma <- 80
library(ggplot2)
ggplot(data = dt, aes(x = Answer, fill = Gender)) +
geom_bar(stat = "identity", subset = .(Gender == "Female"), aes(y = Prc)) + …Run Code Online (Sandbox Code Playgroud)