我找到coord_trans
,但我想申请log10
和
reverse
到我的x轴。我尝试应用两个转换
ggplot(table) + aes(color=Vowel, x=F1, y=F2) + geom_point() + coord_trans(x="log10", y="log10") + coord_trans(x="reverse", y="reverse")
但只应用了第一个。所以我尝试将它们联系起来
ggplot(table) + aes(color=Vowel, x=F2, y=F1) + geom_point() + coord_trans(x=c("log10", "reverse"), y=c("log10", "reverse"))
这给了我一个明显的错误。
'c("log10_trans", "reverse_trans")' is not a function, character or symbol
如何链接它们?
答案 0 :(得分:4)
您可以使用trans_new
定义新的转换。
library(scales)
log10_rev_trans <- trans_new(
"log10_rev",
function(x) log10(rev(x)),
function(x) rev(10 ^ (x)),
log_breaks(10),
domain = c(1e-100, Inf)
)
p <- ggplot(mtcars, aes(wt, mpg)) +
geom_point()
p + coord_trans(y = log10_rev_trans)
答案 1 :(得分:1)
一种快速简便的方法是将其中一个转换直接应用于数据,并将另一个转换应用于绘图功能。
e.g。
ggplot(iris, aes(log10(Sepal.Length), log10(Sepal.Width), colour = Species)) +
geom_point() + coord_trans(x="reverse", y="reverse")
注意:反向转换不适用于虹膜数据,但您明白了。
答案 2 :(得分:0)
我徘徊在这里寻找一种体重秤的组合&#39;功能。我想有人可能会写下这样的事情:
# compose transforms a and b, applying b first, then a:
`%::%` <- function(atrans,btrans) {
mytran <- scales::trans_new(name = paste(btrans$name,'then',atrans$name),
transform = function(x) { atrans$transform(btrans$transform(x)) },
inverse = function(y) { btrans$inverse(atrans$inverse(y)) },
domain = btrans$domain, # this could use improvement...
breaks = btrans$breaks, # not clear how this should work, tbh
format = btrans$format)
}
ph <- ggplot(mtcars, aes(wt, mpg)) +
geom_point() +
scale_y_continuous(trans=scales::reverse_trans() %::% scales::log10_trans())
print(ph)