繁体   English   中英

如何在ggplot2中正确绘制具有数字x值的多个箱线图?

[英]How to plot multiple boxplots with numeric x values properly in ggplot2?

我试图在每个数据集大小中使用 3 个不同的工具获得一个箱线图,如下所示:

在此处输入图片说明

ggplot(data1, aes(x = dataset, y = time, color = tool)) + geom_boxplot() + 
  labs(x = 'Datasets', y = 'Seconds', title = 'Time') + 
  scale_y_log10() +  theme_bw()

但我需要将 x 轴转换为对数刻度。 为此,我需要对每个数据集进行数字化,以便能够将它们转换为对数刻度。 即使没有转换它们,它们看起来也像下面这样:

在此处输入图片说明

ggplot(data2, aes(x = dataset, y = time, color = tool)) + geom_boxplot() + 
  labs(x = 'Datasets', y = 'Seconds', title = 'Time') + 
  scale_y_log10() + theme_bw()

我检查了aes的boxplot参数和分组参数,但无法解决我的问题。 起初,我认为这个问题是由缩放到日志引起的,但是删除这些元素并没有解决问题。

我到底错过了什么? 谢谢...

文件在此链接中。 “data2”是“data1”的数字化版本。

你的问题很难回答,但我从中学到了一些新东西!

仅使用group = dataset是不够的,因为您还需要注意tool变量。 经过一番挖掘,我发现这篇文章使用了interaction()函数。

这是缺少的技巧。 您想使用group是因为您没有使用x值的因子,但您需要在数据分离中包含tool (因此使用interaction()将计算两个变量之间可能的交叉)。

# This is for pretty-printing the axis labels
my_labs <- function(x){
  paste0(x/1000, "k")
}
levs <- unique(data2$dataset)

ggplot(data2, aes(x = dataset, y = time, color = tool, 
                  group = interaction(dataset, tool))) + 
  geom_boxplot() + labs(x = 'Datasets', y = 'Seconds', title = 'Time') +
  scale_x_log10(breaks = levs, labels = my_labs) + # define a log scale with your axis ticks
  scale_y_log10() + theme_bw()

这情节

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM