如何用与正形相同的彩色形状绘制负面条?
我的DF具有两个数值变量(正值和负值)和2个分类变量。由于我想绘制具有相同彩色形状/边界的负面条形我在数据框架中手动指定颜色并使用适当的代码。我的问题是如何避免提前指定颜色,让R使用随机颜色,但将空间保留在负条中?
df <- data.frame(model = c("A","B","C","D","B","C"),
category = c("origin", "origin","origin","abroad","abroad","abroad"),
pos = c(40,50,45,100,105,80),
neg = c(-10,-5,-4,-16,-7,-2),
Colour = c("chocolate","deeppink4","yellow","steelblue3","deeppink4","yellow"))
Colour <- as.character(df$Colour)
Colour <- c(Colour,"white")
names(Colour) <- c(as.character(df$model),"white")
df <- df %>% pivot_longer(., cols=c('pos','neg'),
names_to = 'sign') %>%
mutate(Groups = paste(category, model),
sign = factor(sign, levels = c("neg", "pos")))
bar2 <- ggplot(df, aes(value, tidytext::reorder_within(model, value, category),
fill = ifelse(sign == "neg", "white", model),
color = model))+
geom_col(position = "stacked") +
scale_fill_manual(values = Colour, breaks = df$model) +
scale_color_manual(values = Colour, breaks = df$model) +
tidytext::scale_y_reordered() +
labs(fill = "model") +
facet_grid(category ~ ., switch = "y",scales = "free_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"))+theme(legend.position="none") +
labs( title = "BarPlot",
subtitle = "changes",
y = " ")
bar2
My df has two numerical variables (positive and negative values) and 2 categorical variables. since I want to plot negative bars with same coloured shape/boundaries I specify colours manually in the dataframe and use appropriate code. My question is how to avoid specifying colours in advance and let R to use random colors but keep the white space inside the negative bars?
df <- data.frame(model = c("A","B","C","D","B","C"),
category = c("origin", "origin","origin","abroad","abroad","abroad"),
pos = c(40,50,45,100,105,80),
neg = c(-10,-5,-4,-16,-7,-2),
Colour = c("chocolate","deeppink4","yellow","steelblue3","deeppink4","yellow"))
Colour <- as.character(df$Colour)
Colour <- c(Colour,"white")
names(Colour) <- c(as.character(df$model),"white")
df <- df %>% pivot_longer(., cols=c('pos','neg'),
names_to = 'sign') %>%
mutate(Groups = paste(category, model),
sign = factor(sign, levels = c("neg", "pos")))
bar2 <- ggplot(df, aes(value, tidytext::reorder_within(model, value, category),
fill = ifelse(sign == "neg", "white", model),
color = model))+
geom_col(position = "stacked") +
scale_fill_manual(values = Colour, breaks = df$model) +
scale_color_manual(values = Colour, breaks = df$model) +
tidytext::scale_y_reordered() +
labs(fill = "model") +
facet_grid(category ~ ., switch = "y",scales = "free_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"))+theme(legend.position="none") +
labs( title = "BarPlot",
subtitle = "changes",
y = " ")
bar2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
将正面和负条绘制为单独的层:
Plot positive and negative bars as separate layers: