簡體   English   中英

R條形圖-排序后保持相同的顏色

[英]R barplot - keep same colours after sorting

我想一個接一個地繪制3個變量(a,b,c)的百分比。 因此,對於變量abc ,我有一組活動的矩陣(%)。

dta = structure(c(0.0073, 0.1467, 0.0111, 0.0294, 0.0451, 0.0031, 0.1823, 
        0.0452, 0.2212, 0.1123, 7e-04, 0.1138, 0.0723, 0.1649, 0.0634), 
        .Dim = c(5L, 3L), 
        .Dimnames = list(c("c Work", "e Travel/Commute", 
                           "f Cooking", "g Housework", "h Odd jobs"),
                         c("a", "b", "c")))

但是,我想對每個變量進行排序,並為活動集保留相同的顏色。

這就是活動的顏色。

library(RColorBrewer) 

rc = c(brewer.pal(n = 5, name = 'Set2'))  

kol = list()
kol$act <- c("c Work", "e Travel/Commute", "f Cooking", "g Housework", "h Odd jobs" )
kol$colours <- rc
kol = as.data.frame(kol)

               act colours
1           c Work #66C2A5
2 e Travel/Commute #FC8D62
3        f Cooking #8DA0CB
4      g Housework #E78AC3
5       h Odd jobs #A6D854

這是我的助手

par(mfrow = c(2,2))
barplot(dta[,1], horiz = T, las = 2, col = kol$colours)
barplot(dta[,2], horiz = T, las = 2, col = kol$colours)
barplot(dta[,3], horiz = T, las = 2, col = kol$colours)

所以我想對活動進行排序以保持相同的顏色

par(mfrow = c(2,2))
barplot(sort(dta[,1]), horiz = T, las = 2)
barplot(sort(dta[,2]), horiz = T, las = 2)
barplot(sort(dta[,3]), horiz = T, las = 2)

如何使它“匹配”?

您可以使用功能match來匹配“實體”的名稱和所需的顏色,例如,用於第一列:

kol$colours[match(names(sort(dta[,1])), kol$act)]

因此,要獲取您的barplot,只需執行以下操作:

par(mfrow = c(2,2), mar=c(5, 8, 4, 1)) # also modifying the margins to make the names fit in
for (i in 1:3) {
    barplot(sort(dta[,i]), horiz = T, las = 2, col=kol$colours[match(names(sort(dta[, i])), kol$act)])
}

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM