ggplot::geom_boxplot()如何更改R中一个长方体组的宽度

ggplot::geom_boxplot()如何更改R中一个长方体组的宽度,r,ggplot2,width,boxplot,box,R,Ggplot2,Width,Boxplot,Box,我想将“random”类别中框的宽度调整为绘图中其他框的相同宽度。它现在是一个单独的组,而其他组包含两个子组。。。有什么办法吗 使用geom_盒形图(宽度=0.2)只需更改所有框的宽度。到目前为止,我使用了以下代码: ggplot(TablePerCatchmentAndYear,aes(x=NoiseType, y= POA, fill = TempRes)) + geom_boxplot(lwd=0.05) + ylim(c(-1.25, 1)) + theme(legend.posi

我想将“random”类别中框的宽度调整为绘图中其他框的相同宽度。它现在是一个单独的组,而其他组包含两个子组。。。有什么办法吗

使用
geom_盒形图(宽度=0.2)
只需更改所有框的宽度。到目前为止,我使用了以下代码:

ggplot(TablePerCatchmentAndYear,aes(x=NoiseType, y= POA, fill = TempRes)) + 
 geom_boxplot(lwd=0.05) + ylim(c(-1.25, 1)) + theme(legend.position='bottom') + 
 ggtitle('title')+ scale_fill_discrete(name = '')
我使用的数据如下表所示:

TablePerCatchmentAndYear = structure(list(CatchmentModelType = c("2126_Murg_2009_dry_bench_hourly", 
"2126_Murg_2009_dry_bench_hourly", "2126_Murg_2009_dry_bench_hourly", 
"2126_Murg_2009_dry_bench_hourly", "2126_Murg_2009_dry_bench_hourly", 
"2126_Murg_2009_dry_bench_hourly", "2126_Murg_2009_dry_bench_hourly", 
"2126_Murg_2009_dry_bench_hourly", "2126_Murg_2009_dry_bench_hourly", 
"2126_Murg_2009_dry_bench_hourly", "2126_Murg_2009_dry_LogNormSDdivBy4_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy4_hourly", "2126_Murg_2009_dry_LogNormSDdivBy4_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy4_hourly", "2126_Murg_2009_dry_LogNormSDdivBy4_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy4_hourly", "2126_Murg_2009_dry_LogNormSDdivBy4_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy4_hourly", "2126_Murg_2009_dry_LogNormSDdivBy4_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy4_hourly", "2126_Murg_2009_dry_LogNormSDdivBy2_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy2_hourly", "2126_Murg_2009_dry_LogNormSDdivBy2_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy2_hourly", "2126_Murg_2009_dry_LogNormSDdivBy2_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy2_hourly", "2126_Murg_2009_dry_LogNormSDdivBy2_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy2_hourly", "2126_Murg_2009_dry_LogNormSDdivBy2_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy2_hourly", "2126_Murg_2009_dry_LogNormSDdivBy1_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy1_hourly", "2126_Murg_2009_dry_LogNormSDdivBy1_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy1_hourly", "2126_Murg_2009_dry_LogNormSDdivBy1_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy1_hourly", "2126_Murg_2009_dry_LogNormSDdivBy1_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy1_hourly", "2126_Murg_2009_dry_LogNormSDdivBy1_hourly", 
"2126_Murg_2009_dry_LogNormSDdivBy1_hourly", "2126_Murg_2009_dry_random_hourly", 
"2126_Murg_2009_dry_random_hourly", "2126_Murg_2009_dry_random_hourly", 
"2126_Murg_2009_dry_random_hourly", "2126_Murg_2009_dry_random_hourly", 
"2126_Murg_2009_dry_random_hourly", "2126_Murg_2009_dry_random_hourly", 
"2126_Murg_2009_dry_random_hourly", "2126_Murg_2009_dry_random_hourly", 
"2126_Murg_2009_dry_random_hourly", "2126_Murg_2009_dry_bench_weekly", 
"2126_Murg_2009_dry_bench_weekly", "2126_Murg_2009_dry_bench_weekly", 
"2126_Murg_2009_dry_bench_weekly", "2126_Murg_2009_dry_bench_weekly", 
"2126_Murg_2009_dry_bench_weekly", "2126_Murg_2009_dry_bench_weekly", 
"2126_Murg_2009_dry_bench_weekly", "2126_Murg_2009_dry_bench_weekly", 
"2126_Murg_2009_dry_bench_weekly", "2126_Murg_2009_dry_LogNormSDdivBy4_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy4_weekly", "2126_Murg_2009_dry_LogNormSDdivBy4_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy4_weekly", "2126_Murg_2009_dry_LogNormSDdivBy4_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy4_weekly", "2126_Murg_2009_dry_LogNormSDdivBy4_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy4_weekly", "2126_Murg_2009_dry_LogNormSDdivBy4_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy4_weekly", "2126_Murg_2009_dry_LogNormSDdivBy2_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy2_weekly", "2126_Murg_2009_dry_LogNormSDdivBy2_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy2_weekly", "2126_Murg_2009_dry_LogNormSDdivBy2_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy2_weekly", "2126_Murg_2009_dry_LogNormSDdivBy2_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy2_weekly", "2126_Murg_2009_dry_LogNormSDdivBy2_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy2_weekly", "2126_Murg_2009_dry_LogNormSDdivBy1_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy1_weekly", "2126_Murg_2009_dry_LogNormSDdivBy1_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy1_weekly", "2126_Murg_2009_dry_LogNormSDdivBy1_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy1_weekly", "2126_Murg_2009_dry_LogNormSDdivBy1_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy1_weekly", "2126_Murg_2009_dry_LogNormSDdivBy1_weekly", 
"2126_Murg_2009_dry_LogNormSDdivBy1_weekly"), NoiseType = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("bench", "LogNormSDdivBy1", 
"LogNormSDdivBy2", "LogNormSDdivBy4", "random"), class = "factor"), 
    TempRes = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L), .Label = c("hourly", "weekly"), class = "factor"), 
    yearChar = c("dry", "dry", "dry", "dry", "dry", "dry", "dry", 
    "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", 
    "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", 
    "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", 
    "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", 
    "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", 
    "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", 
    "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", 
    "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", 
    "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", 
    "dry", "dry"), Parameterset = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 
    8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 
    6L, 7L, 8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
    10L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 1L, 2L, 3L, 
    4L, 5L, 6L, 7L, 8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 
    8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L), Reff = c(0.6626, 
    0.6959, 0.7128, 0.6351, 0.7056, 0.6755, 0.655, 0.7155, 0.6839, 
    0.6564, 0.543, 0.5652, 0.5405, 0.5698, 0.5395, 0.5548, 0.5652, 
    0.5699, 0.5892, 0.578, 0.5366, 0.5052, 0.5389, 0.5194, 0.5555, 
    0.5529, 0.5315, 0.5092, 0.5137, 0.5417, 0.6635, 0.6427, 0.6561, 
    0.6702, 0.7035, 0.6789, 0.6631, 0.6544, 0.6432, 0.6384, 0.2273, 
    0.1757, -0.0048, 0.1647, 0.2586, 0.2926, 0.0739, 0.2607, 
    0.0799, 0.3595, 0.6679, 0.6712, 0.6557, 0.6906, 0.6777, 0.6748, 
    0.6531, 0.6779, 0.6708, 0.6446, 0.6227, 0.6404, 0.6474, 0.6221, 
    0.6089, 0.6159, 0.6194, 0.6382, 0.6323, 0.6198, 0.4703, 0.5456, 
    0.5883, 0.5114, 0.5188, 0.6257, 0.6036, 0.4501, 0.5154, 0.6, 
    0.2172, 0.245, 0.3625, 0.2793, 0.4073, 0.3257, 0.3435, 0.4297, 
    0.4375, 0.3451), LogReff = c(0.6498, 0.6665, 0.684, 0.6078, 
    0.6845, 0.6375, 0.6325, 0.6871, 0.6661, 0.6396, 0.5571, 0.5735, 
    0.5398, 0.5763, 0.5389, 0.5612, 0.5657, 0.578, 0.5999, 0.5881, 
    0.5806, 0.5445, 0.5782, 0.5724, 0.5832, 0.6113, 0.5763, 0.5439, 
    0.5626, 0.5757, 0.6855, 0.6787, 0.7003, 0.6393, 0.6684, 0.6924, 
    0.6897, 0.6956, 0.6408, 0.6801, 0.2823, -0.6217, -0.5084, 
    0.1936, 0.2246, 0.5335, 0.0143, 0.3124, -1.2437, -1.2655, 
    0.7041, 0.6973, 0.6834, 0.7032, 0.7116, 0.7042, 0.6811, 0.7148, 
    0.693, 0.6994, 0.6543, 0.6724, 0.6962, 0.657, 0.6783, 0.6621, 
    0.655, 0.6763, 0.6668, 0.6557, 0.6393, 0.6671, 0.726, 0.6832, 
    0.6848, 0.725, 0.7171, 0.6249, 0.6998, 0.7267, 0.3785, 0.4655, 
    0.5272, 0.5249, 0.5853, 0.4842, 0.4172, 0.6045, 0.5857, 0.5238
    ), VolumeError = c(0.9267, 0.931, 0.9401, 0.9225, 0.9507, 
    0.923, 0.9243, 0.9536, 0.9312, 0.9285, 0.8689, 0.8718, 0.8716, 
    0.8716, 0.8683, 0.8658, 0.8691, 0.8703, 0.8764, 0.8745, 0.8786, 
    0.8773, 0.8875, 0.8924, 0.8837, 0.8862, 0.8865, 0.8779, 0.8792, 
    0.8901, 0.8119, 0.8109, 0.8412, 0.8254, 0.8271, 0.8509, 0.8161, 
    0.8259, 0.8386, 0.8263, 0.8507, 0.5669, 0.4859, 0.6478, 0.6046, 
    0.85, 0.9425, 0.9153, 0.5295, 0.6555, 0.9777, 0.994, 0.9915, 
    0.9899, 0.9738, 0.9833, 0.9694, 0.9981, 0.9964, 0.9818, 0.997, 
    0.9822, 0.9954, 0.9996, 0.9768, 0.9644, 0.9974, 0.9962, 0.998, 
    0.9995, 0.9962, 0.9684, 0.99, 0.9625, 0.9595, 0.9853, 0.9783, 
    0.9227, 0.9661, 0.9783, 0.7664, 0.8786, 0.7615, 0.799, 0.7369, 
    0.7722, 0.8399, 0.7354, 0.771, 0.7745), MAREMeasure = c(0.532, 
    0.543, 0.557, 0.497, 0.5581, 0.5176, 0.5166, 0.5621, 0.5447, 
    0.5234, 0.445, 0.4554, 0.4322, 0.4579, 0.4298, 0.4448, 0.4487, 
    0.4582, 0.4762, 0.4675, 0.4718, 0.4432, 0.4725, 0.4721, 0.4725, 
    0.4989, 0.4711, 0.4428, 0.4577, 0.4704, 0.7183, 0.7166, 0.7144, 
    0.6848, 0.6943, 0.7034, 0.7202, 0.7194, 0.6832, 0.7105, 0.4913, 
    0.5758, 0.5658, 0.5817, 0.6574, 0.6191, 0.1196, 0.3526, 0.5357, 
    0.5475, 0.5931, 0.5882, 0.5782, 0.5886, 0.5984, 0.5945, 0.5728, 
    0.6089, 0.5834, 0.5962, 0.5434, 0.5581, 0.5848, 0.5467, 0.5703, 
    0.5478, 0.546, 0.5633, 0.555, 0.5458, 0.6243, 0.6468, 0.6736, 
    0.6175, 0.6219, 0.6604, 0.6769, 0.5766, 0.6301, 0.6793, 0.5227, 
    0.6047, 0.647, 0.6657, 0.661, 0.6324, 0.5751, 0.6707, 0.6532, 
    0.6621), POA = c(0.692775, 0.7091, 0.723475, 0.6656, 0.724725, 
    0.6884, 0.6821, 0.729575, 0.706475, 0.686975, 0.6035, 0.616475, 
    0.596025, 0.6189, 0.594125, 0.60665, 0.612175, 0.6191, 0.635425, 
    0.627025, 0.6169, 0.59255, 0.619275, 0.614075, 0.623725, 
    0.637325, 0.61635, 0.59345, 0.6033, 0.619475, 0.7198, 0.712225, 
    0.728, 0.704925, 0.723325, 0.7314, 0.722275, 0.723825, 0.70145, 
    0.713825, 0.4629, 0.174175, 0.134625, 0.39695, 0.4363, 0.5738, 
    0.287575, 0.46025, -0.02465, 0.07425, 0.7357, 0.737675, 0.7272, 
    0.743075, 0.740375, 0.7392, 0.7191, 0.749925, 0.7359, 0.7305, 
    0.70435, 0.713275, 0.73095, 0.70635, 0.708575, 0.69755, 0.70445, 
    0.7185, 0.713025, 0.7052, 0.682525, 0.706975, 0.744475, 0.69365, 
    0.69625, 0.7491, 0.743975, 0.643575, 0.70285, 0.746075, 0.4712, 
    0.54845, 0.57455, 0.567225, 0.597625, 0.553625, 0.543925, 
    0.610075, 0.61185, 0.576375)), .Names = c("CatchmentModelType", 
"NoiseType", "TempRes", "yearChar", "Parameterset", "Reff", "LogReff", 
"VolumeError", "MAREMeasure", "POA"), row.names = c(1L, 2L, 3L, 
4L, 5L, 6L, 7L, 8L, 9L, 10L, 1501L, 1502L, 1503L, 1504L, 1505L, 
1506L, 1507L, 1508L, 1509L, 1510L, 1001L, 1002L, 1003L, 1004L, 
1005L, 1006L, 1007L, 1008L, 1009L, 1010L, 501L, 502L, 503L, 504L, 
505L, 506L, 507L, 508L, 509L, 510L, 36001L, 36002L, 36003L, 36004L, 
36005L, 36006L, 36007L, 36008L, 36009L, 36010L, 401L, 402L, 403L, 
404L, 405L, 406L, 407L, 408L, 409L, 410L, 1901L, 1902L, 1903L, 
1904L, 1905L, 1906L, 1907L, 1908L, 1909L, 1910L, 1401L, 1402L, 
1403L, 1404L, 1405L, 1406L, 1407L, 1408L, 1409L, 1410L, 901L, 
902L, 903L, 904L, 905L, 906L, 907L, 908L, 909L, 910L), class = "data.frame")
可以根据您的情况修改:

第一步。使用tidyr软件包中的
complete
将假数据添加到数据集:

TablePerCatchmentAndYear2 <- TablePerCatchmentAndYear %>% 
  dplyr::select(NoiseType, TempRes, POA) %>%
  tidyr::complete(NoiseType, TempRes, fill = list(POA = 100))
# 100 is arbitrarily chosen here as a very large value beyond the range of 
# POA values in the boxplot
原因是,使用
ylim()
命令设置限制会导致每周随机噪声类型的空箱线图空间消失。
ylim的帮助文件说明:

请注意,默认情况下,超出限制的任何值都将被替换 带有NA

coord_cartesian
的帮助文件说明:

在坐标系上设置限制将缩放绘图(如 您正在用放大镜查看),并且不会改变 基础数据如在刻度盘上设置限制,则会产生影响

替代解决方案

这将使所有框保持相同的宽度,而不管沿x轴与每个类别关联的因子级别的数量是否不同。它通过扁平化“x变量”~“填充因子变量”关系的层次性来实现这一点,以便在箱线图中为“x变量”~“填充因子变量”的每个组合赋予相等的权重(因此宽度)

第一步。定义每个箱线图沿x轴的位置,将x轴视为数字而非分类:

TablePerCatchmentAndYear3 <- TablePerCatchmentAndYear %>%
  mutate(NoiseType.Numeric = as.numeric(factor(NoiseType))) %>%
  mutate(NoiseType.Numeric = NoiseType.Numeric + case_when(NoiseType != "random" & TempRes == "hourly" ~ -0.2,
                                                           NoiseType != "random" & TempRes == "weekly" ~ +0.2,
                                                           TRUE ~ 0))

# check the result
TablePerCatchmentAndYear3 %>% 
  select(NoiseType, TempRes, NoiseType.Numeric) %>% 
  unique() %>% arrange(NoiseType.Numeric)

        NoiseType TempRes NoiseType.Numeric
1           bench  hourly               0.8
2           bench  weekly               1.2
3 LogNormSDdivBy1  hourly               1.8
4 LogNormSDdivBy1  weekly               2.2
5 LogNormSDdivBy2  hourly               2.8
6 LogNormSDdivBy2  weekly               3.2
7 LogNormSDdivBy4  hourly               3.8
8 LogNormSDdivBy4  weekly               4.2
9          random  hourly               5.0


注意:就个人而言,我不推荐这种解决方案。很难实现自动化/通用化,因为它需要根据存在的填充变量级别的数量进行不同的手动调整。但是,如果您真的需要将其用于一次性用例,它就在这里。

ggplot2 3.0.0开始,在
position\u dodge()
中有一个
preserve
参数,允许保留单个元素的宽度。还有第二个回避功能,
position_dodge2()
,用于更改元素在重叠打印区域的分布方式

如果希望所有框的宽度都相同,且单个框以其x记号为中心,则可以在
position\u dodge2()
中使用
preserve=“single”

如果要使所有框的宽度相同,并将单个元素组的回避与其他组镜像,可以将
preserve=“single”
添加到
position\u dodge()


这里的答案可能是相关的:ggplot2的开发版本(目前为2.2.1.9000)现在有
position\u dodge2
,这对这种情况很有用。另外,
position\u dodge
有一个
preserve
参数。谢谢您的提示@Z.Lin!但是,这会导致下一个问题:我将ggplots()保存在一个列表中,然后使用该函数在一个绘图中创建多个图形。使用提供的方法,这将不再有效。。。然后如何重新创建可以传递给multiplot()的“普通”ggplot2()对象?谢谢你的回答!我从图像中看到它可以工作,但我无法让它与我的数据一起工作……当在步骤1中运行提供的代码时,我得到以下错误:
select(,NoiseType,TempRes,POA)中的错误:未使用的参数(NoiseType,TempRes,POA)
您的select函数来自哪个包?我用了一个来自大众的…我刚才意识到的…它也可以在你的结果中看到。“随机”框现在没有与标签对齐…如果它直接在上面就好了。。。有(其他)简单的解决办法吗。。以下代码适用于该职位:
TablePerCatchmentAndYear2$TempRes[TablePerCatchmentAndYear2$NoiseType=='random']@simoet添加了替代解决方案。你刚刚给我做了一份很棒的生日礼物,却没有意识到;)谢谢我现在也学到了很多!这比添加假数据要有效得多。感谢您的指点。如果在箱线图上添加了点图,那么preserve=“single”是否适用于点图?@PraveenKumar-M我相信对于
geom\u dotplot()
您会希望使用
position=“dodge”
而不使用
preserve=“single”
使事情看起来正确。@aosmith我已经在使用
geom_点图(binaxis='y',stackdir='center',position=position_dodge(0.8),dotsize=0.2)
这样最后一个点图没有完全对齐。你是否使用
width=0.8
来避开两层,@PraveenKumar-M?我这样问是因为默认值是0.75(或0.9;我真的不记得是哪个)。使用OP中的示例有点难分辨,但使用
position=“dodge”
(因此使用默认宽度)看起来一切正常。如果仍然不起作用,尝试打开一个新问题。:)
TablePerCatchmentAndYear3 <- TablePerCatchmentAndYear %>%
  mutate(NoiseType.Numeric = as.numeric(factor(NoiseType))) %>%
  mutate(NoiseType.Numeric = NoiseType.Numeric + case_when(NoiseType != "random" & TempRes == "hourly" ~ -0.2,
                                                           NoiseType != "random" & TempRes == "weekly" ~ +0.2,
                                                           TRUE ~ 0))

# check the result
TablePerCatchmentAndYear3 %>% 
  select(NoiseType, TempRes, NoiseType.Numeric) %>% 
  unique() %>% arrange(NoiseType.Numeric)

        NoiseType TempRes NoiseType.Numeric
1           bench  hourly               0.8
2           bench  weekly               1.2
3 LogNormSDdivBy1  hourly               1.8
4 LogNormSDdivBy1  weekly               2.2
5 LogNormSDdivBy2  hourly               2.8
6 LogNormSDdivBy2  weekly               3.2
7 LogNormSDdivBy4  hourly               3.8
8 LogNormSDdivBy4  weekly               4.2
9          random  hourly               5.0
ggplot(TablePerCatchmentAndYear3,
       aes(x = NoiseType.Numeric, y = POA, fill = TempRes, group = NoiseType.Numeric)) +
  geom_boxplot() +
  scale_x_continuous(name = "NoiseType", breaks = c(1, 2, 3, 4, 5), minor_breaks = NULL,
                     labels = sort(unique(dat$NoiseType)), expand = c(0, 0)) + 
  coord_cartesian(ylim = c(-1.25, 1), xlim = c(0.5, 5.5)) + 
  theme(legend.position='bottom') + 
  ggtitle('title')+ scale_fill_discrete(name = '')
ggplot(TablePerCatchmentAndYear, aes(x = NoiseType, y = POA, fill = TempRes)) + 
     geom_boxplot(lwd = 0.05, position = position_dodge2(preserve = "single") ) + 
     ylim(-1.25, 1) + 
     theme(legend.position='bottom') + 
     scale_fill_discrete(name = '')
ggplot(TablePerCatchmentAndYear, aes(x = NoiseType, y = POA, fill = TempRes)) + 
     geom_boxplot(lwd = 0.05, position = position_dodge(preserve = "single") ) + 
     ylim(-1.25, 1) + 
     theme(legend.position='bottom') + 
     scale_fill_discrete(name = '')