具有R的GGally ggpair的不同图形的不同比例单位

时间:2019-10-08 20:40:04

标签: r ggplot2 ggally ggpairs

在此示例中,使用iris数据集,我得到了ggpairs()中的以下图表网格:

library(GGally)
ggpairs(iris)

enter image description here ...

我想对此图表进行一些整理,特别是在轴上进行一些格式化。我想加粗标题(Sepal.Length,Sepal.Width等),更重要的是,我想格式化轴上的单位。

但是,对于每个列/行,我想使用不同的单位格式。 (即使它不是基于百分比的统计信息),对于Sepal.Width列/行,我希望单位为百分比。对于具有连续变量的普通ggplot(),我会做scale_x_continuous(labels = scales::percent_format()),但是我不太确定如何有选择地将单位格式应用于ggpairs()输出的不同行/列。

对此非常感谢,谢谢!

1 个答案:

答案 0 :(得分:1)

有两种方法可以进行:这是两个。

您可以使用子设置机制来更改特定图:

library(GGally)
p = ggpairs(iris)
p[2,1] = p[2,1] + scale_y_continuous(labels = scales::percent_format())

或者您可以编写一个传递给ggpairs的函数,在其中您可以根据变量指定格式。设置y轴格式的愚蠢示例:

# acc_y is a named vector giving the parameters to be passed to 
# the accuracy argument of scales::percent_format
quick_fun <- function(data, mapping, acc_y, ...){

    y_name = quo_name(mapping$y)

    ggplot(data=data, mapping=mapping) + 
      geom_point() + 
      scale_y_continuous(labels = scales::percent_format(accuracy = acc_y[y_name])) 
  }

ggpairs(iris, lower=list(continuous=wrap(quick_fun, 
                                         acc_y=c("Sepal.Length"=0.1, "Sepal.Width"=0.1, 
                                                 "Petal.Length"=10, "Petal.Width"=1000))))

还请注意,ggplot主题也适用于绘图矩阵,因此您可以设置带状文本的格式

p + theme(strip.text = element_text(face="bold", colour="red", size=20))