R ggplot2中的分割轴绘图

R ggplot2中的分割轴绘图,r,ggplot2,cowplot,R,Ggplot2,Cowplot,我刚刚发现这个情节是真实的(汉斯·罗斯林和他的孩子们写的书)。我觉得分裂的审美观很吸引人 虽然可以使用geom_rect()制作类似的东西,但外观却完全不同。另一种方法是使用cowplot或patchwork,但相当棘手。这是我试图用它来复制顶部的部分 gapminder %>% filter(year==1997, gdpPercap<16000) %>% ggplot(aes(gdpPercap, y=lifeExp, size=pop)) + geom_p

我刚刚发现这个情节是真实的(汉斯·罗斯林和他的孩子们写的书)。我觉得分裂的审美观很吸引人

虽然可以使用
geom_rect()
制作类似的东西,但外观却完全不同。另一种方法是使用
cowplot
patchwork
,但相当棘手。这是我试图用它来复制顶部的部分

gapminder %>% 
  filter(year==1997, gdpPercap<16000) %>%
  ggplot(aes(gdpPercap, y=lifeExp, size=pop)) +
  geom_point(alpha=0.5)+
  scale_x_log10()+
  ggthemes::theme_base()+
  theme(legend.position = "none",
        plot.background = element_blank(),
        plot.margin = unit(c(0.5, 0, 0, 0), "cm")) -> P1

gapminder %>% 
  filter(year==1997, gdpPercap>16000) %>%
  ggplot(aes(gdpPercap, y=lifeExp, size=pop)) +
  geom_point(alpha=0.5)+
  scale_x_log10()+
  ggthemes::theme_base()+
  theme(legend.position = "none",
        axis.title.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.text.y = element_blank(),
        plot.background = element_blank(),
        plot.margin = unit(c(0.5, 0.5, 0, 0), "cm"),
        axis.title.x = element_blank()) -> P2

cowplot::plot_grid(P1, P2, rel_widths = c(2,1), labels = NULL,
                   align = "h")
gapminder%>%
过滤器(年份==1997,gdpPercap%
ggplot(aes(GdperCap,y=lifeExp,size=pop))+
几何点(α=0.5)+
比例尺×对数10()+
主题::主题库()+
主题(legend.position=“无”,
plot.background=元素_blank(),
plot.margin=单位(c(0.5,0,0,0),“cm”)->P1
gapminder%>%
过滤器(年份==1997,gdpPercap>16000)%
ggplot(aes(GdperCap,y=lifeExp,size=pop))+
几何点(α=0.5)+
比例尺×对数10()+
主题::主题库()+
主题(legend.position=“无”,
axis.title.y=元素_blank(),
axis.ticks.y=元素_blank(),
axis.text.y=元素_blank(),
plot.background=元素_blank(),
plot.margin=单位(c(0.5,0.5,0,0),“cm”),
axis.title.x=元素_blank())->P2
cowplot::plot_网格(P1,P2,相对宽度=c(2,1),标签=NULL,
align=“h”)

我认为所有其余的文本和突出显示都可以在现有的软件包中使用。我想知道如何获得一个通用的x轴(右侧应根据图标显示刻度)。理想情况下,x轴标题应该居中,但这可能要求太多。我也可以将其作为文本移动到内部

轴存在问题,正如您在y记号的绘图中所看到的。我不知道面是否是更好的方法。我也不确定点大小是否计算错误,因为我先过滤数据


这里是一个使用面的解决方案。您可以通过使用
scale
软件包的log10 break计算器预计算中断来解决x轴中断问题。您可以使用管道中的
mutate()
来生成一个新变量来拆分面

库(tidyverse)
图书馆(gapminder)
打破%
过滤器(年份==1997)%>%
突变(方面=因子(如果其他(gdpPercap>16000,“高”、“低”),
级别=c(“低”、“高”))%>%
ggplot(aes(GdperCap,y=lifeExp,size=pop))+
几何点(α=0.5)+
比例x对数10(中断=中断)+
主题::主题库()+
面网格(~facet,
scales=“free\u x”,space=“free\u x”)+
ggtitle(“我的头衔”)+
主题(legend.position=“无”,
plot.title=元素\文本(hjust=0.5),
plot.background=element_blank())

这是一种很好的方法,实际上,将其放入一个函数中更为简单,该函数可以为您计算断点并正确划分数据图(这是我的最终意图)。