Po przeczytaniu następujących Post, Próbowałem odtworzyć przykład. Problem polega jednak na tym, że mają prostą matrycę, w której jedna kolumna jest x, a drugi jest Y. W moim przypadku mam wiele kolumn, które próbuję wykreślić. Patrz przykład poniżej.

Jest to powtarzalne dane przykładowe:

testdata <- structure(list(P10 = c(1.3210675542847, 2.36327446015004, 2.57222510645425, 
1.51129279647688), P21 = c(0, 0, 0, 2.54308916286001), P12 = c(1.7753478270376, 
0, 1.5690304967756, 1.97404318110563), P18 = c(0, 0, 0, 2.72391520754351
), P5 = c(1.73384124079386, 2.94055776224166, 3.02224210965803, 
0)), row.names = c("Ras ", "p53  feedback loops 2", "Apoptosis ", 
"Metabotropic glutamate receptor group III "), class = "data.frame")

Tekst, który chciałbym mieć w heatmapie:

structure(list(P10 = c("0", "0", "0", "0"), P21 = c("11/69", 
"11/47", "20/107", "11/64"), P12 = c("0", "0", "0", "0"), P18 = c("10/69", 
"0", "13/107", "10/64"), P5 = c("0", "0", "0", "0")), row.names = c("Ras ", 
"p53  feedback loops 2", "Apoptosis ", "Metabotropic glutamate receptor group III "
), class = "data.frame")

I następujący działek. Code:

library(plotly)
f1 <- list(
    family = "Arial, sans-serif",
    size = 5,
    color = "lightgrey"
)

f2 <- list(
    family = "Old Standard TT, serif",
    size = 12,
    color = "black"
)

a <- list(
  title = "",
  titlefont = f1,
  showticklabels = TRUE,
  tickangle = 45,
  tickfont = f2,
  exponentformat = "E"
)

colorScale <- data.frame(z=c(0,0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.5,0.5,0.6,0.6,0.7,0.7,0.8,0.8,0.9,0.9,1),col=c("#BEBEBE", "#0000FF","#0000FF", "#1C00E2","#1C00E2", "#3800C6","#3800C6", "#5500AA","#5500AA", "#71008D","#71008D", "#8D0071","#8D0071", "#AA0055","#AA0055", "#C60038","#C60038", "#E2001C","#E2001C", "#FF0000"))
colorScale$col <- as.character(colorScale$col)

plot_ly(z = as.matrix(testdata),
        zmin=0,
        zmax=6,
        x = colnames(testdata),
        xgap = 0.6,
        y = rownames(testdata),
        ygap =0.6,
        colorscale=colorScale ,
        type = "heatmap",
        colorbar=list(ypad = 50, tickvals=seq(6,0, -3), ticktext=c("6", "3", "0", "NA") )) %>%
    layout(xaxis = a,
           margin = list(l = 400,
                         r = 10,
                         b = 100,
                         t = 10)) %>%
add_annotations(text = as.character(text), 
              showarrow = F,
              font=list(color='black'))

Produkuje następującą masę cieplną:

heatmap plot

Próbowałem użyć różnych podejść, takich jak dostarczanie całej dataframe text = text, lub text = text[,1],, ale nic nie jest wykreślone ...

Co się dzieje? Jak mogę prawidłowo wyświetlić tekst, gdy mam kolejną dataframe tekstu, chcę dodać do heatmap?

Edytuj 1 : Próbowanie odpowiedzi psycholi

Próbowałem proponowanej odpowiedzi @psychole, ale nie działa, tekst wyświetla, ale nie tak, jak powinien być jak w text. Sprawdź to poniżej:

psychOle plot

0
user324810 21 luty 2019, 10:15

2 odpowiedzi

Najlepsza odpowiedź

Użyj t(text):

plot_ly(z = as.matrix(testdata),
        zmin=0,
        zmax=6,
        x = colnames(testdata),
        xgap = 0.6,
        y = rownames(testdata),
        ygap =0.6,
        colorscale=colorScale ,
        type = "heatmap",
        colorbar=list(ypad = 50, tickvals=seq(6,0, -3), ticktext=c("6", "3", "0", "NA") )) %>%
  layout(xaxis = a,
         margin = list(l = 00,
                       r = 10,
                       b = 100,
                       t = 10)) %>%
  add_annotations(text=t(text), 
                  showarrow = F,
                  font=list(color='black'))

Proszę rozważyć dostarczanie minimalny przykład roboczy dla następnego pytania.

1
psychOle 21 luty 2019, 08:19

To działa dla mnie

cor_dat = melt(cor_dat)

plot_ly(z = as.matrix(testdata),
        zmin=0,
        zmax=6,
        x = colnames(testdata),
        xgap = 0.6,
        y = rownames(testdata),
        ygap =0.6,
        colorscale=colorScale ,
        type = "heatmap",
        colorbar=list(ypad = 50, tickvals=seq(6,0, -3), ticktext=c("6", "3", "0", "NA") )) %>%
  layout(xaxis = a,
         margin = list(l = 00,
                       r = 10,
                       b = 100,
                       t = 10)) %>%
  add_annotations(x = cor_dat$Var1,
                  y = cor_dat$Var2,
                  text = cor_dat$value, 
                  showarrow = F,
                  font=list(color='black'))
1
gXcloud 12 kwiecień 2020, 00:25