简体   繁体   English

删除网格中条形之间的空间

[英]Remove space between bars within a grid

I want to move bars that are within one grid closer to save space. 我想将靠近一个网格的条形移动以节省空间。 Is there a way to do that? 有没有办法做到这一点? The code I used just change the bar width and does not change the spacing. 我使用的代码仅更改条形宽度,而不会更改间距。 I am aware that bindwidth no longer work in geom_bar as I referred to these problems: 我知道当我提到这些问题时, bindwidthgeom_bar不再起作用:

Adding space between bars in ggplot2 Increase space between bars in ggplot 在ggplot2中的小节之间添加空间 增加在ggplot中的小节之间的空间

This is the data 这是数据

dput(grp1)
structure(list(Rot = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("2-year", 
"3-year", "4-year"), class = "factor"), Rot.Herb = structure(c(3L, 
4L, 13L, 14L, 5L, 6L, 9L, 10L, 15L, 16L, 1L, 2L, 7L, 8L, 11L, 
12L, 17L, 18L), .Label = c("A4-conv", "A4-low", "C2-conv", "C2-low", 
"C3-conv", "C3-low", "C4-conv", "C4-low", "O3-conv", "O3-low", 
"O4-conv", "O4-low", "S2-conv", "S2-low", "S3-conv", "S3-low", 
"S4-conv", "S4-low"), class = "factor"), Rot.trt = structure(c(2L, 
2L, 7L, 7L, 3L, 3L, 5L, 5L, 8L, 8L, 1L, 1L, 4L, 4L, 6L, 6L, 9L, 
9L), .Label = c("A4", "C2", "C3", "C4", "O3", "O4", "S2", "S3", 
"S4"), class = "factor"), Crop = structure(c(2L, 2L, 4L, 4L, 
2L, 2L, 3L, 3L, 4L, 4L, 1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L), .Label = c("alfalfa", 
"corn", "oat", "soybean"), class = "factor"), Year = c(2014L, 
2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 
2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L), Herb.trt = structure(c(1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L), .Label = c("conv", "low"), class = "factor"), variable = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L), .Label = "kg.ha", class = "factor"), N = c(4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4), value = c(0.43168573275, 
16.22463846275, 0.554446363, 25.89844593075, 13.882743364, 84.1922080725, 
84.2625, 105.7375, 0.8350420895, 106.7464386085, 127.8875, 65.3875, 
1.964170084, 29.46524929925, 249.7625, 333.125, 0.535560112, 
28.757014893), sd = c(0.528135488290589, 20.3216237207314, 0.8810357408252, 
40.4576156325903, 27.3195114207629, 71.6424882235524, 22.6948736869511, 
40.9587266851237, 0.931926987921512, 108.45555847826, 89.1035387905553, 
25.141843442092, 2.20017281317418, 24.1072626208021, 93.2983509589889, 
85.0439543216722, 0.48339034731648, 33.2628789566726), se = c(0.264067744145294, 
10.1608118603657, 0.4405178704126, 20.2288078162951, 13.6597557103815, 
35.8212441117762, 11.3474368434756, 20.4793633425619, 0.465963493960756, 
54.2277792391299, 44.5517693952777, 12.570921721046, 1.10008640658709, 
12.0536313104011, 46.6491754794945, 42.5219771608361, 0.24169517365824, 
16.6314394783363), ci = c(0.840381416699796, 32.3362381637038, 
1.40192446910603, 64.3770946952626, 43.4714390915815, 113.999185974188, 
36.112608456959, 65.1744742040986, 1.48290379975249, 172.576995683309, 
141.783613905853, 40.0062833851536, 3.50096592013592, 38.3600344290379, 
148.458496149248, 135.323909108861, 0.76918191241357, 52.928663119381
)), .Names = c("Rot", "Rot.Herb", "Rot.trt", "Crop", "Year", 
"Herb.trt", "variable", "N", "value", "sd", "se", "ci"), row.names = c(NA, 
-18L), class = "data.frame")

This is the code 这是代码

ggplot(grp1, aes(x=Rot.Herb, y=value, fill=factor(Herb.trt)))+
  geom_bar(stat="identity", position=position_dodge(.), width=.5)+
  scale_fill_brewer(palette = "Dark2")+
  theme_bw() +
  theme(panel.grid.major=element_blank()) +
  facet_grid(~Crop, scales = "free_x", space="free_x")+
  theme(legend.title=element_blank(),legend.text=element_text(size=20),legend.position="top")+
  geom_errorbar(aes(ymin=value-se, ymax=value+se), size=0.75, width=.25,position=position_dodge(.5))+
  xlab("Treatment") +
  theme(axis.title = element_text(size=24,face="bold", vjust=4)) +
  ylab("2014 total weed biomass (Kg/ha)\n") +
  theme(axis.title = element_text(size=24,face="bold", vjust=2), axis.text.y = element_text(size=20, color="black"))+
  theme(strip.text.x = element_text(colour = "black", size = 15), strip.background = element_rect(fill = "white"), axis.text.x = element_blank(), axis.ticks.x = element_blank())

And graph 和图 在此处输入图片说明

What I want is a graph with bar width of 0.5 and no spacing between bars in the same grid. 我想要的是条形宽度为0.5且同一网格中条形之间没有间距的图形。 Thank you for all the input. 感谢您的所有投入。

I think you want width = 0.5 while keeping the bars touching because you don't want the absolute width to change ( width = 0.5 changes the relative width ). 我认为您希望width = 0.5并使条形保持接触,因为您不希望绝对宽度发生变化( width = 0.5改变相对宽度 )。 This might be closer to what you are asking for. 这可能更接近您的要求。

ggplot(grp1, aes(x=Rot.Herb, y=value, fill=factor(Herb.trt)))+
  geom_bar(stat="identity", position = "dodge", width=1)+
  scale_x_discrete(expand=c(0.2,0))+
  scale_fill_brewer(palette = "Dark2")+
  theme_bw() +
  theme(panel.grid.major=element_blank()) +
  facet_grid(~Crop, scales = "free_x", space="free_x")+
  theme(legend.title=element_blank(),legend.text=element_text(size=20),legend.position="top")+
  geom_errorbar(aes(ymin=value-se, ymax=value+se), size=0.75, width=.25,position=position_dodge(0.5))+
  xlab("Treatment") +
  theme(axis.title = element_text(size=24,face="bold", vjust=4)) +
  ylab("2014 total weed biomass (Kg/ha)\n") +
  theme(axis.title = element_text(size=24,face="bold", vjust=2), axis.text.y = element_text(size=20, color="black"))+
  theme(strip.text.x = element_text(colour = "black", size = 15), strip.background = element_rect(fill = "white"), axis.text.x = element_blank(), axis.ticks.x = element_blank())

Basically I changed the width = 1 as suggested by @Gregor, which causes the bars to touch, but added an extra option scale_x_discrete(expand=c(0.2,0)) to add spaces between the bars and the sides of the plot. 基本上,我按照@Gregor的建议更改了width = 1 ,这导致条形图接触,但添加了一个额外的选项scale_x_discrete(expand=c(0.2,0))在条形图和图的侧面之间添加空格。 This in effect adjusts the absolute width of the bars while keeping them touching. 这实际上是在调整条的绝对宽度的同时保持其接触。 The first number gives the multiplicative constant used to expand the range, while the second gives the additive. 第一个数字给出用于扩展范围的乘法常数,而第二个数字给出加法器。

在此处输入图片说明

You can experiment with the two values in expand = to get what you want. 您可以在expand =尝试使用两个值来获得所需的值。

Also see this related question: ggplot geom_boxplot: reduce space between x-axis categories 另请参见此相关问题: ggplot geom_boxplot:减少x轴类别之间的空间

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

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