簡體   English   中英

R Plotly 在等高線圖上顯示字符串

[英]R Plotly show string on contour plots

我已經覆蓋了兩個等高線圖:

library(plotly)
cluster_count <- 5
volcan <- plot_ly(z = ~volcano, 
                  type = "contour",
                  contours = list(
                    coloring= "fill",
                    showlines = F
                  ))
cluster_matrix <- volcano
cluster_matrix[cluster_matrix < 100] <- 1
cluster_matrix[cluster_matrix <= 120 & cluster_matrix >= 100] <- 2
cluster_matrix[cluster_matrix < 140 & cluster_matrix >= 120] <- 3
cluster_matrix[cluster_matrix <= 160 & cluster_matrix >= 140] <- 4
cluster_matrix[cluster_matrix > 160] <- 5

cluster_name_matrix <- cluster_matrix
cluster_name_matrix[cluster_matrix ==1] <- "Eins"
cluster_name_matrix[cluster_matrix ==2]  <- "Zwei"
cluster_name_matrix[cluster_matrix ==3]  <- "Drei"
cluster_name_matrix[cluster_matrix ==4]  <- "Vier"
cluster_name_matrix[cluster_matrix ==5]  <- "Funf"

volcan %>% add_contour(cluster_matrix, 
                       type = "contour", 
                       opacity =1,
                       text=cluster_name_matrix,
                       hovertemplate = 'Cluster: %{text}<extra></extra>',
                       autocontour = F,
                       line=list(color="orange"),
                       contours = list(
                         start = 1,
                         showlabels = T,
                         coloring= "lines",
                         end = cluster_count,
                         size = 1,
                         showlines = T
                       ))

在此處輸入圖像描述

是否有可能有這樣的 plot:

在此處輸入圖像描述

就像我對懸停文本所做的那樣? 提前感謝您的提示和建議!

您一直在尋找的是add_annotations() function。 在下面的代碼中,我編寫了一個 function,它檢索每個級別的隨機坐標對,然后將相應的坐標傳遞給add_annotations() function。 請注意,我將您的輪廓 plot 存儲在變量p中:

library(purrr)

# Custom function
find_rand_annotation_index <- function(name_matrix, string){
  d <- which(name_matrix == string, arr.ind = TRUE)
  d2 <- as.data.frame(d[sample(nrow(d), size = 1), , drop = FALSE])
  cbind(d2, string)
}

# Get 5 random coordinates to plot the labels
text_coords <- purrr::map_dfr(c("Eins", "Zwei", "Drei", "Vier", "Funf"), ~ find_rand_annotation_index(cluster_name_matrix, .x))

# Plot the annotations on the contour plot
p %>%
  add_annotations(
    x = text_coords$col,
    y = text_coords$row,
    text = text_coords$string,
    font = list(color = "IndianRed"),
    showarrow = F
  )

標簽的位置可能不符合您的喜好(因為坐標是隨機選擇的),但您可能想在代碼中對其進行一些處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM