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

如何用lattice包的splom函数复现car包的散点图矩阵?

用lattice包复现car包散点图矩阵的解决方案

原car包代码(目标效果)

car包的scatterplotMatrix实现了带线性回归线、loess平滑曲线和对角线箱线图的散点图矩阵:

require(car)

scatterplotMatrix(~Week+Cases+Egg.Pr+Beef.Pr+Pork.Pr+Chicken.Pr+Cereal.Pr, 
                  reg.line = lm,
                  smooth = TRUE, 
                  spread = FALSE, 
                  span = 0.5, 
                  id.n = 0, 
                  diagonal = 'boxplot', 
                  data = Eggs)

你的splom代码问题分析

你写的代码有几个核心错误:

  1. panel函数参数错误:splom的每个子面板只处理一对变量(x和y),不需要把所有变量都列作参数,应该用x, y, ...作为panel函数的参数。
  2. 变量集不匹配:直接传入Eggs给splom会包含数据集中所有列,必须用公式明确指定和car包一致的变量列表。
  3. 面板函数调用错误:panel.lmline和panel.smooth只需要接收当前子图的x、y变量,不需要传入所有变量。
  4. 对角线面板设置错误:splom没有diagonal参数,需要用diag.panel指定绘制箱线图的面板函数。

正确的splom实现代码

library(lattice)

splom(~Week+Cases+Egg.Pr+Beef.Pr+Pork.Pr+Chicken.Pr+Cereal.Pr, 
      data = Eggs,
      # 自定义子面板:散点+回归线+平滑曲线
      panel = function(x, y, ...) {
        # 绘制基础散点图
        panel.xyplot(x, y, ...)
        # 添加线性回归直线(对应car的reg.line=lm)
        panel.lmline(x, y, col = "black", ...)
        # 添加loess平滑曲线(对应car的smooth=TRUE,span=0.5)
        panel.smooth(x, y, span = 0.5, col = "blue", ...)
      },
      # 对角线绘制箱线图(对应car的diagonal='boxplot')
      diag.panel = function(x, ...) {
        panel.bwplot(x, horizontal = FALSE, box.ratio = 0.5, ...)
      },
      # 关闭异常点标签(对应car的id.n=0)
      id.n = 0,
      # 关闭分散度线条(对应car的spread=FALSE)
      spread = FALSE
)

代码细节解释

  1. 变量指定:用~Week+...+Cereal.Pr明确指定变量,和car包的变量集完全一致,避免包含无关列。
  2. panel函数逻辑:
    • panel.xyplot绘制基础散点,对应car的默认散点展示。
    • panel.lmline添加线性回归线,对应car的reg.line=lm。
    • panel.smooth添加loess平滑曲线,span=0.5和car的参数保持一致,控制平滑程度。
  3. 对角线面板:用diag.panel调用panel.bwplot绘制垂直箱线图,box.ratio=0.5调整箱线宽度,和car的对角线箱线图效果匹配。
  4. 其他参数:
    • id.n=0关闭点的标签显示,对应car的id.n=0。
    • spread=FALSE关闭分散度相关线条,和car的设置一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:01:02