64

関連しますが、一般的に割り当てられたプロット スペースについてのみ説明します。プロット イメージのサイズを直接設定し、それをスケーリングして目的のスペースを埋める方法は説明しません。


光沢のある Web アプリを作成していて、プロットのサイズとスケールを設定したいと考えています。つまり、プロットに有限の高さ/幅を設定し、その設定サイズの画像をその領域にスケーリングする方法を探しているということですmainPanel( plotOutput ())

これを 以外の例/類似の状況として取り上げshinyます。

x <- 1:10
y <- x^2
png("~/Desktop/small.png", width = 600, height = 400)
plot(x, y)
dev.off()

png("~/Desktop/big.png", width = 1200, height = 800)
plot(x, y)
dev.off()

SO に画像をアップロードしてサイズを設定することはできないため、次の html を使用して、それぞれのブラウザーのスクリーンショットを含めます。

<img src="file:///home/jwhendy/Desktop/file.png" width = "800px" />

これは、私の 1600 x 900 ピクセルのラップトップでの全幅のスクリーンショットです。

小さな 小さい絵

大きい 全体像

や などggplot2のオプションを使用すると凡例がかなり小さいことがわかったので、画像自体のサイズを制御したいと思います。全体像の軸ラベルを読み取るのも難しいことに注意してください。ピクセルが限られているために画像のサイズがうまくスケーリングされない状況に陥る可能性があることは認識していますが、少なくともそれに遭遇する前に移動する余地があると思います.colour = varsize = var

助言がありますか?これまでのところ、次のことを試してみましたが、運が悪かった:

ui.R

shinyUI(pageWithSidebar(

headerPanel("Title"),

  sidebarPanel(),

  mainPanel(

     plotOutput(outputId = "main_plot", width = "100%"))

  ))

サーバー.R

shinyServer(function(input, output) {

  x <- 1:10
  y <- x^2

  output$main_plot <- renderPlot({

    plot(x, y) }, height = 400, width = 600 )
} )

で指定された高さ/幅のオプションは、 のセクションでserver.R設定したものをオーバーライドするようです。plotOutputui.R

mainPanel目的の領域を塗りつぶしながら読みやすさを維持するために、プロット イメージのサイズを小さく保つ方法はありますか?

4

2 に答える 2

43

これがあなたが望むものを完全に与えるかどうかはわかりませんが、これが私のために働いたものです.

で指定されたオプションServer.Rが有効になりました。(それぞれ異なるサイズの 2 つのグラフをプロットしました。) また、@Manetheran の提案を取り入れ、cex と cex.axis をパラメーターにしました。彼らは働いているようです。

以下は、完全なアプリのコードと 1 つのスクリーン ショットです。

###UI.R
shinyUI(pageWithSidebar(


  headerPanel("Title"),
  
  sidebarPanel(
    sliderInput(inputId = "opt.cex",
            label = "Point Size (cex)",                            
                min = 0, max = 2, step = 0.25, value = 1),
  sliderInput(inputId = "opt.cexaxis",
              label = "Axis Text Size (cex.axis)",                            
              min = 0, max = 2, step = 0.25, value = 1) 
),
        
  mainPanel(
    plotOutput(outputId = "main_plot",  width = "100%"),
    plotOutput(outputId = "main_plot2", width = "100%")
  )
))
        

###Server.R
shinyServer(function(input, output) {


  x <- 1:10
  y <- x^2
    
  output$main_plot <- renderPlot({    
    plot(x, y)}, height = 200, width = 300)


  output$main_plot2 <- renderPlot({
    plot(x, y, cex=input$opt.cex, cex.lab=input$opt.cexaxis) }, height = 400, width = 600 )
} )

ここに画像の説明を入力

再更新します。Width=100% オプションUI.R

はい、私の場合、それは間違いなく違いを生みます。以下の 2 行では、new_main_plot と new_main_plot2 は同一ですが、異なるサイズでレンダリングされています。したがって、widthオプションは有効になります。

 mainPanel(
    plotOutput(outputId = "new_main_plot",  width = "100%"),
    plotOutput(outputId = "new_main_plot2", width = "25%")
  )

それが役立つことを願っています。

于 2013-07-24T17:59:38.633 に答える
19

@Ramの答えは、baseプロットユーティリティに最適です。

ggplot でこれを行うには、他の通行人のために展開するだけです。

p <- ggplot(data, aes(x = x, y = y)) + geom_point()
p <- p + theme(axis.text = element_text(size = 20)) # tweak size = n until content
print(p)

あなたが望むものに応じて、少なくともその効果に何か。テキスト オプションの設定については、現在のggplot2 0.9.3ドキュメントを参照してください。軸テキスト、凡例テキスト、facet_grid ストリップ テキストなどを指定できます。

前回のSO質問以降、仕様が からopts([option] = theme_text(size = n))に変更になりましたtheme([option] = element_text(size = n))。おそらくまた変更されるでしょう... ggplot2.


@Ramのフォローアップに基づいてもう少し遊んでみましたが、さまざまなオプションを設定してChromiumで見る方法ui.Rと相互作用を理解していると思います。server.RInspect element

ui.R は、塗りつぶすことができる利用可能なプロット領域を設定し、server.R はプロット サイズを定義します。

  • ui.R:width = 100%, server.R: オプションが設定されていません

ここに画像の説明を入力

  • ui.R:幅 = 100% server.R、: 幅 = 800、高さ = 600

ここに画像の説明を入力

  • ui.R:幅 = 50% server.R、: 幅 = 800、高さ = 600

ここに画像の説明を入力

  • ui.R:幅 = 200% server.R、: 幅 = 800、高さ = 600

ここに画像の説明を入力

質問に明確に答えるためには、最後の 1 つだけを確認する必要がありました。設定を複製すると、プロット領域<div>が実際に画面幅の 200% になり、ブラウザーに水平スクロール バーが作成されることがわかりますが、画像はまだ固定サイズのままです。

ただし、プロット領域 (ピクセル単位) よりも大きな画像を生成し、オプションを指定して縮小することはできます。ui.Rwidth = n %

だから...ピクセル単位で小さな画像を作成して(プロット全体に比べて大きなテキストサイズを作成する)、それを大きくしてテキストを大きくすることはできません。確かに、プロット領域のサイズ (またはそれ以上) のグラフを作成し、プロット (または ggplot) コマンド自体を使用してテキストを満足のいくようにスケーリングする必要があります。

また、少なくとも現時点では、幅の % を指定することはできませんserver.R。おそらくpng()、画像を生成するコマンドに高さ/幅のオプションを渡すためです。これを行おうとするとエラーが発生します (しかし、試してみる価値はありました)。

テキスト サイズ オプションを指定する方が、私が探していたものよりも簡単な方法であることに同意しませんが、少なくとも機能するものはあります。私は、LaTeXドキュメントに対して常に「不正行為」を行いpdf("file.pdf", width = 8, height = 6)、プロットを作成してから、.texファイルに含めるときに必要に応じてスケーリングします。theme(axis.text = element_text(size = x))私の意見では、すべてのプロットをいじるよりもはるかに簡単です。

于 2013-07-24T19:24:33.357 に答える