使用多个节点

时间:2017-10-06 06:40:48

标签: r ggplot2 data-visualization hierarchical-data

我正在三个城市的三个行业分类层面对工业就业进行可视化和比较。这是5,354个数据点。我需要美化和澄清可视化,以便比较分类级别和分类级别中的最大行业。大多数行业都太小而无法在这种规模上单独区分,但无论如何都要将它们包括在内以构成整体情况。

这是一个分区布局图(在Mac上,Windows的结果不太精确): enter image description here

栏内的数字是行业代码,而非就业数字。请注意,嵌套行业在图表中对齐。

以下是图表的代码:

# Order by descending NAICS code: KEY to diagram appearance
temp1 <- temp1[with(temp1, order(cbsa_name, naics_level, -naics)),]

# Plot partition layout/table
library(ggplot2)
lg2lb <- colorRampPalette(c("light green", "light blue"))(3)
textsize=14
pt <- theme(panel.grid.major=element_blank(), panel.grid.minor=element_blank(), 
            panel.background=element_blank(), panel.border=element_blank(), 
            plot.title=element_text(size=textsize), legend.position="none", 
            legend.background=element_blank(), legend.key=element_blank(), 
            legend.justification=c(1,1), legend.text=element_text(size=textsize), legend.title=element_text(size=textsize), 
            axis.line=element_line(colour="black"), axis.text=element_text(size=textsize, colour="black"), 
            axis.title=element_text(size=textsize), strip.text.x=element_text(size=textsize), strip.background=element_blank())
ggplot(temp1, aes(naics_level, emp_est/1000, fill=factor(naics_level))) + pt + 
  scale_y_continuous(limits = c(0, 2565)) + 
  geom_bar(stat="identity", size=.2, position='stack', col=1, width = 1) + scale_fill_manual(values=lg2lb) + 
  geom_text(aes(label=naics, size=emp_est/sum(emp_est)), position=position_stack(vjust = 0.5)) + 
  facet_wrap(~cbsa_name, strip.position="top") + labs(x="Niveaux de nomenclature", y="Emploi 2015 (milliers)")

我希望通过更好地管理较小的堆栈来改善图表的外观。我可以想到几个解决方案,但我不知道如何实现它们。您认为哪一种效果最好?可能还有更好的想法,甚至不涉及这种类型的图表。

1)删除无论如何太小而无法区分的条形标签: 我尝试用size=emp_est/sum(emp_est)代替size=ifelse(emp_est/sum(emp_est)>5, emp_est/sum(emp_est), 0)上面的代码,但它不起作用,因为它显然将所有剩余标签设置为相同的大小。问题可能是ifelse()在aes()中不起作用。查看结果(这次在Windows上生成): enter image description here

2)调整条形标签尺寸,使它们不会以较小的尺寸从条形图中伸出(如上图第一张图所示)。什么尺寸的功能可以帮助我?

3)用标有“#34;”的许多小型工业取代相邻难以辨认的酒吧捆绑#34;。

4)还有其他想法吗?

我会在将来的编辑中尝试将数据发布到此处。 编辑:我的数据(太大了,无法粘贴):https://zerobin.net/?1faa4f697b2835fe#GjapzLQ1f/ncwNS5bqyh6tHpgE8sG2RMaKMZoYOA3Mk=

1 个答案:

答案 0 :(得分:1)

一种解决方案是仅打印具有高就业率的行业代码。我创建了一个单独的行业标签,并在geom_text中使用它。

# create industry label, set blank for employment < 50000
temp1$naics_label <- temp1$naics
temp1$naics_label[temp1$emp_est < 50000] <- ""

ggplot(temp1, aes(naics_level, emp_est/1000, fill=factor(naics_level))) + pt + 
  scale_y_continuous(limits = c(0, 2565)) + 
  geom_bar(stat="identity", size=.2, position='stack', col=1, width = 1) + 
  scale_fill_manual(values=lg2lb) +
  geom_text(aes(label=naics_label, size=emp_est/sum(emp_est)), position=position_stack(vjust = 0.5)) + 
  facet_wrap(~cbsa_name, strip.position="top") + labs(x="Niveaux de nomenclature", y="Emploi 2015 (milliers)")

enter image description here

另一个解决方案是将aes填充颜色设置为就业数字,以强调行业规模,因为很难从叠加的条形图中确定。我在scale_fill_distiller中使用了颜色酿酒器调色板。

pt2 <- theme(panel.grid.major=element_blank(), panel.grid.minor=element_blank(), 
         panel.background=element_blank(), panel.border=element_blank(), 
         plot.title=element_text(size=textsize), 
         legend.justification=c(1,1), legend.text=element_text(size=textsize-2), legend.title=element_text(size=textsize), 
         axis.line=element_line(colour="black"), axis.text=element_text(size=textsize, colour="black"), 
         axis.title=element_text(size=textsize), strip.text.x=element_text(size=textsize), strip.background=element_blank())

ggplot(temp1, aes(naics_level, emp_est/1000, fill=emp_est)) + pt2 + 
  scale_y_continuous(limits = c(0, 2565)) + 
  geom_bar(stat="identity", size=.2, position='stack', col=1, width = 1) + 
  geom_text(aes(label=naics_label, size=emp_est/sum(emp_est)), position=position_stack(vjust = 0.5)) + 
  scale_fill_distiller("Emploi", type = "div", palette = "RdYlBu", direction = -1) +
  guides(size=FALSE) +
  facet_wrap(~cbsa_name, strip.position="top") + labs(x="Niveaux de nomenclature", y="Emploi 2015 (milliers)")

enter image description here