微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有按类别标签分类的数据点的热图

如何解决带有按类别标签分类的数据点的热图

我有一个数据框,其中包含用于不同属性的列和用于类标签的列。我正在尝试使用按类别标签分类的数据点创建所有属性的热图/矩阵图。

如果我将数据框转换为数字矩阵,则可以使用热图函数来创建热图:

q3 <- read.arff("diabetes.arff")  

q3_m <- as.matrix(q3[,1:8])  

heatmap(q3_m,Colv=NA,Rowv=NA) 

但是,我无法弄清楚如何按类变量对这些进行排序,因为我不得不将它从矩阵中删除,因为它不是数字。

如果我将数据转换成长格式,我还可以使用 ggplot 制作以下热图:

q3_long <- pivot_longer(q3,preg:age,names_to = "Attribute",values_to = "Value")

ggplot(data = q3_long,mapping = aes(x = Attribute,y=class,fill = Value)) +
    geom_raster() +
    xlab(label = "Attribute")

但是,这会平均给定类中每个案例的值,而不是将每个案例显示为具有自己填充的单独行。

如何结合这些方法来获得按类别对案例进行聚类的热图?

(提前道歉 - 我试图在此处包含图片,但我刚刚加入了 stackoverflow,因此没有包含图片所需的 10 个声望点)。

感谢您的帮助。

编辑:这里是数据示例。它也是公开可用的 - 糖尿病.arff 数据集会通过 Weka 安装 (https://waikato.github.io/weka-wiki/downloading_weka/) 自动下载。

structure(list(preg = c(6,1,8,5,3,10,2,4,7,1),plas = c(148,85,183,89,137,116,78,115,197,125,110,168,139,189,166,100,118,107,103,115),pres = c(72,66,64,40,74,50,70,96,92,80,60,72,84,30,70),skin = c(35,29,23,35,32,45,19,47,38,30),insu = c(0,94,88,543,846,175,230,83,96),mass = c(33.6,26.6,23.3,28.1,43.1,25.6,31,35.3,30.5,37.6,27.1,30.1,25.8,45.8,29.6,43.3,34.6
),pedi = c(0.627,0.351,0.672,0.167,2.288,0.201,0.248,0.134,0.158,0.232,0.191,0.537,1.441,0.398,0.587,0.484,0.551,0.254,0.183,0.529),age = c(50,21,33,26,53,54,34,57,59,51,32),class = structure(c(2L,1L,2L,2L),.Label = c("tested_negative","tested_positive"),class = "factor")),row.names = c(NA,20L),class = "data.frame")

解决方法

也许这就是您要找的。要按案例获取热图,您可以向数据集添加一个 id 变量,您可以将其映射到 x 并利用分面按类对案例进行聚类:


library(tidyr)
library(ggplot2)
library(dplyr)

q3_long <- q3 %>% 
  mutate(id = row_number(),id = factor(id)) %>% 
  pivot_longer(-c(class,id),names_to = "Attribute",values_to = "Value")

ggplot(data = q3_long,mapping = aes(x = Attribute,y = id,fill = Value)) +
  geom_raster() +
  xlab(label = "Attribute") +
  facet_wrap(~class,scales = "free_y")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。