16

私はこの関数をsparklinesRですばやく簡単に使用していますが、y軸の目盛りラベルの醜い重なりを避けるためにフォントサイズを変更する方法がわかりません。これが私のコードです(再現可能な例については以下を参照してください):

sparklines(gamma.df, sub=c(1:23),outer.margin = unit(c(2, 2, 2, 2), "cm"))

そして結果のプロット:

ここに画像の説明を入力

でy軸を完全に抑えることができそうです

sparklines(gamma.df, sub=c(1:23),yaxis=FALSE,outer.margin = unit(c(2, 2, 2, 2), "cm"))

しかし、私が本当に欲しいのは、目盛りの数字を縮小することです(そして、線の下に灰色の塗りつぶしを追加しますが、画面上にポリゴンを描画する必要があるように見えますが、これはおそらく別の質問に値するのに十分な問題です...と別のパッケージ)。

ドキュメントは、 gparが関連している可能性があることを示唆しています:「グラフィックス パラメーターのリストが必要なすべての場合において、有効なパラメーター名は、適切な呼び出しで gpar に渡された場合に有効な名前と同じです。」しかし、私の試みのどれもどこにも到達していないように見えるので、それを理解するには少し助けが必要です (cex.axis と axis() についても同様です)。R のgridグラフィックスに関する専門家はいますか? より良い品質のスパークライン スタイルの出力を提供する、十分に文書化された完全に異なるアプローチ (ggplot2?) へのリンクも歓迎します。

私の問題を再現するデータとコードの例を次に示します。

x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000), Y = rnorm(1000), Z = rnorm(10))
sparklines(x,outer.margin = unit(c(2, 2, 2, 2), "cm")) 

そして、これは、y 軸の目盛りに醜い重なり合った数値を含む結果のデータ プロットの例です。

ここに画像の説明を入力

更新: @geek-on-acid の非常に役立つplotコードと Tufte フォーラムのコード (以下を参照) を使用して、YaleToolkitパッケージを使用せず、問題ないように見える別のスパークライン メソッドを思いつきました。再現可能な例(実際には2行だけですが、私の教育のためにここに注釈が付けられています):

     x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000), Y = rnorm(1000), 
     Z = rnorm(1000)) # get a bit of data

    par(mfrow=c(ncol(x),1), #sets number of rows in space to number of cols in data frame x
    mar=c(1,0,0,0), #sets margin size for the figures
    oma=c(4,5,4,4)) #sets outer margin

    for (i in 1:ncol(x)){ # setup for statement to loops over all elements in a list or vector
        plot(x[,i], #use col data, not rows from data frame x
        col="grey",lwd=0.5, #make the line grey and thin
        axes=F,ylab="",xlab="",main="",type="l"); #suppress axes lines, set as line plot
        axis(2,yaxp=c(min(x[,i]),max(x[,i]),2), # y-axis: only show tickmarks for max and min values of col
        cex.axis=1.1,las=1, # shrink fontsize slightly, make text horizontal for easy reading
        at=c(round(min(x[,i]),3),round(max(x[,i]),3))); #specify where tickmark numbers go and round them to keep it tidy
        axis(2,yaxp=c(min(x[,i]),max(x[,i]),2),col="white",tcl=0,labels=FALSE)  #y-axis: put a 2nd white axis line over the 1st y-axis to make it invisible
        ymin<-min(x[,i]); tmin<-which.min(x[,i]);ymax<-max(x[,i]);tmax<-which.max(x[,i]); # see the code from Jason below for what these do 
        points(x=c(tmin,tmax),y=c(ymin,ymax),pch=19,col=c("red","blue"),cex=1) # add coloured points at max and min
        }
        axis(1,pos=c(-5)) # places horizontal axis at the bottom of it all. 

これが結果の画像です。これは基本的に私の問題の解決策です。y 軸の目盛りは、データの最大値と最小値のみを表示し、垂直線を表示しないことで、見栄えを良くしようとしています。@geek-on-acid に、それらすべての下部に沿って単一の x 軸を取得する方法に関するヒントをありがとう。

ここに画像の説明を入力

最後に、完全を期すために、 Tufte フォーラムで見つけた Jason Dieterle によるTufte のスタイルに近いスパークラインのコードをいくつか含めます。それらは私のものよりもはるかに見栄えがしますが、コードは一度に 1 つのプロットしか実行しません。元の投稿は次のとおりです。

#Here is a simple R implementation of sparklines. Running sparkline() will generate a random sparkline; running sparkline(yourdata) will generate a sparkline using the data in yourdata. As an example, here is Google's stock price for the last year.

#R sparklines
sparkline<-function(ydata=rnorm(100,500,50),width=1.5,height=0.5,sigfigs=4) {

# ydata = vector of data to be plotted
# width = width of sparlkline in inches, including text
# height = height of sparkline in inches
# sigfigs = number of significant figures to round min, max, and last values to

    temppar<-par(no.readonly = TRUE) # store default graphics parameters
    par(mai=c(0.10,0.05,0.10,0.05),fin=c(width,height)) # adjust graphics parameters for sparklines
    len<-length(ydata) # determine the length of the data set
    ymin<-min(ydata) # determine the minimum
    tmin<-which.min(ydata) # and its index
    ymax<-max(ydata) # determine the maximum
    tmax<-which.max(ydata) # and its index
    yfin<-signif(ydata[len],sigfigs) #determine most recent data point
    plotrange=c(ymin-0.3*(ymax-ymin),ymax+0.3*(ymax-ymin)) # define plot range to leave enough room for min and max circles and text
    plot(x=1:len,y=ydata,type="l",xlim=c(1,len*1.5),ylim=plotrange,col="gray",lwd=0.5,ann=FALSE,axes=FALSE) # plot sparkline
    points(x=c(tmin,tmax),y=c(ymin,ymax),pch=19,col=c("red","blue"),cex=0.5) # plot min and max points
    text(x=len,y=ymin,labels=signif(ymin,sigfigs),cex=0.5,pos=4,col="red") # show minimum value
    text(x=len,y=ymax,labels=signif(ymax,sigfigs),cex=0.5,pos=4,col="blue") # show maximum value
    text(x=len,y=(ymin+ymax)/2,labels=yfin,cex=0.5,pos=4) # show most recent value
    par(temppar) # restore graphics defaults
}
#-- Jason Dieterle (email), January 28, 2008

そして、彼の出力は次のようになります (少し拡大):

ここに画像の説明を入力

YaleToolkit パッケージに加えて、stats.stackexchangeで知ったが試していないsparkTableパッケージがあります。R-forge には、スパークラインを作成するための別のパッケージのエントリがありますが、これはアクティブでも有用でもないようです。

4

1 に答える 1

7

ええと、パッケージにsparklines大きく依存しているgridので、それらのフォントサイズパラメータを検索するには深く掘り下げる必要があります。遊んでviewpointみると、おそらくそこにたどり着くでしょう。簡単な(しかし非常に「生の」)ソリューションの場合は、を使用して単純なプロットオプションを使用するだけparです。これにより、ほぼすべてのパラメーターを非常に簡単に操作できます。

 x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000),
      Y = rnorm(1000), Z = rnorm(10))
 par(mfrow=c(5,1),mar=c(1,0,0,0),oma=c(4,5,4,4))
 plot(x$V,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7)
 plot(x$W,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7)
 plot(x$X,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7)
 plot(x$Y,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7)
 plot(x$Z,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7)
 axis(1,pos=c(-2))

ここに画像の説明を入力してください

于 2011-12-01T17:19:25.420 に答える