我有一个功能:
f <- function(x,y){ return (x + y)}
我必须在X和Y aes c(30:200)上绘制2 D(不是3 D)图。因此,我必须将x和y都映射到该函数,并且基于该函数的结果,我必须给点f(xi,yi)>?等等。我将如何实现呢?
我尝试过:
range <- c(30:200)
ys = matrix(nrow = 171,ncol = 171 )
for (i in range){
for (y in range){
ys[i-29,y-29] <- f(i,y) # exemple if f(i,j) < 0.5 color (i,j) red
}
}
df <- data.frame(x= c(30:200), y= c(30:200))
现在x和y轴是正确的,但是由于我不能将ys绑定到y轴,因此我将如何绘制它。使用ys似乎不是实现此目的的正确方法,我该怎么做
寻求帮助
答案 0 :(得分:1)
这里有一个小矩阵的样本。
首先,我将生成矩阵...您可以使用所需的任何数据。
m <- matrix(1:25, nr=5)
m
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 6 11 16 21
# [2,] 2 7 12 17 22
# [3,] 3 8 13 18 23
# [4,] 4 9 14 19 24
# [5,] 5 10 15 20 25
现在,将其转换为ggplot2
首选的“长”格式:
library(dplyr)
library(tidyr)
longm <- cbind(m, x = seq_len(nrow(m))) %>%
as.data.frame() %>%
gather(y, val, -x) %>%
mutate(y = as.integer(gsub("\\D", "", y)))
head(longm)
# x y val
# 1 1 1 1
# 2 2 1 2
# 3 3 1 3
# 4 4 1 4
# 5 5 1 5
# 6 1 2 6
还有一个情节:
library(ggplot2)
ggplot(longm, aes(x, y, fill=val)) + geom_tile()
# or, depending on other factors, otherwise identical
ggplot(longm, aes(x, y)) + geom_tile(aes(fill=val))
(对我来说)值得注意的是,矩阵(m[1,1]
)的左上角值实际上是热图的左下角。可以使用scale_y_reverse()
进行调整。从这里开始,应该主要是美学。