我正在三个城市的三个行业分类层面对工业就业进行可视化和比较。这是5,354个数据点。我需要美化和澄清可视化,以便比较分类级别和分类级别中的最大行业。大多数行业都太小而无法在这种规模上单独区分,但无论如何都要将它们包括在内以构成整体情况。
这是一个分区布局图(在Mac上,Windows的结果不太精确):
栏内的数字是行业代码,而非就业数字。请注意,嵌套行业在图表中对齐。
以下是图表的代码:
# 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上生成):
2)调整条形标签尺寸,使它们不会以较小的尺寸从条形图中伸出(如上图第一张图所示)。什么尺寸的功能可以帮助我?
3)用标有“#34;”的许多小型工业取代相邻难以辨认的酒吧捆绑#34;。
4)还有其他想法吗?
我会在将来的编辑中尝试将数据发布到此处。 编辑:我的数据(太大了,无法粘贴):https://zerobin.net/?1faa4f697b2835fe#GjapzLQ1f/ncwNS5bqyh6tHpgE8sG2RMaKMZoYOA3Mk=
答案 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)")
另一个解决方案是将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)")