繁体   English   中英

使用R或Python生成二进制数据的热图

[英]Heat map of binary data using R or Python

我有一个0和1的二进制数据集,其中0是不存在,而1是一个事件存在。

数据集的示例如下所示:

events    germany    Italy 
Rain      0          1
hail      1          0
sunny     0          0

我想通过从文件中读取数据以热图的形式获得此数据的红色和白色图片。

编辑 :针对以下评论,这是一个示例数据文件(在磁盘上保存为“ data.txt”):

Rain  0 0 0 0 1 0 1 0 0 1
Hail  0 1 0 0 0 0 0 1 0 0
Sunny 1 1 1 0 1 0 1 0 1 1

在python中,我们可以读取标签并通过以下方式绘制此“热图”:

from numpy import loadtxt
import pylab as plt

labels = loadtxt("data.txt", usecols=[0,],dtype=str)
A      = loadtxt("data.txt", usecols=range(1,10))

plt.imshow(A, interpolation='nearest', cmap=plt.cm.Reds)
plt.yticks(range(A.shape[0]), labels)

plt.show()
import pylab as plt

在此处输入图片说明

参见?image 用你的数据

dat <- data.matrix(data.frame(Germany = c(0,1,0), Italy = c(1,0,0)))
rownames(dat) <- c("Rain","Hail","Sunny")

这使我们接近:

image(z = dat, col = c("white","red"))

但更好地处理轴标签会很好...试试:

op <- par(mar = c(5,5,4,2) + 0.1)
image(z = dat, col = c("white","red"), axes = FALSE)
axis(side = 1, labels = rownames(dat), 
     at = seq(0, by = 0.5, length.out = nrow(dat)))
axis(side = 2, labels = colnames(dat), at = c(0,1), las = 1)
box()
par(op)

这使

二进制热图

要使热图相反,请转置datimage(z = t(dat), ....) )并在axis()调用中进行更改,在第一个调用中将side更改为2 ,在第二个调用中将side更改为1 (并将las = 1移动到另一个调用。

op <- par(mar = c(5,5,4,2) + 0.1)
image(z = t(dat2), col = c("white","red"), axes = FALSE)
axis(side = 2, labels = rownames(dat2), 
     at = seq(0, by = 0.5, length.out = nrow(dat2)), las = 1)
axis(side = 1, labels = colnames(dat2), at = c(0,1))
box()
par(op)

在R中尝试:

library(bipartite)
mat<-matrix(c(0,1,1,0,1,1),byrow=TRUE,nrow=3)
rownames(mat)<-c("Rain","hail","sunny")
colnames(mat)<-c("Germany","Italy")
visweb(mat,type="None")

用于红色方块和标签尺寸控制:

visweb(mat,type="None",labsize=2,square="b",box.col="red") 

在R中使用reshape和ggplot2

library(reshape)
library(ggplot2)

dat <- data.frame(weather=c("Rain","Hail","Sunny"), Germany = c(0,1,0), Italy = c(1,0,0))

melt.data<-melt(dat, id.vars="weather", variable_name="country")

qplot(data=melt.data,
      x=country,
      y=weather,
      fill=factor(value),
      geom="tile")+scale_fill_manual(values=c("0"="white", "1"="red"))

在此处输入图片说明

基数R中最简单的解决方案可能是:

rownames(dat) = dat$weather
heatmap(as.matrix(dat[,2:3]), scale='none')

...假设您的数据帧称为dat 热图不是很漂亮,但是它很容易快捷。 第一行不是必需的。 它仅用于使天气标签显示在热图中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM