我可以告诉ggpairs使用日志秤吗?

时间:2011-08-03 23:56:12

标签: r ggplot2

我可以为GGally包中的ggpairs函数提供一个参数,以便对某些变量(而不是所有变量)使用日志比例吗?

3 个答案:

答案 0 :(得分:10)

您不能提供这样的参数(原因是创建散点图的函数是在没有比例的情况下预定义的,请参阅ggally_points),但您可以使用getPlot来更改比例。 putPlot。例如:

custom_scale <- ggpairs(data.frame(x=exp(rnorm(1000)), y=rnorm(1000)),
upper=list(continuous='points'), lower=list(continuous='points'))
subplot <- getPlot(custom_scale, 1, 2) # retrieve the top left chart
subplotNew <- subplot + scale_y_log10() # change the scale to log
subplotNew$type <- 'logcontinuous' # otherwise ggpairs comes back to a fixed scale
subplotNew$subType <- 'logpoints'
custom_scale <- putPlot(custom_fill, subplotNew, 1, 2)

答案 1 :(得分:3)

这与Jean-Robert的答案基本相同,但看起来更简单(平易近人)。我不知道它是否是新功能,但看起来您不再需要使用getPlotputPlot

custom_scale[1,2]<-custom_scale[1,2] + scale_y_log10() + scale_x_log10()

这是一个在大矩阵中应用它的函数。提供绘图中的行数和绘图名称。

scalelog2<-function(x=2,g){  #for below diagonal
 for (i in 2:x){ 
    for (j in 1:(i-1)) { 
      g[i,(j)]<-g[i,(j)] + scale_x_continuous(trans='log2') +
scale_y_continuous(trans='log2')
                        } } 
 for (i in 1:x){  #for the bottom row 
      g[(x+1),i]<-g[(x+1),i] + scale_y_continuous(trans='log2') 
                       } 
 for (i in 1:x){ #for the diagonal
      g[i,i]<-g[i,i]+ scale_x_continuous(trans='log2')  } 
  return(g) }

答案 2 :(得分:1)

在将变量提供给ggpairs之前,最好适当地使用线性刻度和对数变换变量,因为这样可以避免在对数系数的计算方式(对数变换之前或之后)产生歧义。 例如,这可以容易地实现。像这样:

library(tidyverse)

log10_vars <- vars(ends_with(".Length"))             # define variables to be transformed

iris %>%                                             # use standard R example dataframe
  mutate_at(log10_vars, log10) %>%                   # log10 transform selected columns
  rename_at(log10_vars, sprintf, fmt="log10 %s") %>% # rename variables accordingly
  GGally::ggpairs(aes(color=Species))

example ggpairs plot with log transformed variables