GGplot自定义刻度转换与自定义刻度 [英] GGplot custom scale transformation with custom ticks
问题描述
library(ggplot2)$ b $我试图使用自定义比例/轴转换,如下所示: b库(比例)
dat < - data.frame(
time.tot = c(407.17,168.83,127.8,108.88,69.04,68.5,59.76,407.17,$ b $ (b,b,b,b,b,b,b,c,d,b,b,b,b,b)误差= 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.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,
domai n = c(0,Inf),
breaks = c(0,0.1,1))
ggplot(dat,aes(x = time.tot,y = error,color =类型))+
geom_line()+ geom_point()+ coord_trans(y = tn)
I'm attempting to use a custom scale/axis transformation, like so:
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)
As you can see, the y-axis is indeed transformed by my specified function, y=log(x+eps)
. The breaks
argument isn't having any effect though. I'm sure I'm specifying it wrong, but I haven't been able to figure out from the docs how to make it work. Any suggestions?
I'm also wondering how/whether to "fix" the curvy lines - looks like they're drawn in the original scale and then transformed using my custom tn
afterwards.
You may need to set the scale on the y axis directly:
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))
Also, the non-straight lines are the expected behavior of coord_trans
. from the help: "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."
Instead, try:
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)
这篇关于GGplot自定义刻度转换与自定义刻度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!