對于我的專案,我們創建了一個 for 回圈/if else 來使用 RColorBrewer 為紐約市的五個行政區中的每一個分配一種顏色。這是我的 for 回圈代碼供參考。school.safety 是我的資料集。
color_vec<- vector(mode="character",nrow(school.safety))
table(school.safety$Borough)
borough <- unique(school.safety$Borough)
k <- length(borough)
bor_colors <- brewer.pal(k, "Set1")
for ( i in seq_len(nrow(school.safety))){
borough <- school.safety[, "Borough"]
if(borough[i] == "K"){
color_vec[i] <- bor_colors[1]
} else if (borough[i] == "M") {
color_vec[i] <- bor_colors[2]
} else if (borough[i]== "Q") {
color_vec[i] <- bor_colors[3]
} else if (borough [i]== "R") {
color_vec[i] <- bor_colors[4]
} else if (borough[i] == "X") {
color_vec[i] <- bor_colors[5]
} else {
color_vec[i] <- bor_colors[6]
}}
我們現在正在使用 ggplot 使用我們分配的顏色創建一個條形圖,用于按行政區劃分特定事件的頻率。這是我的ggplot代碼:
ggplot(school.safety, aes(school.safety$`Scanning Type`, fill=school.safety$Borough))
geom_bar(mapping = aes( color=color_vec, position="dodge", stat="identity"))
scale_fill_manual(values=c("Brooklyn"="#377EB8" ,"Manhattan"="#4DAF4A","Queens"="#984EA3","Staten Island"="#E41A1C", "Bronx"="#FF7F00"))
xlab("Scanning Type")
ylab("Count")
這是我們的條形圖現在的樣子:

我們如何使用 forloop 中分配的自治市鎮顏色填充 bin 并為顏色/自治市鎮創建一個圖例。此外,如果有人知道如何不堆疊條形圖并為每種掃描型別的每個行政區創建五個單獨的箱。
非常感謝
uj5u.com熱心網友回復:
顏色 vec 不是必需的,我們使用命名向量 in 進行映射scale_fill_manual。
boroughs = unique(school.safety$Borough)
bor_colors = brewer.pal(length(boroughs), "Set1")
names(bor_colors) = boroughs
## now bor_colors is a named vector where the names are boroughs
## and the values are the colors
ggplot(school.safety, aes(x = `Scanning Type`, fill = Borough))
## all the aesthetics at the top is usually nice
geom_bar(position = "dodge")
scale_fill_manual(values = borough_colors)
## give our named vector to the values
labs(x = "Scanning Type", y = "Count", fill = "Borough")
## labels all together is nice
當您已經計算出 y 值并且正在映射 y 美學時,您應該使用stat = "identity"in 。geom_bar你沒有y =你的審美,所以我很確定你不想要stat = "identity"(盡管這只是一個猜測,因為你沒有分享任何樣本資料)。
如果您的資料框borough列具有值 K、M、Q、R、X 而不是實際的行政區名稱,則在運行上述代碼之前,我將borough_name使用您想要的名稱創建一個新列。一種方法是制作一個查找表并加入:
borough_lookup = data.frame(
borough = c("K", "M", "Q", "R", "X"),
borough_name = c("Brooklyn", "Manhattan", "Queens", "Staten Island", "Bronx")
)
school.safety = merge(school.safety, borough_lookup)
如果需要,運行此代碼來創建borough_name列,然后在前面的所有代碼中使用borough_name而不是。borough(創建bor_colors和繪圖代碼。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520900.html
