ggplot2截?cái)嗫v坐標(biāo)--后續(xù)

前情提要

ggplot2不能截?cái)嗫v坐標(biāo)腫么辦
講了幾種截?cái)喾椒?,各有長(zhǎng)短,我在這篇文章發(fā)出去后收到兩個(gè)反饋,特來與大家分享?

新方法1.拼圖

出處:https://huifangliu.github.io/2018/06/01/R語(yǔ)言-ggplot2畫圖如何截?cái)?y-軸/


實(shí)現(xiàn)從A到B,上下兩部分圖畫出來,然后拼到一起即可

(1)舉重若輕三步走

#導(dǎo)入包
library(ggplot2)
library(ggpubr)
#數(shù)據(jù)
data <- data.frame(x = c("Alpha","Bravo","Charlie","Delta"),y=c(200,20,10,15))
#畫下面
p1 <- ggplot(data,aes(x=x,y=y,fill=x)) + 
  geom_bar(stat='identity',position=position_dodge()) +
  labs(x=NULL,y=NULL,fill=NULL)+    #可自定義標(biāo)簽名字
  coord_cartesian(ylim = c(0,25))   #設(shè)置下面一半的值域
#畫上面
p2 <- ggplot(data,aes(x=x,y=y,fill=x)) + geom_bar(stat='identity',position=position_dodge()) +
  labs(x=NULL,y=NULL,fill=NULL) +   #不要標(biāo)簽
  theme(axis.text.x = element_blank(),axis.ticks.x = element_blank()) +     #去掉X軸和X軸的文字
  coord_cartesian(ylim = c(195,205)) +  #設(shè)置上面一半的值域
  scale_y_continuous(breaks = c(195,205,5)) #以5為單位劃分Y軸
#拼起來
ggarrange(p2,p1,heights=c(1/5, 4/5),ncol = 1, nrow = 2,common.legend = TRUE,legend="right",align = "v")

重點(diǎn)在于:設(shè)置y軸值域,設(shè)置p2的刻度、不要x軸標(biāo)簽和名字,以及拼圖設(shè)置高度比。

(2)patchwork拼圖也很可

library(patchwork)
p2 <- ggplot(data,aes(x=x,y=y,fill=x)) + geom_bar(stat='identity',position=position_dodge()) +
  labs(x=NULL,y=NULL,fill=NULL) +   #不要標(biāo)簽
  theme(axis.text.x = element_blank(),axis.ticks.x = element_blank(),legend.position = "none") +    #去掉X軸和X軸的文字
  coord_cartesian(ylim = c(195,205)) +  #設(shè)置上面一半的值域
  scale_y_continuous(breaks = c(195,205,5)) #以5為單位劃分Y軸


layout <- '
A
B
B
B
B
'
p2 + p1 + plot_layout(design = layout)

2.新方法2:gg.gap包

上次的文章發(fā)出去后,gg.gap包的作者chris_lou給我留言,可以用他的包!我一看,果然是非常好用!

分享能帶來什么呢,曾以為就是自己記錄下來,印象深刻,順便可以幫助一下別人。這次不一樣,有被幫助到!感謝大佬!

下面的代碼來自包的幫助文檔,套在剛才的數(shù)據(jù)上。

#install.packages("gg.gap")
library(gg.gap)
library(ggplot2)
library(patchwork)
#數(shù)據(jù)
data <-
  data.frame(x = c("Alpha", "Bravo", "Charlie", "Delta"),
             y = c(200, 20, 10, 15))
#畫圖
p1 = ggplot(data, aes(x = x, y = y, fill = x)) +
  geom_bar(stat = 'identity', position = position_dodge(),show.legend = FALSE) +
  theme_bw() +
  labs(x = NULL, y = NULL)

p1
p2 =gg.gap(plot = p1,
           segments = c(25, 190),
           tick_width = 10,
           rel_heights = c(0.25, 0, 0.1),
           ylim = c(0, 200)
           )
p1+p2

segments是表示切分位置的向量,tick_width是刻度單位,rel_height表示切分成的兩段它的高度比例。高度比例可以多次調(diào)整,讓上下兩部分看起來整體度高一些。

和上面的方法是相似的~但是做成包更香!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容