R 带有负值的水平条形图问题

R 带有负值的水平条形图问题,r,ggplot2,bar-chart,R,Ggplot2,Bar Chart,我有以下数据 d1 d2 a -9.278 b -5.582 c -5.266 d -5.01 e -3.833 我有以下代码: library(ggplot2) dat<-read.csv("input.csv",sep=",") dat1<-dat[,-3] ggplot(dat11,aes(x = d1, y = d2)) + geom_bar(fill="#e34a33",width=0.34,stat="identity") + scale

我有以下数据

d1  d2
a   -9.278
b   -5.582
c   -5.266
d   -5.01
e   -3.833
我有以下代码:

library(ggplot2)

dat<-read.csv("input.csv",sep=",")
dat1<-dat[,-3]

ggplot(dat11,aes(x =  d1, y = d2)) + 
geom_bar(fill="#e34a33",width=0.34,stat="identity") + 
scale_x_discrete(limits=dat1$d1) + 
  coord_flip() +
  theme_bw() + theme(legend.position = "none", panel.grid.major=element_blank(),
                     panel.grid.minor=element_blank(),legend.key = 
element_blank(),axis.title.x = element_text(size=15),axis.text.x = 
element_text(size=16), axis.title.y = 
element_text(size=15),axis.text.y=element_text(size=17),
panel.border = element_rect(colour = "black",size=0.7))
库(ggplot2)

dat我知道当值为负值时,
ggplot
无法很好地处理水平条(这就是旋转图像从左向右的原因)。以下是获取所需内容的基本技巧,但可能有更好的方法:

#I start by converting y into positive numbers
ggplot(dat11,aes(x =  d1, y = d2*(-1))) + 
  geom_bar(fill="#e34a33",width=0.34,stat="identity") +
  #then I use scale_y_continuous to specify the breaks i.e. the ticks to appear
  #and also use labels to label them as negative numbers
  #everything else stayed the same 
  scale_y_continuous(breaks = c(0, 2.5, 5.0, 7.5, 10), labels = c('0', '-2.5', '-5.0', '-7.5', '-10') ) + 
  coord_flip(ylim = c(0, 10)) +
  theme_bw() + theme(legend.position = "none", panel.grid.major=element_blank(),
                     panel.grid.minor=element_blank(),legend.key = 
                       element_blank(),axis.title.x = element_text(size=15),axis.text.x = 
                       element_text(size=16), axis.title.y = 
                       element_text(size=15),axis.text.y=element_text(size=17),
                     panel.border = element_rect(colour = "black",size=0.7))
输出:


在OP中的代码中添加
scale\u y\u reverse
难道还不够吗?谢谢@Henrik,是的,它实际上更好
coord\u flip(ylim=c(-10,0))
+
scale\u y\u reverse()。如果我是你,我会加上它作为一个新的答案:)