ggplot2 - 突出显示最小/最大栏

时间:2011-12-12 20:15:21

标签: r ggplot2

如果不向data.frame添加额外的列,是否有内置的方法来突出显示最小/最大值?在下面的示例中,我希望Joe栏为绿色(最大),John栏为红色(最小)。

我确信之前已经问过这个问题,但在搜索时我找不到:

data= data.frame( Name = c("Joe","Jane", "John") , Value = c(3,2,1) )
ggplot(data=data)+geom_bar(aes_string(x="Name",y="Value"), stat="identity" )

4 个答案:

答案 0 :(得分:4)

您可以使用子集:

p <- ggplot(data=data)+
     geom_bar(aes(x=Name, y=Value), stat="identity") +
     geom_bar(data=subset(data, Value==min(Value)), aes(Name, Value),
              fill="red", stat="identity") +
     geom_bar(data=subset(data, Value==max(Value)), aes(Name, Value),
              fill="green", stat="identity")
print(p)

ggplot2 output

答案 1 :(得分:1)

你去吧

ggplot(data, aes(Name, Value)) + 
 geom_bar(stat = 'identity') + 
 geom_bar(stat = 'identity', aes(fill = factor(Value)), 
   subset = .(Value %in% range(Value))) +    
 scale_fill_manual(values = c('red', 'green'))

答案 2 :(得分:1)

我想我会采用ifelse方法一次性完成:

ggplot(data=data) + 
  geom_bar(aes_string(x="Name",y="Value", fill='factor(ifelse(Value==max(Value), 3, ifelse(Value==min(Value), 2, 1)))'), stat="identity" ) + 
  scale_fill_manual(values=c('gray20', 'red', 'green'), legend=F)

enter image description here

答案 3 :(得分:1)

以下是通过which.min()which.max()使用逻辑索引的一个选项:

ggplot(data, aes(Name, Value, stat = "identity")) + 
  geom_bar() +
  geom_bar(data = data[which.min(data$Value),], fill = "red") +
  geom_bar(data = data[which.max(data$Value),], fill = "green")