具有两个Y轴的分组框图

编程入门 行业动态 更新时间:2024-10-25 03:25:34
本文介绍了具有两个Y轴的分组框图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想使用GGPLOT2为同一类别制作两个具有不同信息的框图,并使用两个Y轴。 如下图所示:

我有两个区域(AM和AR)的类别信息(速度和旋转角度),我想将这两个运动模式组合在一个根据区域分组的图形中。

到目前为止,我的代码如下所示:

areaveleang <- ggplot(dados2, aes(x = area)) + geom_boxplot(aes(y = speed, color="Bruto" ), fill = "darkblue", alpha=0.7) + geom_boxplot(aes(y = angulo_modulo), color="#a50026", position = "dodge") + scale_y_continuous(name = "speed (km/h)", sec.axis = sec_axis(~ . *6,name=expression("turn angle (graus)"))) + #breaks = seq(0, 175, 25), #limits=c(0, 175)) + scale_x_discrete(name = "Area") + #ggtitle("Boxplot of mean ozone by month") + theme_bw() + theme(plot.title = element_text(size = 14, family = "Tahoma", face = "bold"), text = element_text(size = 12, family = "Tahoma"), axis.title = element_text(face="bold"), axis.text.x=element_text(size = 11), legend.position = "bottom") + scale_fill_brewer(palette = "Accent")

我的部分数据:

structure(list(lon = c(-38.8745, -38.8676, -38.9445, -38.9811, -38.9322, -38.9386), lat = c(-14.09437, -14.25664, -14.34518, -14.51857, -14.95994, -15.41684), bmode = c(1.396, 1.375, 1.346, 1.248, 1.074, 1.289), bmode.5 = c(1, 1, 1, 1, 1, 1), ID = structure(c(53L, 53L, 53L, 53L, 53L, 53L), .Label = c("10946.05", "20162.03", "21792.03", "21800.03", "21810.03", "24640.03", "24641.05", "24642.03", "27258.05", "27259.03", "27261.03", "27261.05", "27261.07", "33000.05", "37231.07", "37234.05", "37288.07", "42521.07", "50682.07", "50687.07", "60004.07", "81122.09", "81123.09", "81124.09", "81125.09", "81126.09", "84497.1", "87632.12", "87759.08", "87761.08", "87762.08", "87763.08", "87764.08", "87765.08", "87766.08", "87768.08", "87768.11", "87769.11", "87770.08", "87773.08", "87773.1", "87773.11", "87774.09", "87774.11", "87775.08", "87776.08", "87776.11", "87777.1", "87778.08", "87783.09", "88724.1", "88727.09", "111868.11", "111871.12", "112702.12", "112712.12", "112714.12", "120947.12", "121189.12", "121192.12", "121196.12", "1211931.12"), class = "factor"), sex = structure(c(3L, 3L, 3L, 3L, 3L, 3L), .Label = c("F", "Fc", "M"), class = "factor"), speed = c(0.921691675, 2.990097297, 2.137609076, 3.259383146, 8.173674567, 8.413534172), area = structure(c(3L, 3L, 3L, 3L, 3L, 3L), .Label = c("AA", "AM", "AR"), class = "factor"), angulo = c(41.027, -43.41, 29.056, 18.241, -7.125, -4.702 ), angle_rel = c(0.7160619, -0.7576522, 0.5071251, 0.3183724, -0.1243479, -0.08206201), bat.depth = c(-45L, -397L, -32L, -29L, -21L, -3L), dist = c(5.53015005, 17.94058378, 12.82565446, 19.55629887, 49.0420474, 50.48120503), angulo_modulo = c(41.027, 43.41, 29.056, 18.241, 7.125, 4.702), curva = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("curva", "reta"), class = "factor")), row.names = 2:7, class = "data.frame")

PS:对不起,我的英语不好,希望你能理解我的问题

推荐答案

不确定我是否正确,但可能这就是您要查找的内容:

  • 若要获得正确的次轴比例,必须对数据应用反变换,即乘以6时,必须将数据中的angulo_modulo除以6。

  • 要避开这两个框图,我建议使用tidyr::pivot_longer,这样您的两个变量就变成了一个变量的两个类别,该变量默认命名为name,而值则为value。这样就可以将value映射到y和name映射到color、alpha和fill上。默认情况下,ggplot2将为每个区域提供两个并排的框图。

  • library(ggplot2) library(tidyr) library(dplyr) dados2 %>% mutate(angulo_modulo = angulo_modulo / 6) %>% pivot_longer(cols = c(speed, angulo_modulo)) %>% mutate(name = factor(name, levels = c("speed", "angulo_modulo"))) %>% ggplot(aes(x = area)) + geom_boxplot(aes(y = value, color = name, alpha = name, fill = name)) + scale_y_continuous(name = "speed (km/h)", sec.axis = sec_axis(~ . * 6, name = expression("turn angle (graus)"))) + scale_x_discrete(name = "Area") + scale_color_manual(values = c(angulo_modulo = "darkblue", speed = "#a50026")) + scale_alpha_manual(values = c(0.7, 1)) + theme_bw() + theme(plot.title = element_text(size = 14, family = "sans", face = "bold"), text = element_text(size = 12, family = "sans"), axis.title = element_text(face="bold"), axis.text.x=element_text(size = 11), legend.position = "bottom") + scale_fill_brewer(palette = "Accent")

    更多推荐

    具有两个Y轴的分组框图

    本文发布于:2023-11-30 11:02:36,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1649740.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:框图   两个

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!