You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用GGally获取正确散点图矩阵并修正Y轴刻度异常

问题描述

使用GGally包的ggpairs()函数绘制散点图矩阵时,设置upper = list(continuous = "points")后,发现对角线的密度图覆盖了第一行绘图的Y轴范围,导致第一行Y轴刻度错误(实际应为9-11,却显示0-0.6)。尝试将对角线设为"blank"会完全消除刻度,自定义对角线函数又没掌握语法,请问如何获取正确的Y轴刻度?

library(tidyverse)
library(GGally)
#> Registered S3 method overwritten by 'GGally':
#>   method from   
#>   +.gg   ggplot2

rn <- partial(runif, min = -1, max = 1)

tibble(ten = 10 + rn(100), twenty = 20 + rn(100), thirty = 30 + rn(100)) |> 
  ggpairs(
    upper = list(continuous = "points"), 
    #diag = list(continuous = function(data, mapping) {ggplot(data) + aes(x, y) + geom_point()}))
    #diag = list(continuous = function(data, mapping) {ggplot(data) + mapping + geom_point()}))
  )

异常的散点图矩阵

解决方法

提供两种可行方案,可根据需求选择:

方案1:自定义对角线函数,保留轴刻度且隐藏密度图

通过自定义空面板函数,保留坐标轴的同时不绘制密度图,避免刻度被干扰:

library(tidyverse)
library(GGally)

rn <- partial(runif, min = -1, max = 1)

# 自定义对角线函数:仅保留坐标轴,无绘图元素
empty_diag <- function(data, mapping, ...) {
  ggplot(data, mapping) + 
    geom_blank() +  # 空图层维持轴结构
    theme(panel.background = element_blank())
}

tibble(ten = 10 + rn(100), twenty = 20 + rn(100), thirty = 30 + rn(100)) |> 
  ggpairs(
    upper = list(continuous = "points"), 
    diag = list(continuous = empty_diag)
  )

方案2:调整密度图Y轴范围,避免覆盖主图刻度

如果需要保留对角线密度图,可强制限制其Y轴范围,不让它影响主图的坐标轴显示:

library(tidyverse)
library(GGally)

rn <- partial(runif, min = -1, max = 1)

# 自定义带范围控制的密度图函数
scaled_diag_density <- function(data, mapping, ...) {
  ggplot(data, mapping) + 
    geom_density(fill = "lightblue", alpha = 0.5) +
    scale_y_continuous(limits = c(0, NA), expand = expansion(mult = c(0, 0.1)))  # 固定下限,上限自适应
}

tibble(ten = 10 + rn(100), twenty = 20 + rn(100), thirty = 30 + rn(100)) |> 
  ggpairs(
    upper = list(continuous = "points"), 
    diag = list(continuous = scaled_diag_density)
  )

说明

方案1彻底解决刻度干扰问题,同时保留坐标轴完整性;方案2兼顾密度图展示和主图刻度正确性,可根据可视化需求选择。


内容的提问来源于stack exchange,提问作者Arthur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:12:32