3

0と1のバイナリデータセットがあります。ここで、0は不在、1はイベントの存在です。

データセットのサンプルは次のようになります。

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

ファイルからデータを読み取って、このデータの赤と白の画像をヒートマップの形式で取得したいと思います。

4

5 に答える 5

5

編集:以下のコメントに応えて、サンプルデータファイル(「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

ここに画像の説明を入力してください

于 2012-05-01T13:42:17.180 に答える
4

を参照してください?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)

これは

バイナリヒートマップ

datヒートマップを逆にするには、 (image(z = t(dat), ....))を転置して呼び出しを行い、最初の呼び出しと2番目の呼び出しaxis()でに変更sideします(そして、を他の呼び出しに移動します。つまり、21las = 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)
于 2012-05-01T11:56:38.920 に答える
2

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") 
于 2012-05-01T12:00:45.013 に答える
2

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"))

ここに画像の説明を入力してください

于 2012-05-01T16:22:36.283 に答える
0

おそらくベースRの最も単純な解決策は次のとおりです。

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

...データフレームがと呼ばれると仮定しますdat。ヒートマップはきれいではありませんが、すばやく簡単に実行できます。最初の行は必要ありません。これは、気象ラベルをヒートマップに表示するためだけに使用されます。

于 2015-02-23T10:57:39.350 に答える