首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ggplot2 geom_bar中的条宽

ggplot2 geom_bar中的条宽
EN

Stack Overflow用户
提问于 2010-02-24 13:41:06
回答 2查看 7.4K关注 0票数 1

我试着用圈来制作情节。

代码语言:javascript
运行
复制
l1<-factor(rep(letters,4))
n1<-abs(rnorm(104))*10000
b1<-rep(c("1","2","3","4","5","6","7","8"),c(2,2,11,24,11,20,33,1))
k1<-rep((rep(c("A","B","C","D"),c(2,3,4,4))),8)
my.df<-data.frame(l1,b1,k1,n1)                            #make a dataframe

names(my.df)<-c("letter","branch","ltrtype","number")     #factor names
library(ggplot2)

branch.list<-unique(my.df$branch)
sayi<-length(branch.list)                                 # list of factor:letters

for (i in 1:sayi) {

branch.iter<-branch.list[i]
my.df.plot<-subset(my.df,my.df$branch==branch.iter,drop=T)

my.df.plot$branch<-factor(my.df.plot$branch)               #So that unused levels don't show up
my.df.plot$letter<-factor(my.df.plot$letter)               #So that unused levels don't show up
my.df.plot$ltrtype<-factor(my.df.plot$ltrtype)             #So that unused levels don't show up
my.df.plot$number<-as.numeric(as.character(my.df.plot$number))
my.df.plot<-data.frame(my.df.plot)

myfilename<-paste(branch.iter,".jpeg",sep="")
jpeg(file=myfilename)

cizim<-ggplot(my.df.plot,aes(letter,number,fill=ltrtype))
cizim<-cizim + geom_bar(width = 1, position = "fill", binwidth = 1) +     facet_grid(ltrtype~.)
cizim<-cizim + opts(title=branch.iter)

print(cizim)
dev.off()

}

(Q1):当x轴中的水平数改变条形线的宽度时,如何才能防止这种变化,并使每个情节中的条形线宽度相同?

alt文本http://img411.imageshack.us/i/95325388.jpg/

alt文本http://img411.imageshack.us/i/91510133.jpg/

(Q2):当i=7 R发出以下警告时:

(数据$ ymin == 0)警告(“当ymin != 0时未定义好”):在真/假需要时缺少值

我能做些什么?

(Q3):在这种情况下,有没有更容易降低未使用水平的方法,这样我就不必使用

代码语言:javascript
运行
复制
 my.df.plot$branch<-factor(my.df.plot$branch)

每次?

EN

回答 2

Stack Overflow用户

发布于 2010-02-24 20:27:47

你正在制作一些非常奇怪的情节。通过使用position="fill",您可以将每个条形线延伸到高度1(因为与字母对应的一个观察结果是与面板内的字母对应的所有观察值的100% ),完全丢失了您试图绘制的任何信息。我的猜测是,你的一些问题来自这个错误,但我不确定。

(Q1)对于不同的分支,你希望条形图的宽度相同吗?由于您正在更改x变量的级别数,因此必须使条形图变宽才能填充图。一些解决方案:

  • 对图的宽度进行一些巧妙的调整,以绕过这一范围。
  • 把所有的x级放在-我认为这是最干净的方法
  • 通过使用expand选项scale_x_discrete,您可以使您的条形图更窄,并在图上居中。因此,如果您有N个x-值(这里是N=26字母),但特定的绘图只使用它们中的k,那么将+ scale_x_discrete(expand=c(0.05, (N-k)/2))添加到您的绘图中。第一项是乘法展开因子,这是默认值,第二项是加性因子。

(Q2) i=7是唯一具有与同一字母/ltrgroup组合对应的多个number值的组。酒吧老板不知道该怎么处理。我同意错误信息是非常神秘的。

(Q3)一种选择是避免使用因素--在组合字符向量时使用data.frame(...,stringsAsFactors=FALSE),然后进行减法将不会保持未使用的水平。

票数 2
EN

Stack Overflow用户

发布于 2010-02-24 21:08:27

(Q1)我认为不可能固定条形宽度。Aniko关于保持所有水平的建议对我来说是最有意义的。

(Q2)用stat="identity"代替binwidth = 1,因为我认为您不需要stat="bin"

(Q3)其他选项包括drop.levels in gdata-package和dropUnusedLevels in Hmisc-package。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2326351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档