我有下图,我想突出显示西瓜的列(两列),因为它具有最高的果汁含量和重量。我知道如何更改列的颜色,但我想突出显示整个列。关于如何实现这一目标的任何想法?网上好像没有类似的。

fruits <- c("apple","orange","watermelons")
juice_content <- c(10,1,1000)
weight <- c(5,2,2000)
df <- data.frame(fruits,juice_content,weight)
df <- gather(df,compare,measure,juice_content:weight, factor_key=TRUE)
plot <- ggplot(df, aes(fruits,measure, fill=compare)) + geom_bar(stat="identity", position=position_dodge()) + scale_y_log10()

r - 如何突出显示ggplot2中的列-LMLPHP

最佳答案

您可以使用 geom_area 突出显示栏后面。您必须首先强制 x 比例为离散,这就是为什么我使用 geom_blank (请参阅此答案 geom_ribbon overlay when x-axis is discrete )注意到 geom_ribbongeom_area 实际上相同,除了 geom_area 始终将 0 作为 ymin

#minor edit so that the level isn't hard coded
 watermelon_level <- which(levels(df$fruits) == "watermelons")

AreaDF <- data.frame(fruits = c(watermelon_level-0.5,watermelon_level+0.5))


plot <- ggplot(df, aes(fruits)) +
  geom_blank(aes(y=measure, fill=compare))+
  geom_area(data = AreaDF, aes( y = max(df$measure)), fill= "yellow")+
  geom_bar(aes(y=measure, fill=compare),stat="identity", position=position_dodge()) + scale_y_log10()
r - 如何突出显示ggplot2中的列-LMLPHP
编辑以解决评论
如果你想突出多个水果,那么你可以做这样的事情。您需要一个 data.frame,其中包含您想要 geom_area x 和 y 的位置,包括将其置于 0 之间。我确信获取 data.frame 有一些更整洁的方法,但这个方法有效
highlight_level <- which(levels(df$fruits) %in% c("apple", "watermelons"))

AreaDF <- data.frame(fruits = unlist(lapply(highlight_level, function(x) c(x -0.51,x -0.5,x+0.5,x+0.51))),
                     yval = rep(c(1,max(df$measure),max(df$measure),1), length(highlight_level)))




AreaDF <- AreaDF %>% mutate(
  yval = ifelse(floor(fruits) %in% highlight_level & ceiling(fruits) %in% highlight_level, max(df$measure), yval)) %>%
  arrange(fruits) %>% distinct()


plot <- ggplot(df, aes(fruits)) +
  geom_blank(aes(y=measure, fill=compare))+
  geom_area(data = AreaDF, aes(y = yval ), fill= "yellow")+
  geom_bar(aes(y=measure, fill=compare),stat="identity", position=position_dodge()) + scale_y_log10()
plot
r - 如何突出显示ggplot2中的列-LMLPHP

关于r - 如何突出显示ggplot2中的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58866575/

10-12 17:07