如果不向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" )
答案 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)
答案 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)
答案 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")