r_xiaobai666 2025-05-04 20:09 采纳率: 39.3%
浏览 13
已结题

利用par函数在一个画布上展示两个图报错

想同时展示两个circle图,利用以下代码,但是报错,不知道什么问题。

par(mfrow = c(1,2), xpd=TRUE)
p1<-netVisual_circle(cellchat_ctrl@net$count, vertex.weight = groupSize_ctrl,
                 weight.scale = T, label.edge= F, title.name = "Number of interactions control")
p2<-netVisual_circle(cellchat_treat@net$count, vertex.weight = groupSize_treat,
                     weight.scale = T, label.edge= F, title.name = "Number of interactions treatment")
p1 + p2

img

  • 写回答

4条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-05-04 20:13
    关注

    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。
    如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!

    根据您的问题描述,您在使用par(mfrow)netVisual_circle组合时遇到了错误。问题出在您尝试用+运算符合并两个图形对象,但netVisual_circle返回的对象不支持这种操作。以下是解决方案:

    1. 问题分析

    • par(mfrow)只适用于基础图形系统(base graphics)
    • netVisual_circle来自CellChat包,返回的是ggplot2对象
    • 不能直接使用+合并两个独立生成的ggplot对象

    2. 正确解决方案

    方案1:使用patchwork包合并ggplot对象

    library(patchwork)
    
    par(mfrow = c(1,2), xpd=TRUE)  # 这行实际上不需要了
    p1 <- netVisual_circle(cellchat_ctrl@net$count, 
                          vertex.weight = groupSize_ctrl,
                          weight.scale = TRUE, 
                          label.edge = FALSE, 
                          title.name = "Number of interactions control")
    p2 <- netVisual_circle(cellchat_treat@net$count, 
                          vertex.weight = groupSize_treat,
                          weight.scale = TRUE, 
                          label.edge = FALSE, 
                          title.name = "Number of interactions treatment")
    
    # 使用patchwork并排显示
    p1 | p2  # 或者 p1 + p2 + plot_layout(ncol = 2)
    

    方案2:使用gridExtra包

    library(gridExtra)
    
    p1 <- netVisual_circle(...) # 同上
    p2 <- netVisual_circle(...) # 同上
    
    grid.arrange(p1, p2, ncol = 2)
    

    3. 注意事项

    1. 确保已安装所需包:

      install.packages(c("patchwork", "gridExtra"))
      
    2. 如果仍需要基础图形系统的多图布局,应该使用基础绘图函数而非ggplot2

    3. 您的原始代码中有些拼写错误需要注意:

      • netvisual_circle → 正确是netVisual_circle(注意大小写)
      • Title.name → 参数名应该是title.name
      • 引号使用了中文引号 → 应改为英文引号"

    希望这个解决方案能帮助您解决问题!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月12日
  • 已采纳回答 5月4日
  • 创建了问题 5月4日