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