r中的“scale”或“ruler”类型图

前端之家收集整理的这篇文章主要介绍了r中的“scale”或“ruler”类型图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正试图在酒吧里打勾,创建一个条形图(水平或垂直)以给出像尺度的视图.

只是小例子:

myd <- data.frame (names = c("A","B","C","D"),height = c(2.1,3.5,1.5))
require(ggplot2)
c <- ggplot(myd,aes(factor(names),height,fill = names))
c + geom_bar()
c + geom_bar() + coord_flip()

有没有一个简单的方法或包可以实现这一点?

解决方法

使用ggplot2库的很长的解决方案.

首先修改你的数据框架 – 根据0.2的时间重复每个元素的名称和高度出现在栏的高度.

myd <- data.frame (names = c(rep("A",floor(2.1/0.2)),rep("B",floor(3.5/0.2)),rep("C",rep("D",floor(1.5/0.2))),height = c(rep(2.1,rep(3.5,rep(1.5,floor(1.5/0.2))))

ystart和yend是小蜱的y坐标,按照每个条的顺序计算0.2. xstart是小刻度的x坐标.在这里我假设酒吧将是0.5宽.如果宽度较小或更大,则应更改坐标.假设蜱是0.1宽,则计算xend.

ystart<-c(seq(0.2,2.1,0.2),seq(0.2,1.5,0.2))
yend=ystart
xstart<-c(rep(0.75,rep(1.75,rep(2.75,rep(3.75,floor(1.5/0.2)))
xend<-xstart+0.1

新值添加到数据帧.

myd <-data.frame(myd,ystart,yend,xstart,xend)

  p <- ggplot(myd,fill = names))
  p <- p + geom_bar(width=0.5)  

  #This line adds small ticks (segments) to bars
  p <- p + geom_segment(aes(x=xstart,y=ystart,xend=xend,yend=yend))

  #This line adds white lines at 1,2 and 3
  p <- p + geom_hline(yintercept=c(1,2,3),color="white",lwd=1.1)

  #Next two lines removes legend and makes place for text
  p <- p + guides(fill=FALSE)
  p <- p + ylim(c(0,4))

  #Add numbers over bars
  p <- p + annotate("text",x=c(1,3,4),y=c(2.4,3.8,1.8),label=c("2.1","3.5","1.5"),angle=90,fontface="bold",size=5)

  #Adjustment of appearance to remove guidlines and axis ticks
  p <- p + theme_bw()
  p <- p + theme(axis.title=element_blank(),axis.text.y=element_blank(),axis.text.x=element_text(angle=90,face="bold",size=rel(1.5)),axis.ticks=element_blank(),panel.border=element_blank(),panel.grid=element_blank())
  print(p)

编辑 – 添加解决方案作为功能.

make function ruler.func() – 仅需要的参数是条高度的向量.功能的第一部分产生数据帧,然后第二部分绘制图.

ruler.func<-function(gg){
seq.list<-list()
for(i in 1:length(gg)){  
  ystart<-seq(0.2,gg[i],0.2)
  yend<-ystart
  xstart<-rep(i-0.25,length(ystart))
  xend<-xstart+0.1
  nam.val<-c(LETTERS[i],rep(NA,length(ystart)-1))
  numb.val<-c(gg[i],length(ystart)-1))
  seq.list[[i]]<-data.frame(nam.val,numb.val,xend,yend)
}
df<-as.data.frame(do.call(rbind,seq.list))
p <- ggplot(df,aes(nam.val))
p <- p + geom_bar(aes(y=numb.val,fill=nam.val),stat="identity",width=0.5,color="black",lwd=1.1)+
    scale_x_discrete(limits=LETTERS[1:length(gg)])+
    geom_segment(aes(x=xstart,yend=yend))+
    geom_hline(yintercept=seq(1,max(gg),1),lwd=1.1)+
    guides(fill=FALSE)+
    ylim(c(0,max(gg)+0.5))+
    annotate("text",x=seq(1,length(gg),y=gg+0.5,label=gg,size=rel(6))+
    theme_bw()+
    theme(axis.title=element_blank(),panel.grid=element_blank())
print(p)
}

数字1.2,4.6和2.8的例子.

ruler.func(c(1.2,4.6,2.8))

猜你在找的CSS相关文章