我可以为GGally包中的ggpairs
函数提供一个参数,以便对某些变量(而不是所有变量)使用日志比例吗?
答案 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的答案基本相同,但看起来更简单(平易近人)。我不知道它是否是新功能,但看起来您不再需要使用getPlot
或putPlot
。
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))