使用多个节点可视化分层数据
我在三个城市的工业分类三个层次上对产业进行了可视化和比较。这是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=ifelse(emp_est/sum(emp_est)>5, emp_est/sum(emp_est), 0)
上面size=emp_est/sum(emp_est)
代码代替,但它不工作,因为它显然将所有剩余的标签在相同的尺寸。问题可能是,ifelse()在aes()中不起作用。查看结果(这次是在Windows上生成的):
2)调整条形标签的大小,使它们不会以较小的尺寸伸出酒吧(如您在上面的第一个图表中看到的那样)。多大的功能可以帮助我呢?
3)用一个标签为“这里有许多小工业”的单条代替相邻的难以辨认的酒吧。
4)有没有其他的想法?
我会在未来的编辑中尝试发布我的数据。 编辑:我的数据(太大不能粘贴在这里):https://zerobin.net/?1faa4f697b2835fe#GjapzLQ1f/ncwNS5bqyh6tHpgE8sG2RMaKMZoYOA3Mk=
一个解决方案是打印只有高就业行业代码。我创建了一个单独的行业标签,并在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)")
你提的问题是非常具体的,所以你必须张贴例如数据来检验我们的解决方案 – PoGibas
@PoGibas我只是做了。 – syre
@ R.S。我不确定我明白。从图表来看,哪个行业最大?酒吧内的数字是行业代码,而不是就业数字(我刚刚编辑了OP来反映这一点)。这个想法是快速识别最大的行业。感谢您对填充颜色的建议!(PS:我想提高你的评论,但你因为某种原因撤回了它。) – syre