我想在一个类似于人口金字塔的图上绘制两个变量,如下所示:
这个情节是almost那里但不完全是,原因我将在下面列出。
我用以下代码生成了这个图:
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"])
我想连续“粘合”两个图,所以我逐字使用 multiplot() 函数http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_%28ggplot2%29/ http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_%28ggplot2%29/
(为了简洁和清晰起见,我不会在此处重现该函数的代码)
我的最终情节的代码是:
library(ggplot2)
g1 <- ggplot(data = DATA, aes(x = state, y = sales_staff)) +
geom_bar(stat = "identity") + ggtitle("Number of sales staff") +
theme(axis.title.x = element_blank(), axis.title.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank(), plot.margin = unit(c(1,0,1,0), "mm")) +
scale_y_reverse() + coord_flip()
g2 <- ggplot(data = DATA, aes(x = state, y = sales)) +
geom_bar(stat = "identity") + ggtitle("Sales (x $1000)") +
theme(axis.title.x = element_blank(), axis.title.y = element_blank(), plot.margin = unit(c(1,5,1,0), "mm")) +
coord_flip()
multiplot(g1, g2, cols = 2)
好的。那么这个剧情有什么问题呢?
- 我需要获取左图右轴上的刻度线。我不知道该怎么做。
- 两个图的宽度不同。这是因为中间的状态是右侧图的轴标签,并使用该图的一些空间。
我在让这个情节达到“制作质量”方面遇到了困难。我开始怀疑我是否以错误的方式处理这个问题,因为我认为下一步将是将轴标签绘制为两个图之间的单独的第三列。 (我还不知道该怎么做)。这将解决“同等大小”问题并允许我添加“州”标题,因此它可能仍然是可行的方法。但我就是忍不住想知道是否有更简单的方法......
任何建议或帮助表示赞赏!