如何在ggplot中为多面板绘图添加轴刻度?

时间:2015-08-10 22:12:17

标签: r ggplot2

我有一个ggplot2主题,我喜欢分面图,但是想要添加这些线程中描述的轴刻度线,但这次是针对多面板的情况:

例如,我包含以下代码:

## load libraries
library(ggplot2)
library(grid)
library(reshape2)
library(dplyr)

## ggplot settings
theme_update(strip.text=element_text(size=14),
             strip.text.x=element_text(vjust=1),
             strip.text.y=element_text(vjust=0,angle=90),
             strip.background=element_rect(color=NA,fill=NA,
               linetype=0),
             axis.text=element_text(size=12),
             axis.text.y=element_text(angle=90),             
             axis.ticks.length = unit(-0.3, "lines"),
             axis.ticks.margin = unit(0.5, "lines"),
             panel.border=element_rect(color=1,fill=NA),             
             panel.grid.major = element_blank(), 
             panel.grid.minor = element_blank())

## transform the iris dataset
iris.long <- melt(add_rownames(iris,"Sample"),id.vars=c("Sample","Species"))
iris.long$Component <- sub("(.+)\\.(.+)","\\1",iris.long$variable)
iris.long$Dimension <- sub("(.+)\\.(.+)","\\2",iris.long$variable)
iris.wide <- dcast(iris.long,Sample+Species+Component~Dimension)

## make the plot
ggplot(iris.wide)+
  geom_point(aes(Length,Width))+
    facet_grid(Species~Component)

给出了下图:

multipanel figure generated with ggplot2

顶部和右侧的刻度(以及没有刻度标签的面板的底部和左侧)将是一种改进。我不熟悉ggplot / grid图形内部的内部工作原理 - 但这是否能够以公式化的方式实现? ggplot2::annotation_logticks()似乎已经实现了这样的功能,但我无法将其用于线性比例图。

1 个答案:

答案 0 :(得分:0)

另一种方法是使用facet_wrap,指定scales = "free",因此各行和列的比例会有所不同,并显示所有轴:

ggplot(iris.wide)+
  geom_point(aes(Length,Width))+
  facet_wrap(Species~Component, scales ="free", ncol = 2)

enter image description here