我正在寻找一种本质上是网格的情节。例如,将有 10 列和 50 行。例如,像这样:
每个框(在本例中为 10*50 = 500)都将具有我将通过数据框提供的唯一值。基于唯一值,我将有一个函数为每个框分配颜色。因此,它变成了一个网格来可视化每个框的“范围”。我还需要标记每一列(可能是垂直的,以便所有标签都适合)和行(水平)。
我只是不知道会有什么样的情节,我不知道是否有任何图书馆这样做。我只是在寻找一些帮助来找到可以做到这一点的东西。如果可能的话,我会很感激一些帮助。
我正在寻找一种本质上是网格的情节。例如,将有 10 列和 50 行。例如,像这样:
每个框(在本例中为 10*50 = 500)都将具有我将通过数据框提供的唯一值。基于唯一值,我将有一个函数为每个框分配颜色。因此,它变成了一个网格来可视化每个框的“范围”。我还需要标记每一列(可能是垂直的,以便所有标签都适合)和行(水平)。
我只是不知道会有什么样的情节,我不知道是否有任何图书馆这样做。我只是在寻找一些帮助来找到可以做到这一点的东西。如果可能的话,我会很感激一些帮助。
怎么样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
是面向行的记录。
有关其他选项,请参阅帮助。
查看image
图形包中的rasterImage
功能,或者如果您想要更多控制,请查看该功能。
rect
您还可以使用该函数从头开始构建绘图。
我会这样做,ggplot2
因为它具有高度的灵活性。特别geom_tile
有用。如果你真的想要面板线,你可以注释掉theme(panel.grid.major = element_blank()) +
和 theme(panel.grid.minor = element_blank()) +
线,当然你也可以指定颜色。每个单元格中的文本是可选的;geom_text
如果您不需要,请注释掉通话。请注意,您可以简单地通过调整绘图窗口的大小来控制绘图(行和列)的大小,或者 - 如果要使用png()
- 通过指定width
和height
参数输出到文件。
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)
输出:
并调整大小:
假设您有一个数据框,每个网格的每个单元格都有一个“ 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()
然后你得到你的网格绘制。