提问人:Ben 提问时间:7/25/2023 最后编辑:Ben 更新时间:7/25/2023 访问量:36
2 件事:如何在保留对数刻度的同时将 y 轴值更改为更易于管理的值?如何在盒子上叠加数据的散点图?
2 things: How to change y-axis values to something more manageable whilst retaining log scale? How to overlay a scatter plot of the data over the box?
问:
(请参阅链接中的图片以获得更好的解释)
尝试绘制日志箱线图。我是 R 的新手,并尝试阅读教程,但它们似乎都使用不同的绘图功能?
1/ 我想知道如何在保留对数刻度的同时更改 y 轴值(即更改为 0.001、0.01、0.1、1 等)?
2/ 我还想知道如何在盒子上叠加数据的散点图?
3/ 最后,关于如何添加网格线和边框、所选粗细和颜色以及轴标题的建议会很棒吗?
到目前为止,仅使用的代码是:
boxplot(box,
varwidth = TRUE, log = "y", las = 1)
对不起,这太明显了,但谢谢大家!
可重现:(前 30 个数据点)
structure(list(CD = c(0.291998350286, 58.4266839332, 1.27227891359,
7.05106388302, 0.000175203165079, 14.5665189804, 0.991317477169,
1.56817217741, 30.4733699427, 0.421737157934, 1.42372160368,
0.333712081068, 0.126643859356, 0.339337851064, 0.151788605996,
3.81711532569, 1.54344215823, 17.2540240816, 3.67548135199, 4.08331544672,
0.0549081111653, 0.0734888395127, 5.16751927204, 22.6971132167,
1.04321972985, 0.184343635879, 2.29291935133, 0.0555342051937,
0.411328596454, 51.3157360015), WD = c(0.402162969955, 0.189544929529,
0.000840280055822, 0.0501429051167, 3.4853343866, 0.0286017538011,
0.0121948073037, 0.992426638872, 0.0192559537415, 0.00398698494632,
0.888543226817, 0.703331842713, 0.378008558951, 4.70639786908,
0.113706495683, 1.32546254378, 0.936899368015, 0.108969215053,
0.25593198462, 0.564518000036, 0.121389166752, 0.195884521759,
0.704964462359, 1.25602965005, 0.0242662609253, 2.11883481514,
0.44581781826, 0.659586439033, 0.36869665263, 0.824802234027),
MC = c(0.0817800846374, 1.70562818122, 0.0807325401412, 0.180484111266,
0.0438908620273, 8.75617400342, 0.479370274286, 0.908307567192,
2.81446961622, 0.0699990348088, 0.0491805903311, 0.00573142245572,
0.116352754956, 0.311847695137, 0.0414215549125, 0.104499713126,
0.0551723673287, 0.076199002014, 0.191940770942, 4.11745930602,
1.75751348869, 0.0517694407553, 2.29459310871, 0.0269233884783,
0.097992042257, 11.7325079183, 0.262543381616, 0.748125397347,
0.635821595694, 0.794256126423), WC = c(0.0686062258206,
0.514240129693, 7.68226019254, 4.36776848419, 0.618214352027,
2.13911888244, 0.0392505689889, 0.0823059942863, 2.36466448826,
0.0688590035687, 0.151457824484, 0.260629997743, 8.30460664472,
0.235838508742, 0.41960151168, 4.38818043685, 0.0797918590848,
0.109025596179, 0.0837286212892, 0.0117251770506, 1.17739717792,
0.207413909376, 8.62180088733, 2.33021344099, 0.166981061366,
1.13410263425, 0.0905601584251, 0.154075808752, 0.140498581833,
0.213863468391), MWC = c(301.891645135, 0.672405306137, 0.105110378336,
5.36947765018, 0.672138277335, 3.58296467263, 10.7754596083,
5.01795685162, 0.0775842457366, 1.07683084271, 1.0360624974,
16.8763517534, 0.390002867544, 1.50618637339, 0.371973397842,
1.28366689573, 0.0633246500391, 0.0364964802158, 0.249895194073,
0.0379084221473, 0.0798275709535, 0.504735639066, 8.12262202509,
82.5787360252, 0.068574731873, 8.76779568117, 0.00873932360562,
0.0142029221366, 0.0228083224849, 0.146073745479)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -30L))
>
答:
0赞
neilfws
7/25/2023
#1
这里有很多问题,实际上归结为“如何使用 ggplot2”。这是一个很好的介绍性指南。
首先,您的数据采用“宽”格式,与“长”格式配合使用效果更好(一列用于数据名称,一列用于其值)。我们可以为此使用。默认情况下,它会生成新列和 .ggplot2
tidyr::pivot_longer()
name
value
对于箱线图,我们使用 .我认为您所说的“散点图”是指“抖动图”,这是在箱线图上叠加单个数据点的常用方法。相应的函数是 。geom_boxplot()
geom_jitter()
可以通过多种不同的方式更改 y 轴值的标签。一种是使用包中的函数。另一种是提供标签功能 - 请参阅下面的代码。scales
可以使用该函数添加轴标题。labs()
所选粗细和颜色的网格线和边框:嗯,这取决于你到底想要什么,但一般来说,你会使用并寻找与 .在下面的示例代码中,我们添加了一个粗红色边框。theme()
panel
因此,将所有这些放在一起:
library(ggplot2)
library(tidyr)
library(dplyr)
box %>%
pivot_longer(everything()) %>%
ggplot(aes(name, value)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter(width = 0.2) +
scale_y_log10(labels = function(x) format(x, scientific = FALSE)) +
theme_bw() +
theme(panel.border = element_rect(fill = NA, color = "red", size = 2)) +
labs(x = "Group", y = "Value")
结果。希望能帮助您入门。
评论
0赞
Ben
7/25/2023
非常感谢!有一些代码可以使用,这样我就可以复制其他代码,这真是太好了,真的很感激!如果可以的话,还有两个问题:1/是否可以组织抖动,以便按时间顺序排列/例如,按从左到右的出现顺序排列?还是那是不可能的?2/ 我还有一个关于箱形图上等空间平方根 y 尺度的问题;我似乎无法确保 sqrt y 标签的距离相等(如对数图),同时确保数据值更新以对应;你介意看看我目前拥有的代码吗?再次感谢!
0赞
neilfws
7/25/2023
如果你的意思是排序点而不是类别?不,抖动是随机的。目的只是显示数据点的数量及其分布。第二个问题,您可能应该作为新问题发布。
0赞
Ben
7/27/2023
基本上意味着两者兼而有之。在 x 上保留带有 CD WD 等主要类别的箱形图,但对于每个主要类别图,叠加抖动/散射点按时间顺序从左到右,因此保留了时间序列方面 - 从您所说的听起来不可能?问题 2 经过一番摆弄,我以某种方式设法解决了,谢谢!不确定是否值得发布并提供解决方案,以防其他人感兴趣?
下一个:基于真实信号的DPSK解调
评论
dput(box)
ggplot2
geom_boxplot()
geom_jitter()
labs()
theme()
dput