3

我找到了coord_trans,但我想将log10reverse应用于我的 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

我如何链接它们?

4

3 回答 3

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)
于 2012-09-24T18:20:04.257 回答
1

一种快速简便的方法是将其中一种转换直接应用于数据,并将另一种转换与绘图功能一起使用。

例如

ggplot(iris, aes(log10(Sepal.Length), log10(Sepal.Width), colour = Species)) + 
geom_point() + coord_trans(x="reverse", y="reverse")

注意:反向转换不适用于虹膜数据,但您明白了。

于 2012-09-24T18:15:40.900 回答
0

我在这里徘徊寻找“比例组合”功能。我认为一个人可以写这样的东西如下:

# 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)
于 2017-09-28T17:59:28.920 回答