首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用scale_discrete显示标签

不使用scale_discrete显示标签
EN

Stack Overflow用户
提问于 2022-03-18 10:42:16
回答 1查看 168关注 0票数 0

我在两个变量之间有一个二进制矩阵。我想知道在R中是否有对二进制矩阵进行聚类的方法,如果是,我应该使用哪种算法?

矩阵看起来像这样

代码语言:javascript
复制
        hobby1  hobby2  hobby3  hobby4
person1   1       0       0       1
person2   0       1       0       1
person3   1       1       1       0
person4   0       1       1       1

因此,为了根据患者最常见的爱好对他们进行聚类,我在堆栈溢出问题中发现了以下代码。

代码语言:javascript
复制
m.h<-(matrix(sample(0:1,200,T),nrow=20))

# CREATE CROSS_PRODUCT
m.cross<-matrix(unlist(lapply(1:nrow(m.h),function(x)crossprod(m.h[x,],t(m.h)))),nrow=nrow(m.h),byrow=T)

# USE reshape2 to melt/flatten the data
require(reshape2)
m.long<-melt(m.cross)
m.long[order(m.long$value,factor(m.long$Var2),factor(m.long$Var1)),]

require(ggplot2)
ggplot(m.long)+
  geom_tile(aes(Var1,Var2,fill=value))+
  geom_text(aes(Var1,Var2,label=value))+
  theme(axis.text.x = element_text(angle = 90, hjust = 1))+
  scale_fill_gradient(low="yellow",high="red") +
  scale_x_discrete(breaks = 1:nrow(m.h), labels=unlist(lapply(1:nrow(m.h),function(x)paste0("Person ",x)))) + 
  scale_y_discrete(breaks = 1:nrow(m.h), labels=unlist(lapply(1:nrow(m.h),function(x)paste0("Person ",x)))) +
  coord_cartesian(xlim=c(0,nrow(m.h)+1),ylim=c(0,nrow(m.h)+1)) 

然而,我想要的图形显示人在X和Y轴。为此,您有scale_y_discrete和scale_x_discrete函数,但是它不工作,我不知道为什么,因为我的结果显示为:

EN

回答 1

Stack Overflow用户

发布于 2022-03-18 12:25:15

正如注释中所述,您的Var是数字的,这意味着它们是连续的。因此,您应该对数据使用scale_x_continuousscale_y_continuous。您可以使用以下代码:

代码语言:javascript
复制
m.h<-(matrix(sample(0:1,200,T),nrow=20))
  
  # CREATE CROSS_PRODUCT
  m.cross<-matrix(unlist(lapply(1:nrow(m.h),function(x)crossprod(m.h[x,],t(m.h)))),nrow=nrow(m.h),byrow=T)
  
  # USE reshape2 to melt/flatten the data
  require(reshape2)
  m.long<-melt(m.cross)
  m.long[order(m.long$value,factor(m.long$Var2),factor(m.long$Var1)),]
  
  require(ggplot2)
  ggplot(m.long)+
    geom_tile(aes(Var1,Var2,fill=value))+
    geom_text(aes(Var1,Var2,label=value))+
    theme(axis.text.x = element_text(angle = 90, hjust = 1))+
    scale_fill_gradient(low="yellow",high="red") +
    scale_x_continuous(breaks = 1:nrow(m.h), labels=unlist(lapply(1:nrow(m.h),function(x)paste0("Person ",x)))) + 
    scale_y_continuous(breaks = 1:nrow(m.h), labels=unlist(lapply(1:nrow(m.h),function(x)paste0("Person ",x)))) +
    coord_cartesian(xlim=c(0,nrow(m.h)+1),ylim=c(0,nrow(m.h)+1)) 

输出:

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

https://stackoverflow.com/questions/71525794

复制
相关文章

相似问题

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