如何在ggplot主题中设置scale_默认值?

时间:2013-12-12 12:38:40

标签: r ggplot2 themes scale

我想创建一个刻度标记与默认标记不同的主题,以避免每次创建自定义绘图时重复+ scale_x_continuous

让我们举一个简单的例子,其中我只想要限制的刻度线:

A = 1; f = 5; p = 0; d = 0.4
t = seq(from = 0, to = 10, by = 0.01)

x = A * sin(t * f + p) * exp(-d * t)
numticks = 1

qplot(x = t, y = x) + theme_classic() + 
  scale_x_continuous(breaks = scales::trans_breaks("identity", function(x) x, n=numticks) )

这看起来很棒(见下文),但理想情况下,我可以在不使用scale_x_continuous的情况下生成相同的结果,因为它很笨重。我想将theme_classic()替换为+ mytheme,这应该可以解决它。

这是迄今为止我在解决方案方面的最佳尝试:

mytheme <- theme_classic() + 
theme(scale_x_continuous(breaks=trans_breaks("identity", function(x) x, n=numticks)) 

不确定这是否可能,并且很高兴每次都输入scale_x_continuous(...)。但是,在自定义主题中临时或更好地更改默认值会更好。

这是我想要制作btw的情节轴,我想制作许多这样的情节(用于绘制harmonographs):

custom x axis

2 个答案:

答案 0 :(得分:4)

不确定这是否是您想要的,但这会为您节省一些空间:

custom_ticks <- function(n) {
  scale_x_continuous(breaks = 
    scales::trans_breaks("identity", function(x) x, n=n))
}

p <- qplot(x = t, y = x) + theme_classic() 
p + custom_ticks(2)
p + custom_ticks(10)

答案 1 :(得分:3)

将@ hadley的评论转变为答案

mytheme <- list(theme_classic(),
                scale_x_continuous(breaks=trans_breaks("identity", 
                                                       identity, 
                                                       n=numticks)))

qplot(x = t, y = x) + mytheme

(我还将function(x) x替换为已有的函数identity,但这不是一个重大更改。)