我有一個鏡像條形圖,我想避免鏡像條并有相同的圖表,但每個類別有 2 列:
- 負數和正數(首先是右側的正值和左側的負值下方)
- 顏色必須由“模型”分類變數確定,并且 pos 和 neg 值需要不同,如全彩色條 = 正、有界(具有相同顏色)但未填充條 = 負。
- 此外,基于美國的值必須位于頂部,基于加拿大的值必須位于下方
df <- data.frame (Origin = c("Canada", "Canada","Canada", "Canada","Canada", "Canada","USA","USA","USA","USA","USA","USA"),
Model = c("A","B","C","D","E","F","A","B","C","D","E","F"),
poschange = c(60, 45,34,56, 65, 44,40, 55, 35, 24,34,12),
negchange = c(-5,-2,-0.5,-2,-1,-0.05,-1,-3,-0.1,-3,-1.5,-0.9))
require(dplyr)
require(ggplot2)
require(tidyr)
df2 <- df %>% pivot_longer(., cols=c('poschange','negchange'),
names_to = 'value_category')
df2 <- df2 %>% mutate(Groups = paste(Origin, Model))
df2 <- df2 %>% mutate(label_position=ifelse(value>0, value-5,value-8)) # adjusting label position
df2 %>% arrange(value) %>% ggplot(aes(x=value, y=reorder(Groups,value),
fill=value_category,
group=value_category))
geom_col(width=0.75)
coord_flip()
輸出:
所需的輸出(類似這樣,但顏色必須對應于 Model cat.variable):
uj5u.com熱心網友回復:
也許是這樣的?
- 使用
ifelse
陳述句將負值標記為“白色” - 要擁有
fill
白色,請scale_fill_manual
與my_color
調色板一起使用 - 為避免“鏡像”條,請使用
position = "dodge"
- 要同時擁有負值和正值,您需要交換您的
x
和y
論點ggplot
- 為避免在 x 軸上重疊文本,請使用
theme(axis.text.x = element_text(angle = 90))
- 使用
breaks
兩個scale_xxx_manual
函式中的引數洗掉圖例中的“白色”標簽
library(tidyverse)
df <- data.frame (Origin = c("Canada", "Canada","Canada", "Canada","Canada", "Canada","USA","USA","USA","USA","USA","USA"),
Model = c("A","B","C","D","E","F","A","B","C","D","E","F"),
poschange = c(60, 45,34,56, 65, 44,40, 55, 35, 24,34,12),
negchange = c(-5,-2,-0.5,-2,-1,-0.05,-1,-3,-0.1,-3,-1.5,-0.9))
df2 <- df %>% pivot_longer(., cols=c('poschange','negchange'),
names_to = 'value_category') %>%
mutate(Groups = paste(Origin, Model),
value_category = factor(value_category, levels = c("negchange", "poschange")))
my_color = c("A" = '#7fc97f', "B" = '#beaed4', "C" = '#fdc086',
"D" = '#ffff99', "E" = '#386cb0', "F" = '#f0027f', "white" = "white")
ggplot(df2, aes(value, Model,
fill = ifelse(value_category == "negchange", "white", Model),
color = Model))
geom_col(position = "dodge")
scale_fill_manual(values = my_color, breaks = df2$Model)
scale_color_manual(values = my_color, breaks = df2$Model)
labs(fill = "Model")
facet_grid(Origin ~ ., switch = "y")
theme(axis.text.x = element_text(angle = 90),
strip.background = element_rect(fill = "white"),
strip.placement = "outside",
strip.text.y.left = element_text(angle = 0),
panel.spacing = unit(0, "lines"))
由reprex 包于 2022-05-03 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/471617.html
上一篇:有多個色標時如何覆寫色標?
下一篇:繪制多個數值類別的箱線圖