ggplot有两个变量

时间:2019-08-29 16:45:29

标签: r ggplot2

我有一个功能:

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似乎不是实现此目的的正确方法,我该怎么做

寻求帮助

1 个答案:

答案 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))

sample ggplot heatmap

(对我来说)值得注意的是,矩阵(m[1,1])的左上角值实际上是热图的左下角。可以使用scale_y_reverse()进行调整。从这里开始,应该主要是美学。