带有自定义刻度的 GGplot 自定义比例转换
GGplot custom scale transformation with custom ticks
我正在尝试使用自定义 scale/axis 转换,如下所示:
library(ggplot2)
library(scales)
dat <- data.frame(
time.tot = c(407.17, 168.83, 127.8, 108.88, 69.04, 68.5, 59.76, 407.17,
168.83, 127.8, 108.88, 69.04, 68.5, 59.76, 407.17, 168.83, 127.8,
108.88, 69.04, 68.5, 59.76),
error = c(0, 0.01, 0.05, 0.1, 0.5, 0.7, 1, 1.91e-06, 0.00229, 0.00884,
0.0172, 0.128, 0.128, 0.22, 1.43e-08, 0.000337, 0.00121, 0.00221,
0.0123, 0.0123, 0.0213, 0, 0.01, 0.05, 0.1, 0.5, 0.7, 1, 1.91e-06,
0.00229, 0.00884, 0.0172, 0.128, 0.128, 0.22, 1.43e-08, 0.000337,
0.00121, 0.00221, 0.0123, 0.0123, 0.0213),
type = rep(c("A", "B", "C"), each=7))
eps <- 1e-8
tn <- trans_new("logpeps",
function(x) log(x+eps),
function(y) exp(y)-eps,
domain=c(0, Inf),
breaks=c(0, 0.1, 1))
ggplot(dat, aes(x=time.tot, y=error, color=type)) +
geom_line() + geom_point() + coord_trans(y = tn)
如您所见,y 轴确实由我指定的函数 y=log(x+eps)
进行了变换。 breaks
参数没有任何效果。我确定我指定的是错误的,但我无法从文档中弄清楚如何让它工作。有什么建议吗?
我也想知道 how/whether 到 "fix" 弯曲的线条 - 看起来它们是按原始比例绘制的,然后使用我的自定义 tn
进行了转换。
您可能需要直接在y轴上设置刻度:
ggplot(dat, aes(x=time.tot, y=error, color=type)) +
geom_line() + geom_point() + coord_trans(y = tn)
+ scale_y_continuous(breaks = c(0,0.1,1))
此外,非直线是 coord_trans
的预期行为。来自帮助:"coord_trans is different to scale transformations in that it occurs after statistical transformation and will affect the visual appearance of geoms - there is no guarantee that straight lines will continue to be straight."
相反,尝试:
b <- 10^-c(Inf, 8:0)
ggplot(dat, aes(x=time.tot, y=error, color=type)) +
geom_line() + geom_point() + scale_y_continuous(breaks = b, labels=b, trans = tn)
我正在尝试使用自定义 scale/axis 转换,如下所示:
library(ggplot2)
library(scales)
dat <- data.frame(
time.tot = c(407.17, 168.83, 127.8, 108.88, 69.04, 68.5, 59.76, 407.17,
168.83, 127.8, 108.88, 69.04, 68.5, 59.76, 407.17, 168.83, 127.8,
108.88, 69.04, 68.5, 59.76),
error = c(0, 0.01, 0.05, 0.1, 0.5, 0.7, 1, 1.91e-06, 0.00229, 0.00884,
0.0172, 0.128, 0.128, 0.22, 1.43e-08, 0.000337, 0.00121, 0.00221,
0.0123, 0.0123, 0.0213, 0, 0.01, 0.05, 0.1, 0.5, 0.7, 1, 1.91e-06,
0.00229, 0.00884, 0.0172, 0.128, 0.128, 0.22, 1.43e-08, 0.000337,
0.00121, 0.00221, 0.0123, 0.0123, 0.0213),
type = rep(c("A", "B", "C"), each=7))
eps <- 1e-8
tn <- trans_new("logpeps",
function(x) log(x+eps),
function(y) exp(y)-eps,
domain=c(0, Inf),
breaks=c(0, 0.1, 1))
ggplot(dat, aes(x=time.tot, y=error, color=type)) +
geom_line() + geom_point() + coord_trans(y = tn)
如您所见,y 轴确实由我指定的函数 y=log(x+eps)
进行了变换。 breaks
参数没有任何效果。我确定我指定的是错误的,但我无法从文档中弄清楚如何让它工作。有什么建议吗?
我也想知道 how/whether 到 "fix" 弯曲的线条 - 看起来它们是按原始比例绘制的,然后使用我的自定义 tn
进行了转换。
您可能需要直接在y轴上设置刻度:
ggplot(dat, aes(x=time.tot, y=error, color=type)) +
geom_line() + geom_point() + coord_trans(y = tn)
+ scale_y_continuous(breaks = c(0,0.1,1))
此外,非直线是 coord_trans
的预期行为。来自帮助:"coord_trans is different to scale transformations in that it occurs after statistical transformation and will affect the visual appearance of geoms - there is no guarantee that straight lines will continue to be straight."
相反,尝试:
b <- 10^-c(Inf, 8:0)
ggplot(dat, aes(x=time.tot, y=error, color=type)) +
geom_line() + geom_point() + scale_y_continuous(breaks = b, labels=b, trans = tn)