2012-02-22 5 views
3

私はsavePlotを使用して複数の形式でグラフを保存しています。私はpdf形式に問題があります。私の凡例はpdfファイルで切り捨てられますが、Rグラフウィンドウでは切り捨てられません。savePlotを使用してpdfとして保存すると、切り詰められた凡例

win.graph(width=4.375,height=2.8) 
par(bty="l",las=1,lwd=1,cex=0.7,oma = c(1, 1, 0, 1), mar = c(3, 4, 3.5, 5)) 
plot(1:10,type="l") 
legend.names <-c("Dividend yield (L)","Core CPI (L)", 
    "Dividend yield - core CPI spread (R)") 
legend("bottomright", legend=legend.names, lwd=1, cex=0.7, col =1:3,lty=1:3) 

をしかし、私はPDFファイルとしてグラフを保存しようとすると、凡例は切り捨てられます:私は、Windows 7上だ。ここ伝説は、画面上の見栄えすることを示している小さな例です。最後の '(R)'は完全ではありません。

savePlot(filename = paste("c:/out.pdf",sep=""), type ="pdf") 

enter image description here

+0

手動でpdfのサイズを設定してみましたか? – Stedy

+0

私はいくつかのグラフィックファイルを生成する必要があるため、 'savePlot'を使用しています。チャートを描画し、 'savePlot'を使って複数のフォーマットで保存する方が簡単です。 pdfのサイズは 'win.graph()'と同じです –

+0

win.graphとpdfのデバイスにはおそらく異なるフォントがあります。デフォルトを変更することができます。 –

答えて

3

ソリューションはストレートpdf()デバイスに印刷して、窓1を通過しないことです。

pdf(width=4.375, height=2.8, file = "out.pdf") 

par(bty="l",las=1,lwd=1,cex=0.7,oma = c(1, 1, 0, 1), mar = c(3, 4, 3.5, 5)) 
plot(1:10,type="l") 
legend.names <-c("Dividend yield (L)","Core CPI (L)", 
    "Dividend yield - core CPI spread (R)") 
legend("bottomright", legend=legend.names, lwd=1, cex=0.7, col =1:3,lty=1:3) 

dev.off() 
+0

前述のように、私はいくつかのフォーマットでグラフを保存しなければならないので、 'savePlot'を使用しています。ソリューションでは、プロット呼び出しを複数回繰り返す必要があります。 'savePlot'でそれを行う方法がなければなりません。つまり賞金です。 –

+0

よく、プロットコードの本体を関数 'tmpplot < - function(){...}'で囲むことができます。これは、 'savePlot'を使うよりもそれほど難しくありません。しかし、よりよい解決策があればいいと思う。 –

1

あなたが小さい「ヘルベチカ狭」のフォントに切り替えることができ、 PDFに印刷するときにsavePlot()の動作を無効にするこの関数を使用してください。

my.savePlot <- function(filename, type) { 
    if (type == "pdf") { 
     dev.copy(pdf, filename, width = par("din")[1], 
           height = par("din")[2], 
           family = "Helvetica-Narrow") 
     invisible(dev.off()) 
    } else { 
     savePlot(filename, type) 
    } 
} 
+0

これは、チャートのすべてのテキストを「Helvetica-Narrow」に変換します。それが伝説だけだったら私は気にしません。 –

0

あなたはこのことについて何を言わなければならないか見てみましょう、おそらく3回目の魅力です!ここではrecordPlot()replayPlot()を使用しているので、プロットをpdf()にコピーすることができます。 legend()コールはrecordGraphics()にラップする必要があるため、グラフィックの表示リストに記録されるようにしてください。

my.savePlot <- function(filename, type) { 
    if (type == "pdf") { 
     saved.plot <- recordPlot() 
     pdf(filename, width = par("din")[1], 
        height = par("din")[2]) 
     replayPlot(saved.plot) 
     invisible(dev.off()) 
    } else { 
     savePlot(filename, type) 
    } 
} 

win.graph(width=4.375,height=2.8) 
par(bty="l",las=1,lwd=1,cex=0.7,oma = c(1, 1, 0, 1), mar = c(3, 4, 3.5, 5)) 
plot(1:10,type="l") 
legend.names <-c("Dividend yield (L)","Core CPI (L)", 
       "Dividend yield - core CPI spread (R)") 
recordGraphics(legend("bottomright", legend=legend.names, 
         lwd=1, cex=0.7, col =1:3,lty=1:3), 
       list(), getNamespace("graphics")) 

my.savePlot(filename = paste("out.pdf",sep=""), type ="pdf") 
0

どうやってこのように試してみませんか?それはもはや問題にはならず、あなたはそれ以上のコントロールを持っています。

pdf("out.pdf", width=4.375,height=2.8) 
par(bty="l",las=1,lwd=1,cex=0.7,oma = c(1, 1, 0, 1), mar = c(3, 4, 3.5, 5)) 
plot(1:10,type="l") 
legend.names <-c("Dividend yield (L)","Core CPI (L)", 
      "Dividend yield - core CPI spread (R)") 
legend("bottomright", legend=legend.names, lwd=1, cex=0.7, col =1:3,lty=1:3) 
dev.off() 

フム...、flodelは同じ答えを持って、私はあなたがその周りにラッパーのどちらかを書いたり、うまく動作し、独自のsavePlot関数を記述する必要があることに同意するものとします。

0

お試しinset=0.05これは過去の同様の問題で私を助けてくれましたが、テストするWin7マシンはありませんでした。

関連する問題