楼主: hopui2017
7018 4

[问答] Ggplot2绘图分面坐标轴(保留2位小数)、分面图之间缝隙调整、对每个图在纵坐标轴添加 [推广有奖]

  • 10关注
  • 3粉丝

已卖:80份资源

硕士生

10%

还不是VIP/贵宾

-

威望
0
论坛币
2638 个
通用积分
11.9105
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
648 点
帖子
61
精华
0
在线时间
143 小时
注册时间
2017-10-19
最后登录
2025-12-12

楼主
hopui2017 发表于 2020-8-23 19:29:12 |AI写论文
10论坛币

ggplot2绘图分面坐标轴(保留2位小数)、分面图之间缝隙调整、对每个图在纵坐标轴添加取值不同的直线。

1.jpg

迫切希望调整图与图的间隙为下图这种情况。

2.png



最佳答案

llb_321 查看完整内容

查了facet源代码,是批量操作,无法单独为各分面添加不同的线 有另外一种解决方案: 对原数据进行分组处理,然后各组单独绘图,最后再组合到一起。用ggplot2可以实现。 这段代码是版主以前分享的,组合作图,你可以参考
关键词:ggplot2 gplot plot 坐标轴 纵坐标 R画图;ggplot2分面

回帖推荐

llb_321 发表于5楼  查看完整内容

查了facet源代码,是批量操作,无法单独为各分面添加不同的线 有另外一种解决方案: 对原数据进行分组处理,然后各组单独绘图,最后再组合到一起。用ggplot2可以实现。 这段代码是版主以前分享的,组合作图,你可以参考
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
2017110138 + 5 + 2 + 2 + 2 精彩帖子

总评分: 论坛币 + 5  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

本帖被以下文库推荐

沙发
llb_321 在职认证  发表于 2020-8-23 19:29:13
查了facet源代码,是批量操作,无法单独为各分面添加不同的线
有另外一种解决方案:
对原数据进行分组处理,然后各组单独绘图,最后再组合到一起。用ggplot2可以实现。
这段代码是版主以前分享的,组合作图,你可以参考
  1. library(dplyr)
  2. # 画出左上的密度分布图
  3. g_top_left <- mtcars %>%
  4.   ggplot(aes(x = mpg)) +
  5.   geom_density(fill = "#177cb0") +
  6.   theme_bw() +
  7.   theme(panel.background = element_blank(),
  8.         panel.border = element_blank(),
  9.         axis.title = element_blank(),
  10.         panel.grid.major = element_blank(),
  11.         panel.grid.minor = element_blank(),
  12.         axis.line.x = element_line(),
  13.         axis.line.y = element_line()) +
  14.   scale_x_continuous(expand = c(0.03, -0.4), limits = c(10, 35))

  15. # 画出右下的密度分布图
  16. g_bottom_right <- mtcars %>%
  17.   ggplot(aes(x = wt)) +
  18.   geom_density(fill = "#789262") +
  19.   theme_bw() +
  20.   theme(panel.background = element_blank(),
  21.         panel.border = element_blank(),
  22.         axis.title = element_blank(),
  23.         panel.grid.major = element_blank(),
  24.         panel.grid.minor = element_blank(),
  25.         axis.line.x = element_line(),
  26.         axis.line.y = element_line()) +
  27.   coord_flip() +
  28.   scale_x_continuous(expand = c(0, 0), limits = c(1.3, 5.8))

  29. # 画出左下的散点图
  30. g_bottom_left <- mtcars %>%
  31.   ggplot(aes(x = mpg, y = wt)) +
  32.   geom_point() +
  33.   theme_bw()

  34. # 画出整体“画布”
  35. df <- data.frame(x = 1:10, y = 1:10)
  36. base <- ggplot(df, aes(x, y)) +
  37.   geom_blank() +
  38.   theme_bw() +
  39.   theme(panel.background = element_blank(),
  40.         panel.border = element_blank(),
  41.         axis.text = element_blank(),
  42.         axis.title = element_blank(),
  43.         axis.ticks = element_blank(),
  44.         axis.line = element_blank(),
  45.         panel.grid.major = element_blank(),
  46.         panel.grid.minor = element_blank())

  47. # 将小图在“画布”上组合
  48. base +
  49.   annotation_custom(grob = ggplotGrob(g_bottom_left), xmin = 1, xmax = 8, ymin = 1, ymax = 8) +
  50.   annotation_custom(grob = ggplotGrob(g_bottom_right), xmin = 8, xmax = 10, ymin = 1.3, ymax = 8.2) +
  51.   annotation_custom(grob = ggplotGrob(g_top_left), xmin = 1, xmax = 8, ymin = 8, ymax = 10)
复制代码


已有 1 人评分学术水平 热心指数 信用等级 收起 理由
2017110138 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
llb_321 在职认证  发表于 2020-8-25 22:04:08
facet_grid() 之后加一行
+theme(panel.spacing = unit(0.1, "lines"))
就可以调整分面之间的间隔。

纵坐标调整小数精度
+scale_y_continuous(label = round(????, 2)) #把????换成纵坐标的变量
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
2017110138 + 1 + 1 + 1 鼓励积极发帖讨论

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
2017110138 发表于 2020-8-26 10:34:15
llb_321 发表于 2020-8-25 22:04
facet_grid() 之后加一行
+theme(panel.spacing = unit(0.1, "lines"))
就可以调整分面之间的间隔。
非常感谢您的答案,分面图间隙调整的问题已经解决。但是由于我制作的分面图的纵坐标的间隔不是相等的,所以在绘图出现错误Breaks and labels are different lengths,请问如何解决呢?还有一个小问题,请您帮助,我需要在每个分面图的纵坐标中加入不同的直线,比如图1,2加y=0.03,图3,4加y=0.06.

报纸
llb_321 在职认证  发表于 2020-8-26 16:36:28
看下这个示例

  1. mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) +
  2. geom_point()

  3. mt + facet_grid(vars(cyl), scales = "free") +
  4. scale_y_continuous(labels = scales::label_comma(accuracy =0.01)) + #调用scales包的函数 accuracy 的参数是确定小数精度的
  5. theme(panel.spacing = unit(0.1, "lines")) +
  6. geom_hline(yintercept = 2.5) #在图上加横线 问题是这条线对所有分面都有效
复制代码


已有 1 人评分学术水平 热心指数 信用等级 收起 理由
2017110138 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-18 18:50