左右柱形图的画法

很多人会问下面的图是怎么做出来的,其实实现的方法有好几种,接下来我们介绍一下几种做如下图的方法:

左右柱形图的画法_第1张图片
Rplot.png

第一种

我们第一种画法来源是书上给的例子,这本书叫《R语言数据可视化之美》,这本有很多画图的例子,感兴趣的朋友们可以买一本多学习学习,话不多说,我们来看代码:


library(ggplot2)

library(RColorBrewer)

library(Cairo)

library(showtext)

mydata<- read.csv("Bar_Data.csv",stringsAsFactors=FALSE)

mydata$Team<-as.character(mydata$Team)

mydata<-transform(mydata, label1=ifelse(Difference>=0, Team, NA),

                  label2=ifelse(Difference>0, NA,Team))

mydata$Team <- factor(mydata$Team, levels = mydata$Team[order(mydata$Difference)])

#CairoPDF(file="图1-8-15(a)_条形图.pdf",width=5.28,height=5.47)

#showtext.begin()

ggplot(data = mydata, aes(x = Team, y = Difference,fill = Difference)) +

  geom_bar(stat = "identity", width = 0.8,colour="black",size=0.25)+

  scale_fill_gradient2(low=brewer.pal(7,"Set1")[2],mid="grey90",high=brewer.pal(7,"Set1")[1],midpoint=0)+

  geom_text(aes(y = 0,     label=label2),size=3,hjust=-0.1)+ #添加负值部分的数据标签

  geom_text(aes(y = -0.001,label=label1),size=3,hjust= 1.1)+ #添加正值部分的数据标签

  coord_flip() +   #坐标轴翻转

  ylim(-5,5)+

  theme_minimal() + #图表主题设定

  theme(

        panel.grid.major=element_blank(),

        panel.grid.minor=element_blank(),

        panel.grid.major.x = element_line(colour = "grey80",size=.25),

        panel.grid.minor.x = element_line(colour = "grey80",size=.25),

        plot.title=element_text(size=15,hjust=.5),

        axis.text.x = element_text(face="plain", color="black",

                                   size=11, angle=0),

        axis.text.y = element_blank(),

        legend.position="right",

        legend.text=element_text(size=10),

        legend.title=element_text(size=10))

#showtext.end()

#dev.off()

书上的例子,大部分都很简单,其中主要是在图中添加文本的技巧,书上将添加文本运用的transform函数


mydata<-transform(mydata, label1=ifelse(Difference>=0, Team, NA),

                  label2=ifelse(Difference>0, NA,Team))

此时的label会依据Difference值的大小将标签设置为左或者右,在画图的时候:


  geom_text(aes(y = 0,     label=label2),size=3,hjust=-0.1)+ #添加负值部分的数据标签

  geom_text(aes(y = -0.001,label=label1),size=3,hjust= 1.1)+ #添加正值部分的数据标签

会根据情况在左或者右添加标签。

第二种

第二种方法主要由上的尧小飞仁兄画的,他的代码是:


library(ggplot2)#用于可视化

library(dplyr)#用于数据处理

set.seed(1111)#此命令保证数据结果可以重现在任何电脑上

x <- 1980+1:36#赋值x

y <- round(100*rnorm(36))#赋值y

mydata <- data.frame(x=x, y=y)#创建数据集mydata

head(mydata)

mydata <- mydata%>%mutate(x_t=ifelse(y>=0,-4*nchar(x), 4*nchar(x))) #生成label的坐标

head(mydata)

max<-50

min<- -50

sig<-c()

for (i in mydata$y ){

    print(i)

    significant<-''


  if(i>=max){significant<-'yes'}else if(i< 0 && abs(i)

>= max ){significant<-'no'}else if(min

这位仁兄的画法跟书上的例子稍有不同,他添加文本的方法是采画图的时候:


geom_text(aes(y=x_t,label=x), vjust=0.3, color="black",size=3)

采用了


mydata <- mydata%>%mutate(x_t=ifelse(y>=0,-4*nchar(x), 4*nchar(x)))

这样的用法来设置标签的左右位置,很精妙,值得学习。

至于柱形图的颜色怎么调,希望各位同道自己探索!

这种图可用的地方

做生信的朋友应该不会陌生,在做富集分析的时候,这种图可以同时展示上调和下调的通路情况,当然还有其他的作用,各位同道可以多多练习和交流。

你可能感兴趣的:(左右柱形图的画法)