我已经看到了各种R图形系统中包含晶格和基底的值的热图,如下所示:
我倾向于使用ggplot2
一点,并希望能够制作具有相应单元格值的热图.这是热图和尝试使用geom_text
:
library(reshape2, ggplot2)
dat <- matrix(rnorm(100, 3, 1), ncol=10)
names(dat) <- paste("X", 1:10)
dat2 <- melt(dat, id.var = "X1")
p1 <- ggplot(dat2, aes(as.factor(Var1), Var2, group=Var2)) +
geom_tile(aes(fill = value)) +
scale_fill_gradient(low = "white", high = "red")
p1
#attempt
labs <- c(apply(round(dat[, -2], 1), 2, as.character))
p1 + geom_text(aes(label=labs), size=1)
Run Code Online (Sandbox Code Playgroud)
通常我可以找出要传递的x和y值,但在这种情况下我不知道,因为此信息未存储在数据集中.如何将文字放在热图上?
我有一个数据框,我想geom_tile()
从它生成一个图,但我希望图表不是基于字母顺序排序,而是基于此数据框内的变量.
structure(list(V1 = c("a", "y", "w", "p", "v", "h", "i"),
V2 = c("r", "w", "q", "m", "l", "q", "g"), V3 = c(
"5", "2", "9", "2", "1", "3", "0")), .Names = c("V1", "V2",
"V3"), class = "data.frame", row.names = c(NA, -8L))
Run Code Online (Sandbox Code Playgroud)
我想根据变量对图表进行排序V3
,因为正常的绘图将根据字母V1
和中的顺序对它们进行排序V2
.
怎么做?
我在这里使用一个例子.我的问题是如何在此热图中添加特定的边界框,例如在左上方的四个图块中添加一个红线框?
require(ggplot2)
require(reshape)
require(scales)
mydf <- data.frame(industry = c('all industries','steel','cars'),
'all regions' = c(250,150,100), americas = c(150,90,60),
europe = c(150,60,40), check.names = FALSE)
mydf
mymelt <- melt(mydf, id.var = c('industry'))
mymelt
ggplot(mymelt, aes(x = industry, y = variable, fill = value)) +
geom_tile() + geom_text(aes(fill = mymelt$value, label = mymelt$value))
Run Code Online (Sandbox Code Playgroud)