R中的plot.qual函数:文本太大

R中的plot.qual函数:文本太大,r,R,我正试图在R中制作一个“坡度图”可视化,类似于本文中的可视化: 我正在取消大师赛第1轮、第2轮和第3轮的高尔夫成绩,并将93名高尔夫球手的名字按照博客帖子中的格式排列注意:高尔夫球手被逐轮淘汰,因此我生成了一些假分数,只是为了保持数据集没有差距(稍后将返回此问题)。 我正在使用plot.qual函数,其代码可以在git上找到: 注意:由于某些原因,我无法使用paste0函数,因此我将代码更改为paste(…,sep=“”,…)。不确定这是否导致问题。 我已将数据存储在Masters.2013

我正试图在R中制作一个“坡度图”可视化,类似于本文中的可视化:

我正在取消大师赛第1轮、第2轮和第3轮的高尔夫成绩,并将93名高尔夫球手的名字按照博客帖子中的格式排列注意:高尔夫球手被逐轮淘汰,因此我生成了一些假分数,只是为了保持数据集没有差距(稍后将返回此问题)。

我正在使用plot.qual函数,其代码可以在git上找到:

注意:由于某些原因,我无法使用paste0函数,因此我将代码更改为paste(…,sep=“”,…)。不确定这是否导致问题。

我已将数据存储在Masters.2013中。数据的格式与博客文章的格式相同,尽管专栏(93个)比博客文章使用的专栏(25个)多

当我运行plot.qual(Masters.2013)时,我收到以下错误消息:

>plot.qual(Masters.2013) 警告信息: 在plot.qual(Masters.2013)中: 列之间的行空间不足

我将列数减少到25、5、2等(plot.qual(Masters.2013[,1:5]),但每次都会出现错误消息

情节看起来很拥挤,没有线条(可能会发布图片,但没有足够的声誉)

我不认为问题出在数据上,因为格式与博客文章相同,而且似乎几乎可以正常工作

下面是plot.qual代码 编辑:添加一些示例数据(如下),感谢发表评论的人。此外,当添加par(cex=.5)时,它会产生更好的结果,但是我想知道文本是否可以自动调整大小,以便连接线始终与文本边缘相交。
Data=structure(列表)玩家=structure(1:3,.Label=c(“第一轮”),
“第二轮”、“第三轮”,class=“factor”),马克·利什曼=c(66L,
弗雷德夫妇=c(68L,71L,73L),吉姆·福瑞克=c(69L,
老虎伍兹=c(70L,70L,71L),天使卡布雷拉=c(71L,
约翰·森登=c(72L,72L,67L),亚当·斯科特=c(69L,
72L,78L),Jason.Dufner=c(72L,69L,64L),David.Lynn=c(68L,
李.韦斯特伍德=c(70L,70L,80L),贾斯汀.罗斯=c(70L,
70升,70升),K.J..Choi=c(70升,70升,74升),Rickie.Fowler=c(68升,
Jason.Day=c(70L,70L,73L)),.Names=c(“玩家”,
“马克.利什曼”,“弗雷德.夫妇”,“吉姆.福瑞克”,“老虎.伍兹”,
“安吉尔·卡布雷拉”、“约翰·森登”、“亚当·斯科特”、“杰森·达夫纳”,
“大卫·林恩”、“李·韦斯特伍德”、“贾斯汀·罗斯”、“K.J.崔”、“里奇·福勒”,
“Jason.Day”),row.names=c(NA,3L),class=“data.frame”)

plot.qualYou应该提供您的数据表,以便我们检查最终布局的错误。哇,139行代码,没有可复制的示例-你一定是在开玩笑。但是关于paste0()问题,我记得paste0()是最近引入的-可能是R v.2.15左右。不过,这可能不是您的绘图问题,paste(…,sep=“”)应该得到完全相同的结果。您不能使用paste0是什么意思?错误消息是什么?使用
dput(您的数据)
分享您的数据并获得一些真正的帮助。请提供一个可复制的小示例!感谢您的评论。添加了示例数据并稍微清理了代码块,以便可以直接复制并粘贴到R中。您打算如何处理多个具有相同分数的玩家?
Data=structure(list(PLAYER = structure(1:3, .Label = c("Round 1", 
"Round 2", "Round 3"), class = "factor"), Marc.Leishman = c(66L, 
66L, 69L), Fred.Couples = c(68L, 71L, 73L), Jim.Furyk = c(69L, 
69L, 70L), Tiger.Woods = c(70L, 70L, 71L), Angel.Cabrera = c(71L, 
69L, 68L), John.Senden = c(72L, 72L, 67L), Adam.Scott = c(69L, 
72L, 78L), Jason.Dufner = c(72L, 69L, 64L), David.Lynn = c(68L, 
73L, 71L), Lee.Westwood = c(70L, 70L, 80L), Justin.Rose = c(70L, 
70L, 70L), K.J..Choi = c(70L, 70L, 74L), Rickie.Fowler = c(68L, 
68L, 76L), Jason.Day = c(70L, 70L, 73L)), .Names = c("PLAYER", 
"Marc.Leishman", "Fred.Couples", "Jim.Furyk", "Tiger.Woods", 
"Angel.Cabrera", "John.Senden", "Adam.Scott", "Jason.Dufner", 
"David.Lynn", "Lee.Westwood", "Justin.Rose", "K.J..Choi", "Rickie.Fowler", 
"Jason.Day"), row.names = c(NA, 3L), class = "data.frame")


   plot.qual<-function(x,x.locs=c(0.01,0.99),y.locs=c(0,1),steps=NULL,sp.names=NULL,dt.tx=T,rsc=T,
                ln.st=NULL,rs.ln=c(3,15),ln.cl='RdYlGn',alpha=0.7,leg=T,...){

require(RColorBrewer)
require(scales)

if(length(x.locs) != 2 | length(y.locs) != 2) 
stop('x and y dimensions must be two-element vectors')

if(x.locs[1]<0 | x.locs[2]>1 | y.locs[1]<0 | y.locs[2]>1) 
stop('x and y dimensions must in range of 0--1')

dim.x<-c(0,1) #plot dims x
dim.y<-c(0,1) #plot dims y
wrn.val<-F

x[,1]<-as.character(x[,1]) 
tot.sp<-ncol(x)-1
sp.col<-2:ncol(x)

#rescale if T, sort legend for later
sp.orig<-x[,sp.col]
if(length(rs.ln)==1) rsc<-F
if(rsc) x[,sp.col]<-rescale(x[,sp.col],rs.ln)
if(rsc==F & leg) leg<-F #no legend if line widths aren't rescaled

#reorder species columns, add rank as integer
first.ord<-order(x[1,sp.col],decreasing=T)
x[,sp.col]<-x[,sp.col][,first.ord]
names(x)[sp.col]<-names(x)[sp.col][first.ord]

names(x)[sp.col]<-paste(1:tot.sp,sep=" ",names(x)[sp.col])

#list of spp by date, arranged in decreasing order for each date
dt.dat.srt<-vector('list',nrow(x))
names(dt.dat.srt)<-x[,1]
for(val in 1:nrow(x)){
tmp<-t(x[val,sp.col])
tmp<-tmp[order(tmp,decreasing=T),,drop=F]
dt.dat.srt[[val]]<-tmp
}

#initiate plot object
plot(dim.x,dim.y,type='n',axes=F,xlab='',ylab='',...) 

#subset for steps, if provided
if(!is.null(steps)) dt.dat.srt<-dt.dat.srt[names(dt.dat.srt) %in% steps]

#plot legend
if(leg){
y.locs[1]<-0.05*diff(y.locs)+y.locs[1]
leg.txt<-format(round(seq(min(sp.orig),max(sp.orig),length=5),2),nsmall=2,digits=2)
leg.wds<-seq(rs.ln[1],rs.ln[2],length=5)
legend('bottom',(y.locs[1]-    y.olds)/2,col=alpha('black',alpha),lwd=leg.wds,legend=leg.txt,bty='n',
       horiz=T)
}  

#x locations
x.vals<-rep(seq(x.locs[1],x.locs[2],length=length(dt.dat.srt)),each=tot.sp)
x.vals<-split(x.vals,x.vals)

#y locations, rearranged in loop, exception if dates are plotted
if(dt.tx) y.vals<-rev(seq(y.locs[1],y.locs[2],length=tot.sp+1))[-1]
else y.vals<-rev(seq(y.locs[1],y.locs[2],length=tot.sp))

#get line colors
if(length(ln.cl)==1)
if(ln.cl %in% row.names(brewer.pal.info)){
  pal.num<-brewer.pal.info[row.names(brewer.pal.info) == ln.cl,1]
  ln.cl<-brewer.pal(pal.num,ln.cl)
}
line.cols<-alpha(colorRampPalette(ln.cl)(tot.sp),alpha)

#define distance of lines from labels
if(is.null(ln.st)){
str.max<-max(strwidth(row.names(dt.dat.srt[[1]])))
if(diff(x.locs)-length(dt.dat.srt)*str.max < 0){
  warning('not enough space for lines between columns')
  wrn.val<-T
}
else
  ln.st<-0.2*str.max + str.max/2
}

for(val in 1:(length(dt.dat.srt)-1)){

#temp data to plot
plt.tmp<-dt.dat.srt[c(val,val+1)]
x.tmp<-x.vals[c(val,val+1)]

#plot temp text for column 
text(x.tmp[[1]],y.vals,row.names(plt.tmp[[1]]))

if(val == length(dt.dat.srt)-1){
  text(x.tmp[[2]],y.vals,row.names(plt.tmp[[2]]))
  if(dt.tx){
    dt.txt<-substitute(italic(x),list(x=names(plt.tmp)[2]))
    text(unique(x.tmp[[2]]),y.locs[2],dt.txt)
  }
}   

if(dt.tx){
  dt.txt<-substitute(italic(x),list(x=names(plt.tmp)[1]))
  text(unique(x.tmp[[1]]),y.locs[2],dt.txt)
}

srt.ln.y<-match(row.names(plt.tmp[[1]]),row.names(plt.tmp[[2]]))

#if no line rescale, use first element of rs.ln
if(rsc) lwd.val<-plt.tmp[[1]][,1]
else lwd.val<-rep(rs.ln[1],tot.sp)

#vector for species selection of line segments
if(is.null(sp.names)) sel.sp<-rep(T,tot.sp)
else{
  sel.names<-unlist(lapply(strsplit(row.names(plt.tmp[[1]]),' '),function(x) x[2]))
  sel.sp<-(sel.names %in% sp.names)
}

#for lines
if(!wrn.val)
  segments(
    x.tmp[[1]][sel.sp]+ln.st,
    y.vals[sel.sp],
    x.tmp[[2]][sel.sp]-ln.st,
    y.vals[srt.ln.y][sel.sp],
    col=line.cols[sel.sp],
    lwd=lwd.val[sel.sp]
  )

#resort color vector for next colummn
srt.cl.y<-match(row.names(plt.tmp[[2]]),row.names(plt.tmp[[1]]))
line.cols<-line.cols[srt.cl.y]

}

}

par(mar=c(1,1,1,1),family='serif',cex=.5)
plot.qual(Data)