axis tick marks和legend tick marks是scale breaks的特殊案例,通过scale函数的breaks
参数设置。
主要刻度
每个break对应一条major gridline,两个主要网格线之间有一条minor gridline,对应minor breaks。breaks
参数用来设置主要刻度标签的位置,minor_breaks
参数用来设置次要刻度标签的位置。
-
breaks=NULL
:无主要刻度标签,并删除对应的网格线 -
breaks=由transformation object计算的默认breaks
:默认trans=identity
,坐标轴就是一个数轴。我理解的是就像地图中的比例尺一样,"真实"的数值与ggplot坐标轴上的数值存在一个倍数直线线性关系。 -
breaks=手动设置的向量
;这种情况最容易理解和操作,你可以在数轴上任意标注breaks -
breaks=函数
:提供的函数需要能接受一个二值向量(即limits的范围),最后返回breaks,scales
包提供了几个有用的工具: -
scales::breaks_extended(n=5,...)
:用Wilkinson's extended breaks algorithm进行break
-
-
scales::breaks_log(n=5,base=10)
:以limits=c(1,100000),n=5,base=10
为例,大概计算过程为:step1)raw_rng=range(limits)
;step2)rng <- log(raw_rng, base = base)
;step3)max<-ceiling(rng[2]);min<-floor(rng[1]);by <- floor(max - min)/n) + 1
;step4)breaks <- base^seq(min, max, by = by)
,最终呈现的效果是坐标轴上有多个视觉上等间隔的breaks,但对应的不是等步长的值。
-
-
scales::breaks_width(width,offset=0)
:在numeric、date、date-time scales上都很有用;width
为每个break之间的距离,offset
为偏移量,也可以是一个向量。
-
-
scales::breaks_pretty(n=5,...)
:用pretty()
算法,原生对date/times有用。
-
注意:以上这些函数,设置的n
与最终得到的breaks的数目不一定完全一致。
次要刻度
次要刻度标签的位置对log scales很有用,因为它提示scale是非线性的。同breaks
一样,minor_breaks
可以设置为:
-
minor_breaks=NULL
:删除次要刻度标签 -
minor_breaks=默认
:两个主要刻度之间有一个次要刻度 minor_breaks=手动设置的向量
-
minor_breaks=函数
:例如:scales::minor_breaks_n(n)
、scales::minor_breaks_width(width, offset)
[小坑,测试不通过]
刻度标签
每个break与一个label关联,可以通过labels
参数修改labels,所以breaks
和labels
参数对应的向量长度应保持一致。
scales
包也提供了一系列函数来格式化labels。包括:scales::label_bytes()
、scales::label_comma()
、scales::label_dollar()
、scales::label_ordinal()
、scales::label_percent()
、scales::label_pvalue()
。从这些函数的名字就可以看出其基本功能,使用的时候直接查看函数帮助即可,非常方便。
三者之间的关系
minor_breaks
和labels
都依赖breaks
,三者设置为NULL
时的区别是:breaks=NULL
会删除主要刻度、次要刻度以及labels,其他两者则只会删除对应属性。
df <- data.frame(a=1:5,b=c(1,10,100,1000,10000))
p<-ggplot(df,aes(a,b)) + geom_point()
p1<- p + labs(title="scale_y_continuous()")
p2 <- p + scale_y_continuous(breaks=NULL) + labs(title="scale_y_continuous(breaks=NULL)")
p3 <- p + scale_y_continuous(minor_breaks=NULL) + labs(title="scale_y_continuous(minor_breaks=NULL)")
p4 <- p + scale_y_continuous(labels=NULL) + labs(title="scale_y_continuous(labels=NULL)")