web-dev-qa-db-ja.com

RStudioでのプロットのスケールとサイズの光沢

関連しますが、割り当てられたプロットスペースについてのみ話します。プロットイメージのサイズを直接設定する方法ではなく、thenスケールして目的のスペースを埋める方法ではありません


光沢のあるWebアプリを作成していますが、プロットのサイズスケールを設定したいと思います。つまり、プロットの高さ/幅を有限に設定する方法と、thenスケール画像を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ピクセルのラップトップでの全幅のスクリーンショットです。

 smaller picture

Big bigger picture

ggplot2colour = varなどのオプションをかなり小さく使用すると、size = varの凡例が見つかるため、画像自体のサイズを制御したいと思います。大きな画像の軸ラベルも読みにくいことに注意してください。ピクセルが限られているために画像のサイズがうまく拡大されない状況に陥ることがありますが、実行する前に少なくともいくらかの余地があると思いますそれに。

助言がありますか?私はこれまでのところ以下で遊んでみましたが、運がありません:

ui.R

shinyUI(pageWithSidebar(

headerPanel("Title"),

  sidebarPanel(),

  mainPanel(

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

  ))

server.R

shinyServer(function(input, output) {

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

  output$main_plot <- renderPlot({

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

server.Rで指定された高さ/幅のオプションは、ui.RplotOutputセクションで設定したものを上書きするようです。

プロット画像のサイズを小さくして読みやすさを維持しながら、目的のmainPanelエリアを塗りつぶす方法はありますか?

50
Hendy

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

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 )
} )

enter image description here

更新してください。 UI.RのWidth = 100%オプション

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

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

お役に立てば幸いです。

30
Ram Narasimhan

@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. ドキュメントを参照してください-軸テキスト、凡例テキスト、facet_gridストリップを指定できますテキストなど.

前のSOの質問)以来、仕様がopts([option] = theme_text(size = n))からtheme([option] = element_text(size = n))に変更されました。おそらく再び変更されるので、現在のテストを見つけてください。 _ggplot2_の/ theme/optionsページ。


@Ramのフォローアップに基づいてもう少し遊んでみて、_ui.R_と_server.R_が異なるオプションを設定し、Chromiumの_Inspect element_を確認する方法を理解していると思います。

ui.Rは使用可能なプロット領域を設定し、server.Rはプロットサイズを定義します。

  • _ui.R:_ width = 100%、_server.R_:オプションが設定されていません

enter image description here

  • _ui.R:_幅= 100%、_server.R_:幅= 800、高さ= 600

enter image description here

  • _ui.R:_幅= 50%、_server.R_:幅= 800、高さ= 600

enter image description here

  • _ui.R:_幅= 200%、_server.R_:幅= 800、高さ= 600

enter image description here

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

ただし、can、プロット領域よりも大きい画像(ピクセル単位)を生成し、_ui.R_を介して縮小し、_width = n %_オプション。

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

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

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

16
Hendy