ggplot :: geom_boxplot()如何更改R中一个框组的宽度 [英] ggplot::geom_boxplot() How to change the width of one box group in R

查看:2285
本文介绍了ggplot :: geom_boxplot()如何更改R中一个框组的宽度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将随机类别中的框宽度调整为与情节中其他框相同的宽度。它现在是一个单一的组,而其他组包含两个子组......任何想法如何做到这一点?




使用 geom_boxplot(width = 0.2)只是改变所有框的宽度。到目前为止,我使用了下面的代码:

pre $ g $ p $ g $ p $ g $ p $ g $ p $ c $ g $ pPyCatchmentAndYear 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_hourl Y, 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_200 9_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_Log NormSDdivBy2_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, 1L,1L,1L,1L,2L,2L,2L,2L,2L,5L,5L,5L,5L,5L,5L,5L,5L,5L, 1L,1L,1L,4L,4L,4L,4L,4L,
4L,4L,4L,4L,4L,3L,3L,3L,3L,3L,3L,3L,3L, 2L,2L,2L,2L,2L,2L,2L,2L,2L).Label = c(bench,LogNormSDdivBy1,
LogNormSDdivBy2,LogNormSDdi (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)。标签= c(hourly,weekly),class =factor) ,
yearChar = c(dry,dry,dry,dry,dry,dry,dry,
dry,dry干燥,干燥,干燥,干燥,干燥,干燥,干燥,
干燥,干燥 ,干燥的,干燥的,干燥的,干燥的,干燥的,干燥的,干燥的,干燥的,干燥的,干燥的,干燥的,干燥,干燥,
干燥,干燥,干燥,干燥,干燥,干燥,干燥,干燥,干燥 b干干干干干干干干干
干干 ,干燥的,干燥的,干燥的,干燥的,干燥的,干燥的,干燥的,b $ b干燥的,干燥的,干燥的,干燥的,干燥,干燥,干燥,干燥,干燥,
干燥,干燥,干燥,干燥 ,干,干,
干燥,干燥,干燥,干燥,干燥,干燥,干燥,干燥 (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, 7L,8L,9L,10L,1L,2L,3L,4L,5L,6L,7L,8L,9L,
10L,1L,2L,3L,4L,5L,6L,7L,8L, 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.53 15,0.5092,0.5137,0.5417,0.66635,0.66427,0.6561,
0.6702,0.7035,0.6789,0.66631,0.6544,0.66432,0.6384,0.2223,
0.1757,-0.0048,0.1677,0.2586,0.22926,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.66474,0.66221,
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.2273,0.4073,0.3257,0.3435 ,0.4297,
0.4375,0.3451),LogReff = c(0.6498,0.66665,0.684,0.6078,
0.6845,0.6375,0.6325,0.6871,0.66661,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.66621,
0.655,0.66763,0.66668,0.66557,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
),体积误差= c(0.9267,0.931,0.9401,0.9225,0.9507,
0.923,0.9243,0.93536,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.66478,0.6046,0.008,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.99964,0.99818,0.90 97,
0.9822,0.9954,0.9996,0.9768,0.9644,0.9974,0.9962,0.998,
0.9995, 0.9783,0.7664,0.8786,0.7615,0.799,0.7369,
0.7722,0.8399,0.7354,0.771,0.77745),MAREMeasure = c(0.532,
0.543,0.557,0.4971,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.11196,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.66468,0.66736,
0.6175,0.6219,0.6604,0.66769,0.5 766,0.6301,0.6793,0.5227,
0.6047,0.647,0.6657,0.661,0.6324,0.5751,0.6707,0.6532,0.001元,0.6621),POA = c(0.692775,0.7091,0.723475,0.6656,0.724725, b $ b 0.6884,0.6821,0.729575,0.706475,0.686975,0.6035,0.616475 b $ b 0.596025,0.6189,0.594125,0.60665,0.612175,0.6191,0.635425 b $ b 0.627025,0.6169,0.59255,0.619275,0.6614075,0.623725 b。 ,
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.669755,0.70445,
0.7185,0.713025,0.7052,0.682525,0.706975,0.744475,0.69365,
0.69625,0.7491,0.743975,0.6643575,0.70285,0.746075,0.4712,
0.54845, (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,1006L,1007L,1008L, 1009L,1010L,501L,502L,503L,504L,
505L,506L,507L,508L,509L,510L,36001L,36002L,36003L,36004L,
36005L,36006L,36007L,36008L,36009L, 3601L,401L,402L,403L,
404L,405L,406L,407L,408L,409L,410L,1901L,1902L,1903L,
1904L,1905L,1906L,1907L,1908L,1909L, 1401L,1402L,
1403L,1404L,1405L,1406L,1407L,1408L,1409L,1410L,901L,
902L,903L,904L,905L,906L,907L,908L,909L,910L) =data.frame)


解决方案

=HTT ps://stackoverflow.com/a/15368879/8449629>第二个解决方案在这里可以根据你的情况进行修改:



第1步。添加假使用 complete 从tidyr包获取数据到数据集:

  TablePerCatchmentAndYear2< -  TablePerCatchmentAndYear%>%
dplyr :: select(NoiseType,TempRes,POA)%>%
tidyr :: complete(NoiseType,TempRes,fill = list(POA = 100))$ b $在这里任意选择b#100作为超过箱形图


$ b中
#POA值范围的非常大的值$ b

第2步:绘制,但将y轴限制设置在 coord_cartesian 内:

  ggplot(dat2,aes(x = NoiseType,y = POA,fill = TempRes))+ 
geom_boxplot(lwd = 0.05)+ coord_cartesian(ylim = c(-1.25,1))+ theme(legend.position ='bottom')+
ggtitle('title')+ scale_fill_discrete(name ='')

原因是使用 ylim()<设置限制/ code>命令会导致每周随机噪声类型的空盒图空间消失。 ylim 的帮助文件指出:


请注意,默认情况下,超出限制将被取代
与NA

虽然 coord_cartesian 的帮助文件指出:


设置坐标系限制缩放图(如使用放大镜在
中查看),不会改变
基础数据,例如设置限制一个比例。




替代解决方案



这将使所有框保持相同的宽度,无论是否有与每个类别x轴上。它通过展平x变量〜填充因子变量关系的分层性质来实现这一点,使得x变量〜填充因子变量的每个组合在箱线图中被赋予相等的权重(&因此宽度) 。

第1步。定义每个boxplot沿着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))

#检查结果
TablePerCatchmentAndYe33%>%
select(NoiseType,TempRes,NoiseType.Numeric)%> ;%
unique()%>%arran ge(NoiseType.Numeric)

NoiseType TempRes NoiseType.Numeric
1个工作时间每小时0.8
2个工作周每周1.2
3 LogNormSDdivBy1每小时1.8
4 LogNormSDdivBy1每周2.2
5 LogNormSDdivBy2每小时2.8
6 LogNormSDdivBy2每周3.2
7 LogNormSDdivBy4每小时3.8
8 LogNormSDdivBy4每周4.2
9随机每小时5.0



第2步:用分类标签标记数字x轴:

 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 = '')



注意:我个人不推荐这个解决方案。由于需要根据存在的填充变量级别的数量进行不同的手动调整,因此很难自动化/概括化。但是如果你确实需要这样的一次性使用案例,它就在这里。


I want to adapt the width of the box in the category "random" to the same width of the other boxes in the plot. It is now a single group, whereas the other groups contain two subgroups... Any ideas on how to do that?

Using geom_boxplot(width=0.2) just changes the width of all boxes. So far I used the following code:

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 = '')

The data that I used for this is the following table:

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")

解决方案

The second solution here can be modified to suit your case:

Step 1. Add fake data to dataset using complete from the tidyr package:

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

Step 2. Plot, but setting y-axis limits within coord_cartesian:

ggplot(dat2,aes(x=NoiseType, y= POA, fill = TempRes)) + 
  geom_boxplot(lwd=0.05) + coord_cartesian(ylim = c(-1.25, 1)) + theme(legend.position='bottom') + 
  ggtitle('title')+ scale_fill_discrete(name = '')

Reason for this is that setting the limits using the ylim() command would have caused the empty boxplot space for weekly random noise type to disappear. The help file for ylim states:

Note that, by default, any values outside the limits will be replaced with NA.

While the help file for coord_cartesian states:

Setting limits on the coordinate system will zoom the plot (like you're looking at it with a magnifying glass), and will not change the underlying data like setting limits on a scale will.

Alternative solution

This will keep all boxes at the same width, regardless whether there were different number of factor levels associated with each category along the x-axis. It achieves this by flattening the hierarchical nature of the "x variable"~"fill factor variable" relationship, so that each combination of "x variable"~"fill factor variable" is given equal weight (& hence width) in the boxplot.

Step 1. Define the position of each boxplot along the x-axis, taking x-axis as numeric rather than categorical:

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

Step 2. Plot, labeling the numeric x-axis with categorical labels:

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 = '')

Note: Personally, I wouldn't recommend this solution. It's difficult to automate / generalize as it requires different manual adjustments depending on the number of fill variable levels present. But if you really need this for a one-off use case, it's here.

这篇关于ggplot :: geom_boxplot()如何更改R中一个框组的宽度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆