2017-03-02 4 views
2

こんにちは私はplotlyでヒートマップを作っています。コードは次のとおりです。ここでrのプロットヒートマップにテキストを書き込む方法は?

 plot_ly(z = ~df$MonetaryClass, 
     x = ~df$RecencyClass, 
     y = ~df$FrequencyClass, 
     type = "heatmap") %>% 
    colorbar(title = 'Monetary Class', 
      limits = c(1,5), 
      tickmode = 'array', 
      tickvals = c(1,2,3,4,5)) %>% 
    layout(title = "RFM Analyse", 
     xaxis = list(title = 'Recency Class', 
         tickmode = 'array', 
         tickvals = c(1, 2,3,4,5), 
         ticktext = c(1, 2, 3, 4, 5) 
     ), 
     yaxis = list(title = 'Frequency Class', 
         tickmode = 'array', 
         tickvals = c(1, 2,3,4,5), 
         ticktext = c(1, 2, 3, 4, 5) 
     ) 
) 

は私のデータフレームの100のサンプル、およびdput()の情報です:

 structure(list(RecencyClass = c(3, 4, 4, 3, 4, 4, 1, 4, 3, 4, 
4, 2, 1, 3, 5, 5, 2, 1, 4, 1, 3, 1, 4, 2, 2, 1, 4, 5, 2, 4, 5, 
1, 1, 1, 3, 3, 3, 4, 1, 3, 1, 3, 1, 3, 2, 5, 2, 1, 4, 1, 5, 2, 
4, 4, 2, 2, 5, 3, 1, 3, 3, 5, 2, 2, 4, 4, 2, 2, 5, 2, 2, 2, 5, 
3, 2, 1, 1, 2, 5, 2, 1, 1, 2, 1, 4, 2, 3, 2, 2, 1, 1, 2, 2, 4, 
5, 3, 5, 5, 5, 5), FrequencyClass = c(4, 5, 1, 3, 5, 5, 3, 1, 
5, 3, 1, 3, 4, 1, 3, 2, 1, 2, 5, 1, 1, 4, 3, 2, 3, 1, 4, 4, 2, 
4, 4, 5, 1, 1, 3, 4, 4, 3, 2, 4, 1, 2, 1, 2, 1, 4, 1, 1, 2, 1, 
3, 1, 3, 2, 2, 4, 2, 5, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 5, 2, 1, 
4, 5, 1, 1, 3, 1, 1, 5, 4, 4, 2, 5, 1, 4, 1, 5, 2, 1, 1, 1, 3, 
5, 5, 4, 4, 4, 3, 4, 2), MonetaryClass = c(5, 5, 3, 4, 5, 3, 
1, 2, 3, 3, 1, 2, 3, 1, 4, 3, 2, 3, 5, 2, 1, 4, 1, 3, 2, 3, 5, 
5, 3, 3, 4, 5, 1, 1, 3, 3, 5, 2, 2, 4, 4, 3, 1, 2, 1, 3, 1, 1, 
2, 4, 3, 1, 2, 4, 2, 5, 1, 5, 1, 1, 1, 3, 3, 2, 1, 5, 2, 4, 5, 
2, 1, 4, 2, 1, 3, 5, 2, 1, 5, 5, 5, 2, 4, 1, 5, 1, 5, 1, 4, 1, 
2, 1, 1, 5, 3, 5, 2, 2, 4, 3)), .Names = c("RecencyClass", "FrequencyClass", 
"MonetaryClass"), row.names = c(24908L, 34164L, 27970L, 23648L, 
35944L, 35581L, 7825L, 27857L, 26043L, 31093L, 27026L, 13607L, 
8689L, 18196L, 39464L, 37304L, 9820L, 6867L, 35361L, 4767L, 18345L, 
8840L, 29486L, 11414L, 13718L, 60L, 31892L, 41103L, 13347L, 33299L, 
41563L, 8950L, 16L, 568L, 21384L, 25256L, 24005L, 30861L, 6025L, 
25098L, 5800L, 20559L, 2362L, 20797L, 11256L, 40490L, 9163L, 
3282L, 29174L, 5965L, 38331L, 11068L, 31018L, 28535L, 11793L, 
16171L, 37278L, 25937L, 5976L, 19566L, 18754L, 37055L, 11249L, 
13414L, 27966L, 31049L, 11150L, 15701L, 42887L, 11334L, 10880L, 
16532L, 44559L, 18162L, 9545L, 7810L, 3715L, 10128L, 42163L, 
16488L, 8926L, 6416L, 17789L, 4352L, 32966L, 10045L, 26614L, 
12601L, 10906L, 3122L, 4696L, 15936L, 18048L, 34864L, 41047L, 
24615L, 41413L, 39479L, 40317L, 37389L), class = "data.frame") 

それは次のようになります。

enter image description here

として、あなたは25箱の洞察を私の行列が持っていることがわかります。すべてのボックスに自分で選択したテキストを書くことは可能ですか?たとえば、 "1"の頻度と "1"の後ろの左下にある青黒の「私はビールが好きです。または、右上の「5」と「5」には、「I like CSGO」のようなものがあります。 textで試しましたが、うまくいきません。

+0

私は必要な文章で5×5の行列を作ってみましたが、私は方法がわかりませんこれらの新しいマトリックスと私の陰謀を一致させるには? – Marre

答えて

1

add_annotationsでテキストを追加できます。

  • showarrow = FALSE
とデフォルトの矢印を削除 text
  • を介してテキストを追加
  • xref = 'x'yref = 'y'を介してX軸及びY軸に対して以下の例では)x、y座標を指定します

    enter image description here

    anno_x <- c(1, 5) 
    anno_y <- c(1, 5) 
    anno_text <- c('I like beer', 'I like CSGO') 
    
    p <- plot_ly(
        x = c(1:5), 
        y = c(1:5), 
        z = matrix(rnorm(9), nrow = 5, ncol = 5), 
        type='heatmap') %>% add_annotations(x = anno_x, y = anno_y, text = anno_text, xref = 'x', yref = 'y', showarrow = FALSE, font=list(color='black')) 
    
    p 
    
  • +1

    ありがとうございます。 – Marre

    1

    まず、データフレームに追加して、add_annotationsを使用し、5x5テキスト行列を定義します。

    txt <- matrix(LETTERS[1:25], nrow=5) # define your 5x5 text matrix 
    df$txt <- txt[as.matrix(df[,1:2])] 
    library(plotly) 
    plot_ly(z = ~df$MonetaryClass, 
         x = ~df$RecencyClass, 
         y = ~df$FrequencyClass, 
         type = "heatmap") %>% 
        colorbar(title = 'Monetary Class', 
          limits = c(1,5), 
          tickmode = 'array', 
          tickvals = c(1,2,3,4,5)) %>% 
        layout(title = "RFM Analyse", 
         xaxis = list(title = 'Recency Class', 
             tickmode = 'array', 
             tickvals = c(1, 2,3,4,5), 
             ticktext = c(1, 2, 3, 4, 5) 
         ), 
         yaxis = list(title = 'Frequency Class', 
             tickmode = 'array', 
             tickvals = c(1, 2,3,4,5), 
             ticktext = c(1, 2, 3, 4, 5) 
         ) 
    ) %>% 
        add_annotations(x = df$RecencyClass, 
            y = df$FrequencyClass, 
            text = df$txt, 
            showarrow = FALSE, 
            ax = 20, 
            ay = -20) 
    

    enter image description here

    関連する問題