it-swarm.asia

حجم وحجم المؤامرة في RStudio لامعة

مرتبط ، ولكن يتحدث فقط عن مساحة الأرض المخصصة بشكل عام ، وليس كيفية تعيين حجم صورة القطعة مباشرةً و ثم قم بتوسيعه لملء المساحة المطلوبة


أنا بصدد إنشاء تطبيق ويب لامع وأرغب في ضبط حجم المخطط و النطاق. ما أعنيه بذلك هو أنني أبحث عن طريقة لتعيين ارتفاع/عرض محدد لصفتي ، و ثم مقياس يضبط الصورة ذات الحجم على 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 × 900 بكسل.

الصغيرة  smaller picture

كبير  bigger picture

أود التحكم في حجم الصورة نفسها ، حيث أجد ggplot2 الأساطير عند استخدام خيارات مثل colour = 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 تجاوز أي شيء قمت بتعيينه في المقطع plotOutput من ui.R.

هل هناك طريقة للحفاظ على حجم صورة القطعة أصغر للحفاظ على قابلية القراءة مع الاستمرار في ملء المساحة المطلوبة mainPanel؟

50
Hendy

لست متأكدًا مما إذا كان هذا يمنحك تمامًا ما تريد ، ولكن إليك ما نجح بالنسبة لي.

الخيارات المحددة في Server.R هل دخلت حيز التنفيذ. (لقد قمت للتو برسم اثنين من الرسوم البيانية بأحجام مختلفة لكل منهما.) كما أخذت اقتراح Manetheran @ وجعلت cex و cex.axis في معلمات. يبدو أنهم يعملون.

يوجد أدناه رمز التطبيق الكامل ، بالإضافة إلى لقطة شاشة واحدة.

###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

تحديث إعادة خيار العرض = 100٪ في UI.R

نعم ، في حالتي ، فإنه يحدث فرقًا بالتأكيد. في السطرين أدناه ، 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.


لقد لعبت بعض الشيء أكثر استنادًا إلى متابعة @ Ram وأعتقد أنني أفهم كيف يتفاعل ui.R و server.R في إعداد خيارات مختلفة والنظر في Inspect element في Chromium.

يعين ui.R مساحة قطعة الأرض المتاحة التي يمكن للمرء تعبئتها ، ويحدد server.R حجم قطعة الأرض.

  • ui.R: العرض = 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٪ من عرض الشاشة وتقوم بإنشاء شريط تمرير أفقي في المستعرض ... ومع ذلك ، تظل الصورة بحجمها الثابت.

يمكنك مع ذلك ، إنشاء صورة أكبر من مساحة الرسم (بالبكسل) ثم تصغيرها عبر 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