2017-09-14 23 views
1

光散乱アプリで散布図に相関係数を入れる必要があります。以下は私の問題を説明するために作った例です。相関テキストはプロット上には表示されません。チェックボックスは応答していないようです。私は長い時間を取って理由を理解しようとしましたが、できませんでした。私が間違ったことを誰にでも教えてもらえますか?事前にどうもありがとうございました。光るアプリに散乱プロットの相関係数を入力できません

#--------------------functions------------------------------------------ 
corr_eqn <- function(x,y, method='pearson', digits = 2) { 
    corr_coef <- round(cor.test(x, y, method=method)$estimate, digits = digits) 
    corr_pval <- tryCatch(format(cor.test(x,y, method=method)$p.value, 
           scientific=TRUE), 
          error=function(e) NA) 
    paste(method, 'r = ', corr_coef, ',', 'pval =', corr_pval) 
} 

sca.plot <- function (cor.coef=TRUE) { 
    df <- mtcars %>% filter(cyl==4) 
    p<- df %>% 
     ggplot(aes(x=hp, y=mpg))+ 
     geom_point()+ 
     geom_smooth() 
    if (cor.coef) { 
     p<- p+geom_text(x=0.9*max(mtcars$hp), 
         y=0.9*max(mtcars$mpg), 
         label = corr_eqn(df[['hp']],df[['mpg']], 
             method='spearman')) 
    } 
    return (p)  
} 

#-------------------------ui---------------------------- 
ui <- fluidPage(
    sidebarLayout(
     sidebarPanel(
      checkboxInput('cor.cplot', 
          label = h5('Correlation Coefficient'), value = TRUE) 
     ), 
     mainPanel(
      plotOutput('plot') 
      ) 
     ) 
    ) 
#---------------------------server--------------------------------- 

server <- function(input, output) { 


    output$plot <- renderPlot ({ 
     sca.plot(cor.coef = input$cor.cplot) 
    }) 
} 


runApp(shinyApp(ui, server)) 

答えて

0

GEOMが正常に動作している場所がmtcarsからではなく、DFよりも最大値に基づいて計算されるため、テキストはちょうどあなたのプロットの限界を超えて道を終了します。

これはあなたがまたannotate()を使用することができ、読みやすさ

p <- p + geom_label(
    x = 0.9 * max(df$hp), 
    y = 0.9 * max(df$mpg), 
    label = corr_eqn(df[['hp']], df[['mpg']], 
        method = 'spearman') 
) 
0

ためgeom_labelを使用する場合があります

p <- p + geom_text(
    x = 0.9 * max(df$hp), 
    y = 0.9 * max(df$mpg), 
    label = corr_eqn(df[['hp']], df[['mpg']], 
        method = 'spearman') 
) 

を動作するはずです。また、データセット全体ではなく、プロット内のデータを使用してテキストにxyを設定することもできます。このため、mtcars$hpの代わりにp$data$hpを使用することができます。

p <- p + ggplot2::annotate("text", x= 0.9*max(p$data$hp, na.rm = T), 
          y = 0.9*max(p$data$mpg, na.rm = T), 
          label = corr_eqn(df[['hp']],df[['mpg']], 
              method='spearman')) 

これは結果

enter image description here

です
関連する問題