4

我正在尝试在 R 中绘制板布局热图。板布局只是 8(行)x 12(列)圆(井)。行用字母标记,列用数字标记。每个孔需要填充一些颜色强度取决于定性或定量变量。盘子布局是这样的:

在此处输入图像描述

这是小数据集:

 set.seed (123)
platelay <- data.frame (rown = rep (letters[1:8], 12), coln = rep (1:12, each = 8),
colorvar = rnorm (96, 0.3, 0.2))

   rown coln     colorvar
1     a    1  0.187904871
2     b    1  0.253964502
3     c    1  0.611741663
4     d    1  0.314101678
5     e    1  0.325857547
6     f    1  0.643012997
7     g    1  0.392183241
8     h    1  0.046987753
9     a    2  0.162629430
10    b    2  0.210867606
11    c    2  0.544816359
12    d    2  0.371962765
13    e    2  0.380154290
14    f    2  0.322136543
15    g    2  0.188831773
16    h    2  0.657382627
17    a    3  0.399570096
18    b    3 -0.093323431
19    c    3  0.440271180
20    d    3  0.205441718
21    e    3  0.086435259
22    f    3  0.256405017
23    g    3  0.094799110
24    h    3  0.154221754
25    a    4  0.174992146
26    b    4 -0.037338662
27    c    4  0.467557409
28    d    4  0.330674624
29    e    4  0.072372613
30    f    4  0.550762984
31    g    4  0.385292844
32    h    4  0.240985703
33    a    5  0.479025132
34    b    5  0.475626698
35    c    5  0.464316216
36    d    5  0.437728051
37    e    5  0.410783531
38    f    5  0.287617658
39    g    5  0.238807467
40    h    5  0.223905800
41    a    6  0.161058604
42    b    6  0.258416544
43    c    6  0.046920730
44    d    6  0.733791193
45    e    6  0.541592400
46    f    6  0.075378283
47    g    6  0.219423033
48    h    6  0.206668929
49    a    7  0.455993024
50    b    7  0.283326187
51    c    7  0.350663703
52    d    7  0.294290649
53    e    7  0.291425909
54    f    7  0.573720457
55    g    7  0.254845803
56    h    7  0.603294121
57    a    8 -0.009750561
58    b    8  0.416922750
59    c    8  0.324770849
60    d    8  0.343188314
61    e    8  0.375927897
62    f    8  0.199535309
63    g    8  0.233358523
64    h    8  0.096284923
65    a    9  0.085641755
66    b    9  0.360705728
67    c    9  0.389641956
68    d    9  0.310600845
69    e    9  0.484453494
70    f    9  0.710016937
71    g    9  0.201793767
72    h    9 -0.161833775
73    a   10  0.501147705
74    b   10  0.158159847
75    c   10  0.162398277
76    d   10  0.505114274
77    e   10  0.243045399
78    f   10  0.055856458
79    g   10  0.336260696
80    h   10  0.272221728
81    a   11  0.301152837
82    b   11  0.377056080
83    c   11  0.225867994
84    d   11  0.428875310
85    e   11  0.255902688
86    f   11  0.366356393
87    g   11  0.519367803
88    h   11  0.387036298
89    a   12  0.234813683
90    b   12  0.529761524
91    c   12  0.498700771
92    d   12  0.409679392
93    e   12  0.347746347
94    f   12  0.174418785
95    g   12  0.572130490
96    h   12  0.179948083

有没有可以轻松做到的包?是否可以在 base 或 ggplot2 或其他可以实现此目标的包中编写函数。

4

4 回答 4

14

用 改变足够大小的点的颜色ggplot2。请注意,我已经实施了@TylerRinkler 的建议,但在对ggplot. 我还删除了轴标签

ggplot(platelay, aes(y = factor(rown, rev(levels(rown))),x = factor(coln))) + 
     geom_point(aes(colour = colorvar), size =18)  +theme_bw() +
     labs(x=NULL, y = NULL)

在此处输入图像描述

还有一个基本的图形方法,它可以让你在绘图上方有 x 轴

# plot with grey colour dictated by rank, no axes or labels
with(platelay, plot( x=as.numeric(coln), y= rev(as.numeric(rown)), pch= 19, cex = 2, 
 col = grey(rank(platelay[['colorvar']] ) / nrow(platelay)), axes = F, xlab= '', ylab = ''))
# add circular outline
with(platelay, points( x=as.numeric(coln), y= rev(as.numeric(rown)), pch= 21, cex = 2))
# add the axes
axis(3, at =1:12, labels = 1:12)
axis(2, at = 1:8, labels = LETTERS[8:1])
# the background grid
grid()
# and a box around the outside
box()

在此处输入图像描述

于 2012-12-21T01:57:18.440 回答
6

对于咯咯笑声和圣诞欢呼,这里有一个使用基本 R 绘图函数的版本。尽管很可能有更好的解决方案。

dev.new(width=6,height=4)

rown <- unique(platelay$rown)
coln <- unique(platelay$coln)

plot(NA,ylim=c(0.5,length(rown)+0.5),xlim=c(0.5,length(coln)+0.5),ann=FALSE,axes=FALSE)
box()

axis(2,at=seq_along(rown),labels=rev(rown),las=2)
axis(3,at=seq_along(coln),labels=coln)

colgrp <- findInterval(platelay$colorvar,seq(min(platelay$colorvar),max(platelay$colorvar),length.out=10))
colfunc <- colorRampPalette(c("green", "blue"))
collist <- colfunc(length(unique(colgrp))) 

symbols(platelay$coln,
        factor(platelay$rown, rev(levels(platelay$rown))),
        circles=rep(0.2,nrow(platelay)),
        add=TRUE,
        inches=FALSE,
        bg=collist[colgrp])

结果图像:

在此处输入图像描述

于 2012-12-21T02:54:58.167 回答
4

这里使用@mnel 的ggplot2 解决方案和网格解决方案的解决方案

在此处输入图像描述

这里是给定解决方案的代码

d <- ggplot(platelay, aes(y=rown,x=factor(coln))) + 
  geom_point(aes(colour = colorvar), size =18) + theme_bw()

我使用 ggplot 生成的数据

data <- ggplot_build(d)$data[[1]]

 x <- data$x
 y <- data$y
 grid.newpage()
 pushViewport(plotViewport(c(4, 4, 2, 2)),
               dataViewport(x, y))

网格有一个椭圆几何

 grid.ellipse(x, y,size=20,  ar = 2,angle=0,gp =gpar(fill=data$colour))
 grid.xaxis(at=c(labels=1:12,ticks=NA),gp=gpar(cex=2))
 grid.yaxis(at = 1:8,label=rev(LETTERS[1:8]),gp=gpar(cex=2))

 grid.roundrect(gp=gpar(fill=NA))

我添加网格:

gpgrid <- gpar(col='grey',lty=2,col='white')
grid.segments(unit(1:12, "native") ,unit(0, "npc"), unit(1:12, "native"),unit(1, "npc"),gp=gpgrid)
grid.segments(unit(0, "npc"), unit(1:8, "native"), unit(1, "npc"),unit(1:8, "native"),gp=gpgrid)
upViewport()
于 2012-12-21T02:38:26.140 回答
0

这个答案是@thelatemail 答案的补充,它解释了 (8,12) = 96 格式的版图。

要构造 (32,48) = 1536 格式,AZ 的个位数是不够的。因此,需要扩展 AA、AB、AC、AD ... ZZ 等字母,并且可以通过将 LETTERS 连接到以下级别变量来将其扩展为三位或更多位数。

levels = c(LETTERS, c(t(outer(LETTERS, LETTERS, paste, sep = "")))))

@thelatemail 答案可以改进为 1536 板格式的两位数字母,如下所示

rown = rep (c(LETTERS, c(t(outer(LETTERS[1], LETTERS[1:6], paste, sep = "")))),

symbols(platelay$coln,
        factor(platelay$rown, 
               levels = rev(c(LETTERS, c(t(outer(LETTERS[1], LETTERS[1:6], paste, sep = "")))))),
        circles=rep(0.45,nrow(platelay)),
        add=TRUE,
        inches=FALSE,
        bg=collist[colgrp])

符号函数内的级别变量应该具有按字母顺序排序的单个字符,然后是双字符,然后是三字符......等等数字。

例如,如果您在符号函数中的级别顺序不正确,那么它将以不正确的颜色表示进行绘图。

错误顺序:A、AA、AB、AC、AD、AE、AF、B、C、D、...Z

正确顺序:A、B、C、D、E、.....Z、AA、AB、AC、AD、AE、AF

在此处输入图像描述

于 2015-02-21T05:44:32.343 回答