我在使用R中的ggplot2中的离散比例时遇到问题
g + scale_x_discrete(breaks=1:7,labels=1:7)
错误地更改了图表的限制.
之前:
g <- ggplot(data=plottingData,aes(x=x,y=y,ymin=ymin,ymax=ymax)) + geom_bar(stat="identity",fill=col) + geom_errorbar(width=0.5*binwidth,size=0.3)
这是生成的ggplot2对象的dput():
structure(list(data = structure(list(x = c(1,2,3,4,5,6,7),y = c(0.689655172413793,0.689655172413793,11.0344827586207,2.75862068965517,70.3448275862069,13.7931034482759,0.689655172413793 ),ymin = c(0,6.84765916431683,0.870298113507349,62.426550974053,9.06894448064895,0),ymax = c(4.26873021234759,4.26873021234759,17.3134146611865,7.18339316166044,77.1707644621886,20.4612568616329,4.26873021234759)),.Names = c("x","y","ymin","ymax"),row.names = c(NA,-7L),class = "data.frame"),layers = list(<environment>,<environment>),scales = <S4 object of class structure("Scales",package = "ggplot2")>,mapping = structure(list(x = x,y = y,ymin = ymin,ymax = ymax),class = "uneval"),theme = structure(list( line = structure(list(colour = "black",size = 0.5,linetype = 1,lineend = "butt"),.Names = c("colour","size","linetype","lineend"),class = c("element_line","element")),rect = structure(list( fill = "white",colour = "black",linetype = 1),.Names = c("fill","colour","linetype"),class = c("element_rect",text = structure(list(family = "",face = "plain",size = 12,hjust = 0.5,vjust = 0.5,angle = 0,lineheight = 0.9),.Names = c("family","face","hjust","vjust","angle","lineheight"),class = c("element_text",axis.text = structure(list(family = NULL,face = NULL,colour = NULL,size = structure(0.8,class = "rel"),hjust = NULL,vjust = NULL,angle = NULL,lineheight = NULL),strip.text = structure(list(family = NULL,axis.line = structure(list(),class = c("element_blank",axis.text.x = structure(list(family = NULL,size = NULL,vjust = 1,axis.text.y = structure(list(family = NULL,hjust = 1,axis.ticks = structure(list(colour = "black",linetype = NULL,lineend = NULL),axis.title.x = structure(list(family = NULL,axis.title.y = structure(list(family = NULL,angle = 90,axis.ticks.length = structure(0.15,unit = "cm",valid.unit = 1L,class = "unit"),axis.ticks.margin = structure(0.1,legend.background = structure(list(fill = NULL,colour = NA,linetype = NULL),legend.margin = structure(0.2,legend.key = structure(list(fill = NULL,colour = "grey80",legend.key.size = structure(1.2,unit = "lines",valid.unit = 3L,legend.key.height = NULL,legend.key.width = NULL,legend.text = structure(list( family = NULL,legend.text.align = NULL,legend.title = structure(list( family = NULL,face = "bold",hjust = 0,legend.title.align = NULL,legend.position = "right",legend.direction = NULL,legend.justification = "center",legend.Box = NULL,panel.background = structure(list( fill = "white",panel.border = structure(list(fill = NA,colour = "grey50",panel.grid.major = structure(list(colour = "grey90",size = 0.2,panel.grid.minor = structure(list(colour = "grey98",panel.margin = structure(0.25,panel.margin.x = NULL,panel.margin.y = NULL,strip.background = structure(list( fill = "grey80",strip.text.x = structure(list(family = NULL,strip.text.y = structure(list(family = NULL,angle = -90,plot.background = structure(list(fill = NULL,colour = "white",plot.title = structure(list(family = NULL,size = structure(1.2,plot.margin = structure(c(1,1,0.5,0.5),class = "unit")),.Names = c("line","rect","text","axis.text","strip.text","axis.line","axis.text.x","axis.text.y","axis.ticks","axis.title.x","axis.title.y","axis.ticks.length","axis.ticks.margin","legend.background","legend.margin","legend.key","legend.key.size","legend.key.height","legend.key.width","legend.text","legend.text.align","legend.title","legend.title.align","legend.position","legend.direction","legend.justification","legend.Box","panel.background","panel.border","panel.grid.major","panel.grid.minor","panel.margin","panel.margin.x","panel.margin.y","strip.background","strip.text.x","strip.text.y","plot.background","plot.title","plot.margin" ),class = c("theme","gg"),complete = TRUE),coordinates = structure(list( limits = structure(list(x = NULL,y = NULL),"y"))),.Names = "limits",class = c("cartesian","coord" )),facet = structure(list(shrink = TRUE),.Names = "shrink",class = c("null","facet")),plot_env = <environment>,labels = structure(list( x = "x",y = "y",ymin = "ymin",ymax = "ymax"),"ymax"))),.Names = c("data","layers","scales","mapping","theme","coordinates","facet","plot_env","labels" ),class = c("gg","ggplot"))
值得注意的是,expand参数仅稍微调整绘图并且expand = c(0,0)不能解决问题.指定限制确实可以解决问题,但出于某种原因也会删除轴标签.
任何帮助,将不胜感激.
解决方法
当你添加g scale_x_discrete()时,这可能已经发生了.将离散比例用于连续数据时会发生这种情况.没有休息,你可以看到错误的限制,只是改变它们.
g + scale_x_discrete() g + scale_x_discrete(limits=1:7) g + scale_x_discrete(limits=1:7,labels = letters[1:7])
或者,您可以使用因子从一开始就获得适当的限制.当然你必须重命名轴.
ggplot(data=plottingData,aes(x=factor(x),ymax=ymax)) + geom_bar(stat="identity",fill=col) + geom_errorbar(width=0.5*binwidth,size=0.3) + scale_x_discrete(name = 'x')