我想创建一个刻度标记与默认标记不同的主题,以避免每次创建自定义绘图时重复+ 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):
答案 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
,但这不是一个重大更改。)