ggpairs in r: Как (1) настроить значения осей и (2) разделить длинные имена переменных на две (или более строки)

У меня есть два вопроса о заговоре с ggpairs в 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) 

(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?

Большое спасибо.

0 ответов

Сначала вы можете изменить имена столбцов, чтобы распознавать _ как точки разделения:

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
Другие вопросы по тегам