[英]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.