2

我正在寻找一种本质上是网格的情节。例如,将有 10 列和 50 行。例如,像这样:

在此处输入图像描述

每个框(在本例中为 10*50 = 500)都将具有我将通过数据框提供的唯一值。基于唯一值,我将有一个函数为每个框分配颜色。因此,它变成了一个网格来可视化每个框的“范围”。我还需要标记每一列(可能是垂直的,以便所有标签都适合)和行(水平)。

我只是不知道会有什么样的情节,我不知道是否有任何图书馆这样做。我只是在寻找一些帮助来找到可以做到这一点的东西。如果可能的话,我会很感激一些帮助。

4

4 回答 4

6

怎么样heatmap

m=matrix(runif(12),3,4)
rownames(m)=c("Me","You","Him")
colnames(m)=c("We","Us","Them","I")
heatmap(m,NA,NA)

在此处输入图像描述

请注意,它适用于 amatrix而不是 a data frame,因为所有值都必须是数字,并且data frames是面向行的记录。

有关其他选项,请参阅帮助。

于 2013-08-14T17:28:46.240 回答
4

查看image图形包中的rasterImage功能,或者如果您想要更多控制,请查看该功能。

rect您还可以使用该函数从头开始构建绘图。

于 2013-08-14T19:38:34.240 回答
4

我会这样做,ggplot2因为它具有高度的灵活性。特别geom_tile有用。如果你真的想要面板线,你可以注释掉theme(panel.grid.major = element_blank()) +theme(panel.grid.minor = element_blank()) +线,当然你也可以指定颜色。每个单元格中的文本是可选的;geom_text如果您不需要,请注释掉通话。请注意,您可以简单地通过调整绘图窗口的大小来控制绘图(行和列)的大小,或者 - 如果要使用png()- 通过指定widthheight参数输出到文件。

library(ggplot2)
library(reshape)
library(scales)

set.seed(1234)
num.els <- 5
mydf <- data.frame(category1 = rep(LETTERS[1:num.els], 1, each = num.els),
                   category2 = rep(1:num.els, num.els),
                   value = runif(num.els^2, 0, 100))

p <- ggplot(mydf, aes(x = category1,
                      y = category2,
                      fill = value)) +
    geom_tile() +
    geom_text(label = round(mydf$value, 2), size = 4, colour = "black") +
    scale_fill_gradient2(low = "blue", high = "red",
                         limits = c(min(mydf$value), max(mydf$value)),
                         midpoint = median(mydf$value)) +
    scale_x_discrete(expand = c(0,0)) +
    scale_y_reverse() +
    theme(panel.grid.minor = element_blank()) +
    theme(panel.grid.major = element_blank()) +
    theme(axis.ticks = element_blank()) +
    theme(panel.background = element_rect(fill = "transparent"))+
    theme(legend.position = "none") +
    theme()

print(p)

输出:

截屏

并调整大小:

截屏

于 2013-08-15T07:43:02.793 回答
2

假设您有一个数据框,每个网格的每个单元格都有一个“ x ”和“ y ”坐标,每个单元格都有一个变量“ z ”,并且您在 R 中加载了这个名为“ intlgrid ”的数据框:

head(intlgrid)

      x       y        z 

243.742 6783.367 0.0035285

244.242 6783.367 0.0037111

244.742 6783.367 0.0039073

"..."
"so on..."

使用 ggplot2 包,您可以轻松绘制栅格。所以:

install.packages("ggplot2")

一旦安装了ggplot2,你只需调用它

library(ggplot2)

现在代码:

ggplot(intlgrid, aes(x,y, fill = z)) + geom_raster() + coord_equal()

然后你得到你的网格绘制。

于 2013-08-14T17:59:43.967 回答