1

我有两个关于用ggpairsin绘图的问题r

(1) 我有一些不可避免的长变量名,这些变量名在 ggpairs 的默认输出中没有完整显示。如何调整 ggpairs 以使整个名称可见(例如,标签可以分成多行,或以 45 度显示等)?

(2),如何为单个变量的轴限制设置自定义范围?

例如,以下代码为我们提供了下面的图:

library(GGally)

set.seed(99)

really_long_variable_name_1 <- round(runif(50, 0, 1), 2)
really_long_variable_name_2 <- round(runif(50, 0, 0.8), 2)
really_long_variable_name_3 <- round(runif(50, 0, 0.6), 2)
really_long_variable_name_4 <- round(runif(50, 0, 100), 2)

df <- data.frame(really_long_variable_name_1, 
                    really_long_variable_name_2,
                    really_long_variable_name_3,
                    really_long_variable_name_4)

ggpairs(df) 

example_ggpairs_image

(1) 如何调整绘图以使完整的变量名称可见(在本例中为 Y 轴上的标签)?

(2) 如何将前三个变量的轴限制设置为 0 到 1,第四个变量设置为 0 到 100?

我可以使用如下函数将所有轴限制设置为相同的值:

custom_range <- function(data, mapping, ...) { 
  ggplot(data = data, mapping = mapping, ...) + 
    geom_point(...) + 
    scale_x_continuous(limits = c(0, 1)) +
    scale_y_continuous(limits = c(0, 1)) 
}

ggpairs(df, 
        lower = list(continuous = custom_range))

但是如何为第四个变量设置轴限制really_long_variable_name_4,使 X 的范围从 0 到 100?

非常感谢。

4

1 回答 1

1

首先,您可以修改列名以将 _ 识别为分隔点:

cleanname = function(x,lab="\n"){
  sapply(x, function(c){ 
    paste(unlist(strsplit(as.character(c) , split="_")),collapse=lab)
  })
  }

colnames(df) = cleanname(colnames(df))

#Using your function
custom_range <- function(data, mapping, ...) { 
  ggplot(data = data, mapping = mapping, ...) + 
    geom_point(...) + 
    scale_x_continuous(limits = c(0, 1)) +
    scale_y_continuous(limits = c(0, 1)) 
}

添加主题元素以指定您是否想要角度、大小、颜色等的文本。请注意,这只是修改您的 X 名称,但 Y 名称在每个 _ 处也有新行

myplot = ggpairs(df,
        lower = list(continuous = custom_range)) +
 theme(strip.text.x = element_text(size = 6, angle = 45)) 

接下来,索引每个图并覆盖现有比例。我敢肯定有一种更简洁的编码方式

myplot[4,1]= myplot[4,1] + scale_y_continuous(limits  = c(0,100))
myplot[4,2]= myplot[4,2] + scale_y_continuous(limits  = c(0,100))
myplot[4,3]= myplot[4,3] + scale_y_continuous(limits  = c(0,100))


myplot
于 2019-09-08T15:51:36.703 回答