首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改绘图热图中的颜色栏标签(R)

更改绘图热图中的颜色栏标签(R)
EN

Stack Overflow用户
提问于 2020-09-08 12:02:14
回答 1查看 244关注 0票数 2

我正在处理调查数据,当被问及一个变量是否会影响另一个变量时,一个人的回答是从“不”到“绝对”。将响应映射到数字,并计算平均响应。

我在热图中表示这些平均值(x和y是具有相同变量名的列表)。我希望热图中正方形的颜色反映数字平均值,但我希望色条上的标签反映实际响应文本(例如,'not','lowly‘,’mean‘,'highly','very highly'),并将刻度线限制在位置0,1,2,3,4。

我不确定这是不是可以用plotly来完成。我可以用ggiraph做到这一点,但是ggiraph正在变得闪闪发光,而且ggiraph也有自己的问题--在plotly中,我对显示大小有更多的控制,我无法让ggiraph渲染到足够大的尺寸。

下面是最少的代码,输出也是如此。

代码语言:javascript
复制
library(plotly)
library(tidyr)

M <- matrix(c(NA, 1,3, 2, NA, 4, 3, 0, NA), nrow = 3, ncol = 3)
names_M <- c('var1', 'var2', 'var3')


val_to_char <- function(x) {
        if(is.na(x)) {return(x)}
        else if(x < 0.5) {return('not')}
        else if(x < 1.5) {return('lowly')}
        else if(x < 2.5) {return('moderately')}
        else if(x < 3.5) {return('highly')}
        else {return('very high')}
      }
      
labels <- apply(M, c(1,2), val_to_char)

   
fig <- plot_ly()
fig <- fig %>%
  add_trace(
    type = 'heatmap',
    x = names_M, y = names_M, z = M, text = labels,
    hovertemplate = '<extra></extra> Row: %{y}</br></br>Col: %{x}</br>Avg response: %{text}'
  )

fig

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-08 15:13:33

您可以使用ggplotggplotly来获得更大的灵活性。但您首先需要将数据转换为长data.frame:

代码语言:javascript
复制
M <- as.data.frame.matrix(matrix(c(NA, 1,3, 2, NA, 4, 3, 0, NA), nrow = 3, ncol = 3))
names(M) <- c('var1', 'var2', 'var3')


p <- M %>%
pivot_longer(.,paste0("var",1:3),names_to = "x",values_to = "z") %>%
  mutate(y = rep(paste0("var",1:3),each = 3)) %>%
  ggplot(aes(x,y,fill = z))+
  geom_tile() +
  scale_fill_continuous(breaks = 0:4,labels = c("not","lowly","moderatly","highly","very high"))


ggplotly(p)

函数scale_fill_continuous允许您手动指定不同分隔符的标签。您有很多使用ggplot调整图形的可能性

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63786928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档