在R的条形图中添加值时遇到问题。问题是我无法将值放在每个条的中间
balance<- c(-4.3963714,0.2335795,-0.2777250,-2.0037130,-1.2526801, -6.4556516)
barnames<-c("E1","E11","E12","E5","E7","E9")
barplot(balance,ylim=c(-8,2),col=c(if ((balance[1])>0) "blue" else "red",(if ((balance[2])>0) "blue" else "red"),(if ((balance[3])>0) "blue" else "red"), (if ((balance[4])>0) "blue" else "red"),(if ((balance[5])>0) "blue" else "red"), (if ((balance[6])>0) "blue" else "red")),main="Balance del Stock de Carbono",names.arg= barnames,ylab="Variacion del Stock de C kg/m2")
abline(h=0)
text((balance/2),labels=round(balance,digits=2))
这是情节:
答案 0 :(得分:1)
您需要保存的是barplot
返回的小节的x位置。
您还可以简化col
参数。使用ifelse
的向量化版本if
。
bp <- barplot(balance, ylim = c(-8, 2),
col = ifelse(balance > 0, "blue", "red"),
main = "Balance del Stock de Carbono",
names.arg = barnames,
ylab="Variacion del Stock de C kg/m2")
abline(h=0)
text(bp, balance/2, labels = round(balance, digits = 2))
答案 1 :(得分:1)
如果您不介意使用ggplot2
,则可以使标签看起来更好
library(tidyverse)
tibble(barnames, balance) %>%
mutate(lab_loc = balance/2
, col = factor(sign(balance))) %>%
ggplot(aes(x = barnames, y = balance)) +
geom_col(aes(fill = col)) +
geom_label(aes(y = lab_loc, label = round(balance, 2))) +
scale_fill_manual(name = 'sign', values = c('1' = 'blue', '-1' = 'red')) +
ylab('Variacion del Stock de C kg/m2') +
ggtitle('Balance del Stock de Carbono') +
theme(plot.title = element_text(hjust = 0.5))