【问题标题】:How do highlight a single bar in a barchart using ggplot2? [duplicate]如何使用 ggplot2 突出显示条形图中的单个条形? [复制]
【发布时间】:2023-03-11 20:08:01
【问题描述】:

我对编码非常陌生,并且知道这可能是在这里做很多事情的不好方法,尤其是索引,但具体来说,我想知道如何突出显示第 9 周的条形图。现在电流输出如下图。2

我的数据框也如下图所示。 1

russ_graph<-ggplot(data=russ2020, aes(x=russ2020$week, y=russ2020$`round(mean(epa), 3)`)) + 
  geom_bar(stat="identity")+
  ggtitle("Let Russ Cook?")+
  annotate("text", x = 9, y = -0.25, label = "Russ Trademarks")+
  annotate("text", x = 9, y = -0.3, label = "\"Let Russ Cook\"")+
  theme(plot.title = element_text(hjust = 0.5))+
  xlab("Week") + ylab("EPA per Play")+
  scale_x_continuous(russ2020$week, labels = as.character(russ2020$week), breaks = russ2020$week)+
  geom_text(aes(label=russ2020$`round(mean(epa), 3)`), vjust=2, size=2.5)

【问题讨论】:

  • 请提供您的部分数据。 dput(data)
  • 图片不是发布数据(或代码)的好方法。请参阅this Metarelevant xkcd。您可以以dput 格式发布示例数据吗?请使用您尝试过的代码和dput(russ2020) 的输出编辑问题。另外,通过突出显示您的意思是让第 9 条显示为不同的颜色吗?如果是,请参阅this SO post
  • 您可以添加另一个 geom_bar() 图层,但使用不同的数据框(仅包含 1 行,第 9 周的那一行),并为该图层赋予不同的颜色。 geom_bar(data = russ_w9, aes(round(mean(epa), 3)) ), color="red")。顺便说一句,你可以省略russ2020前缀,你可以只写week而不是russ2020$week
  • 谷歌搜索您的逐字问题时的第一个链接stackoverflow.com/q/45820250/7941188

标签: r ggplot2


【解决方案1】:

这可以通过有条件地映射fill 来实现,例如ifelse 并通过scale_fill_manual 设置所需的填充颜色:

注意:我还将平均值的笨拙列名称重命名为更易于使用的mean_epa

library(ggplot2)
library(dplyr)

set.seed(42)
russ2020 <- tibble(
  week = 1:18,
  "round(mean(epa), 3)" = round(rnorm(18, mean = 0.5),3)
)
russ2020 <- rename(russ2020, mean_epa = `round(mean(epa), 3)`)

ggplot(data=russ2020, aes(x=week, y=mean_epa)) + 
  geom_bar(aes(fill = ifelse(week == 9, "high", "default")), stat="identity")+
  scale_fill_manual(values = c(high = "steelblue", default = "grey45")) +
  ggtitle("Let Russ Cook?")+
  annotate("text", x = 9, y = -0.25, label = "Russ Trademarks")+
  annotate("text", x = 9, y = -0.3, label = "\"Let Russ Cook\"")+
  theme(plot.title = element_text(hjust = 0.5))+
  xlab("Week") + ylab("EPA per Play")+
  scale_x_continuous(breaks = unique(russ2020$week))+
  geom_text(aes(label=mean_epa), vjust=2, size=2.5) +
  guides(fill = FALSE)

【讨论】:

  • 哇,谢谢。这非常有帮助。我最后担心的是 mean_epa 数据似乎没有反映初始数据集的数据。这是有原因的吗?
猜你喜欢
  • 2018-10-03
  • 2014-04-04
  • 2020-06-22
  • 2019-03-26
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 2022-08-12
相关资源
最近更新 更多