我有以下示例資料:
library(tidyverse)
df <- data.frame(col=rep(c("A_B", "A_C", "A_D",
"B_A", "C_A", "D_A",
"B_C", "B_D",
"C_B", "D_B",
"C_D", "D_C"), 2),
level=c(rep("lower_level", 12), rep("higher_level", 12)),
value=abs(rnorm(24, mean=5, sd=2)))%>% tibble()
df[c('origin', 'target')] <- str_split_fixed(df$col, '_', 2)
df <- df %>% select(c(origin, target, level, value))
我現在想為每個目標(df %>% filter(target=="A"))創建水平堆疊條形圖。我使用以下代碼執行此操作:
# plot
p1 <- ggplot(data = df %>% filter(target=="A"),
aes(x = factor(level), y = value, fill = factor(origin)))
geom_bar(stat="identity", position="fill", width = .1)
scale_fill_manual(values = c("A"="yellow", "B" = "green", "C"="red", "D"="blue"))
coord_flip()
由于我想稍后合并多個這樣的圖(如下),我想
洗掉 y 軸和條形之間的空白空間(或將其操作為 value
X)將
fill標簽顯示在右側左邊有一個值,表示“目標:A”
并
fill在所有地塊之間共享圖例和 y 軸。
見注釋圖:

作為參考,我使用以下代碼創建了額外的圖:
p2 <- ggplot(data = df %>% filter(target=="B"),
aes(x = factor(level), y = value, fill = factor(origin)))
geom_bar(stat="identity", position="fill", width = .1)
scale_fill_manual(values = c("A"="yellow", "B" = "green", "C"="red", "D"="blue"))
coord_flip()
p3 <- ggplot(data = df %>% filter(target=="C"),
aes(x = factor(level), y = value, fill = factor(origin)))
geom_bar(stat="identity", position="fill", width = .1)
scale_fill_manual(values = c("A"="yellow", "B" = "green", "C"="red", "D"="blue"))
coord_flip()
p4 <- ggplot(data = df %>% filter(target=="D"),
aes(x = factor(level), y = value, fill = factor(origin)))
geom_bar(stat="identity", position="fill", width = .1)
scale_fill_manual(values = c("A"="yellow", "B" = "green", "C"="red", "D"="blue"))
coord_flip()
并將它們與這段代碼結合起來(但如果需要,很樂意使用其他方式來結合它們)。
library("gridExtra")
grid.arrange(p1, p2, p3, p4, ncol = 1, nrow = 4)
uj5u.com熱心網友回復:
這聽起來很像你只是想通過target. 無需在此處拼接多個圖。
ggplot(data = df %>% mutate(target = paste('Target:', target)),
aes(x = factor(level), y = value, fill = factor(origin)))
geom_col(position = "fill", width = 0.9)
scale_fill_manual(values = c("A"="yellow", "B" = "green",
"C"="red", "D"="blue"), name = 'origin')
facet_grid(target~., switch = 'y')
coord_flip()
theme(strip.placement = 'outside',
strip.background = element_blank(),
axis.title.y = element_blank())

uj5u.com熱心網友回復:
兩個建議_
- 要洗掉軸和條之間的偏移,請將軸擴展設定為零
scale_x_continuous(..., expand = c(0,0)) - 使用ggplot的
facet_wrapor選項,而不是繁瑣地對資料框進行子集化:facet_grid
ggplot(data = df,
aes(x = factor(level), y = value, fill = factor(origin)))
## other plot instructions
facet_wrap( ~target)
請參閱?facet_wrap各種布局選項,例如繪圖列數 3. 條之間的垂直間距將調整為輸出尺寸(此處:圖形高度)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/450626.html
上一篇:有誰知道我如何編輯ggMarginal以在此處顯示密度線
下一篇:在R中創建熱圖
