r 中的 ggpairs:如何 (1) 调整轴值,以及 (2) 将长变量名称拆分为两行(或更多行)
ggpairs in r: How to (1) adjust axis values, and (2) split long variable names over two (or more lines)
我有两个关于在 r
中使用 ggpairs
绘图的问题:
(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?
非常感谢。
首先,您可以修改列名称以将 _ 识别为分隔点:
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
我有两个关于在 r
中使用 ggpairs
绘图的问题:
(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?
非常感谢。
首先,您可以修改列名称以将 _ 识别为分隔点:
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