R ggplot2里面一般没有比较合适的自适应双坐标图, 在这里我们引入一个coeff参数, 对第二个坐标的数据进行等比的扩大和缩放, 具体做法为: 在数据框里面第二y轴的数据 * coeff, 而在ggplot2的 sec_axis() 函数里面设置相同的 ~/coeff, 即可以通过设置coeff值的大小对另外一个坐标的柱状图进行等比缩放, 使得原本看上去很小的差异或者因为第一y轴数据偏大对第二y轴数据的遮盖, 例如从 31 变成 77 的柱子, 在视觉上有一个明显的增长.

library(ggplot2)
library(reshape2)
library(ggsci)

databar <- read.table("center.txt",sep = '\t',header = T)

coeff <- 20

for(i in 1:NCOL(databar[1,])){
  if(is.numeric(databar[1,i])){
    databar[1,i] <- databar[1,i] * coeff
  }
}

df <- melt(databar)

colnames(df)[1] <- 'Methods'

df$Methods<- factor(df$Methods,levels =c("numberOfGroup","Incomes"))

q1<-ggplot(data=df, mapping=aes(x = variable, y = value,fill=Methods))+
  geom_bar(stat="identity",position=position_dodge(0.7),width = 0.6) +
  scale_fill_manual(values = c(rgb(r=69,g=114,b=167,maxColorValue = 255),
                    rgb(r=219,g=132,b=61,maxColorValue = 255))) +
  theme_bw()+
  theme(panel.grid.major=element_blank(),legend.position = "bottom",
        legend.title = element_blank(),
        panel.grid.minor=element_blank(),
        text=element_text(size = 18,face = 'bold'),
        axis.text.y= element_text(size=13,colour = 'black'), # 设置y轴的数字大小
        axis.text.x = element_text(size=10,colour = 'black'))+labs(x='',y='')

## 只需增加下边这一行就行啦####
q1 <- q1 + scale_y_continuous(sec.axis = sec_axis(~. /coeff, name = ""),
                                expand = c(0,0),limits = c(0,800))
## plot
q1