2017-10-06 42 views
1

我在三個城市的工業分類三個層次上對產業進行了可視化和比較。這是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=ifelse(emp_est/sum(emp_est)>5, emp_est/sum(emp_est), 0)上面size=emp_est/sum(emp_est)代碼代替,但它不工作,因爲它顯然將所有剩餘的標籤在相同的尺寸。問題可能是,ifelse()在aes()中不起作用。查看結果(這次是在Windows上生成的): enter image description here

2)調整條形標籤的大小,使它們不會以較小的尺寸伸出酒吧(如您在上面的第一個圖表中看到的那樣)。多大的功能可以幫助我呢?

3)用一個標籤爲「這裏有許多小工業」的單條代替相鄰的難以辨認的酒吧。

4)有沒有其他的想法?

我會在未來的編輯中嘗試發佈我的數據。 編輯:我的數據(太大不能粘貼在這裏):https://zerobin.net/?1faa4f697b2835fe#GjapzLQ1f/ncwNS5bqyh6tHpgE8sG2RMaKMZoYOA3Mk=

+0

你提的問題是非常具體的,所以你必須張貼例如數據來檢驗我們的解決方案 – PoGibas

+1

@PoGibas我只是做了。 – syre

+0

@ R.S。我不確定我明白。從圖表來看,哪個行業最大?酒吧內的數字是行業代碼,而不是就業數字(我剛剛編輯了OP來反映這一點)。這個想法是快速識別最大的行業。感謝您對填充顏色的建議!(PS:我想提高你的評論,但你因爲某種原因撤回了它。) – syre

回答

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

+0

謝謝! Windows會弄亂一切,所以我必須調整字體大小。特別是酒吧標籤過大。將任何係數x應用於'size = x * emp_est/sum(emp_est)'奇怪地不影響圖中的字體大小。你知道如何解決這個問題嗎? – syre

+1

我相信你可以在'scale_size' - 「範圍內設置尺寸參數的最小值和最大值的範圍:一個長度爲2的數字向量,指定轉換後繪圖符號的最小和最大尺寸。」像'scale_size(range = c(0.5,2))'應該有效。 – Djork