R语言ggplot2做柱形图如何让起始位置不是0?之前有人在公众号留言问过这个问题,当时自己没有思路,今天看到有人在公众号留言问 下面这个图如何实现。

R语言ggplot2做柱形图如何让起始位置不是0?_数据集

image.png

突然有了灵感,做柱形图的时候可以不用 ​​geom_bar()​​​ 或者 ​​geom_col()​​​直接画柱子的函数,可以用​​geom_segment()​​画线段的函数,只是需要准备示例数据集的时候稍微做一个调整就可以了

正常柱形图的示例数据集如下

R语言ggplot2做柱形图如何让起始位置不是0?_数据集_02

image.png

作图代码

library(readxl)
library(ggplot2)

dat01<-read_excel("data/20220601/20220601.xlsx")
dat01
ggplot(data=dat01,aes(x=var1,y=var2))+
geom_col(aes(fill=var1))

R语言ggplot2做柱形图如何让起始位置不是0?_公众号_03

image.png

如果想让起始位置不是0,我们准备数据集如下,增加一列起始位置

R语言ggplot2做柱形图如何让起始位置不是0?_数据_04

image.png

作图代码

dat02<-read_excel("data/20220601/20220601.xlsx",
sheet = "Sheet2")
dat02

ggplot(data=dat02,aes(x=var1,xend=var1,
y=ystart,yend=yend))+
geom_segment(aes(color=var1),
size=30,
show.legend = FALSE)+
scale_y_continuous(breaks = 3:10)

R语言ggplot2做柱形图如何让起始位置不是0?_数据集_05

image.png

接下来模仿一下推文开头提到的图

来自于论文 Seasonal variation in community composition and distributional ranges of birds along a subtropical elevation gradient in China 的figure4

论文中没有找到原始数据,自己构造一份吧 只准备两个物种的数据

R语言ggplot2做柱形图如何让起始位置不是0?_公众号_06

image.png

作图代码

library(ggplot2)
library(readxl)
dat03<-read_excel("data/20220601/20220601.xlsx",
sheet = "Sheet3")
dat03

ggplot(data=dat03,aes(x=species,xend=species,
y=lower,yend=upper))+
geom_segment(aes(color=season),
size=30)+
scale_color_manual(values = c("winter"="#009edc",
"both"="#93989e",
"breedingseason"="#f5c512"))+
scale_y_continuous(limits = c(700,3400),
breaks = seq(700,3400,300))+
theme_bw()+
theme(panel.grid.major.x = element_blank(),
panel.grid.major.y = element_line(linetype="dashed"),
panel.grid.minor.y = element_blank(),
axis.text.x = element_text(angle=90,
hjust=1,
vjust=0.5,
face="italic"))+
labs(x="Species",y="Elevation (m)")+
guides(color=guide_legend(override.aes = list(size = 1)))

R语言ggplot2做柱形图如何让起始位置不是0?_公众号_07

image.png

这个只有两个物种的数据看起来和论文中的图差别还挺大的,物种准备全了效果就是一样的

推文的示例数据和代码可以留言20220601获取

欢迎大家关注我的公众号

小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!

R语言ggplot2做柱形图如何让起始位置不是0?_数据_08

image.png