创建带有R区域的热图

创建带有R区域的热图,r,heatmap,R,Heatmap,我有以下数据:在一块长方形的土地上(120x50码),有6个(也是长方形的)较小的区域,每个区域都有不同种类的植物。其目的是研究各种植物对鸟类的吸引力。每次一只鸟在陆地上的某个地方坐下,我都有它坐下的确切坐标。 我不在乎鸟坐在什么地方,只在乎它在六个区域中的哪一个。为了显示鸟类对各种植物的相对偏好,我想制作一张热图,让经常光顾的地区变得最黑暗。 因此,我需要将坐标转换为编码鸟类访问的区域,然后创建一个热图,显示每个陆地区域的不同偏好。 (研究比这更复杂,但这是总体思路。) 我在R怎么做?在这样的

我有以下数据:在一块长方形的土地上(120x50码),有6个(也是长方形的)较小的区域,每个区域都有不同种类的植物。其目的是研究各种植物对鸟类的吸引力。每次一只鸟在陆地上的某个地方坐下,我都有它坐下的确切坐标。 我不在乎鸟坐在什么地方,只在乎它在六个区域中的哪一个。为了显示鸟类对各种植物的相对偏好,我想制作一张热图,让经常光顾的地区变得最黑暗。 因此,我需要将坐标转换为编码鸟类访问的区域,然后创建一个热图,显示每个陆地区域的不同偏好。 (研究比这更复杂,但这是总体思路。)


我在R怎么做?在这样的热图中,是否有一个R函数,它取一个坐标向量,并将其旋转?如果没有,您是否有关于如何执行此操作的更多提示?

使用ggplot2。请看一看这些示例。获取2d垃圾箱非常简单。请注意,您同时为x和y传递binwidth:

> df = data.frame(x=c(1,2,4,6,3,2,4,2,1,7,4,4),y=c(2,1,4,2,4,4,1,4,2,3,1,1))
> ggplot(df,aes(x=x, y=y,alpha=0.5)) + geom_bin2d(binwidth=c(2,2))

使用ggplot2。请看一看这些示例。获取2d垃圾箱非常简单。请注意,您同时为x和y传递binwidth:

> df = data.frame(x=c(1,2,4,6,3,2,4,2,1,7,4,4),y=c(2,1,4,2,4,4,1,4,2,3,1,1))
> ggplot(df,aes(x=x, y=y,alpha=0.5)) + geom_bin2d(binwidth=c(2,2))

这不是你想要的答案,但可能会给你一些灵感

# Simulate some data
birdieLandingSimulator <- data.frame(t(sapply(1:100, function(x) c(runif(1, -10,10), runif(1, -10,10)))))

# Assign some coordinates, which ended up not really being used much at all, except for the point colors
assignCoord <- function(x)
  {
  # Assign the four coordinates clockwise: 1, 2, 3, 4
  ifelse(all(x>0), 1, ifelse(!sum(x>0), 3, ifelse(x[1]>0, 2, 4)))
}
birdieLandingSimulator <- cbind(birdieLandingSimulator, Q = apply(birdieLandingSimulator, 1, assignCoord))

# Plot
require(ggplot2)
ggplot(birdieLandingSimulator, aes(x = X1, y = X2)) +
  stat_density2d(geom="tile", aes(fill = 1/..density..), contour = FALSE) +
  geom_point(aes(color = factor(Q))) + theme_classic() +
  theme(axis.title = element_blank(),
        axis.line = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank()) +
  scale_color_discrete(guide = FALSE, h=c(180, 270)) + 
  scale_fill_continuous(name = "Birdie Landing Location")
#模拟一些数据
小鸟着陆模拟器(0),3,ifelse(x[1]>0,2,4)))
}

小鸟着陆模拟器不是你想要的答案,但可能会给你一些灵感

# Simulate some data
birdieLandingSimulator <- data.frame(t(sapply(1:100, function(x) c(runif(1, -10,10), runif(1, -10,10)))))

# Assign some coordinates, which ended up not really being used much at all, except for the point colors
assignCoord <- function(x)
  {
  # Assign the four coordinates clockwise: 1, 2, 3, 4
  ifelse(all(x>0), 1, ifelse(!sum(x>0), 3, ifelse(x[1]>0, 2, 4)))
}
birdieLandingSimulator <- cbind(birdieLandingSimulator, Q = apply(birdieLandingSimulator, 1, assignCoord))

# Plot
require(ggplot2)
ggplot(birdieLandingSimulator, aes(x = X1, y = X2)) +
  stat_density2d(geom="tile", aes(fill = 1/..density..), contour = FALSE) +
  geom_point(aes(color = factor(Q))) + theme_classic() +
  theme(axis.title = element_blank(),
        axis.line = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank()) +
  scale_color_discrete(guide = FALSE, h=c(180, 270)) + 
  scale_fill_continuous(name = "Birdie Landing Location")
#模拟一些数据
小鸟着陆模拟器(0),3,ifelse(x[1]>0,2,4)))
}

BirdierlandingSimulator如果您不想使用ggplot,可以使用
cut
功能将您的数据分离到存储箱中

    # Test data.
    x <- sample(1:120, 100, replace=T)
    y <- sample(1:50, 100, replace=T)

    # Separate the data into bins.
    x <- cut(x, c(0, 40, 80, 120))
    y <- cut(y, c(0, 25, 50))

    # Now plot it, suppressing reordering.
    heatmap(table(y, x), Colv=NA, Rowv=NA)

如果不想使用ggplot,可以使用
cut
功能将数据分隔到存储箱中

    # Test data.
    x <- sample(1:120, 100, replace=T)
    y <- sample(1:50, 100, replace=T)

    # Separate the data into bins.
    x <- cut(x, c(0, 40, 80, 120))
    y <- cut(y, c(0, 25, 50))

    # Now plot it, suppressing reordering.
    heatmap(table(y, x), Colv=NA, Rowv=NA)

这是可行的。唯一的问题是,我需要能够在实际位置绘制区域。“热图”(或ggplot)能做到这一点吗?所有区域均为矩形,但并非所有区域的大小都相同。所以,我想保持它们的实际大小和位置。那能做到吗?据我所知,热图不能做到。也许吧,我不确定。我在BaseR中编辑了另一种(有点笨拙)方式的答案,希望你能有一些想法。这可以奏效。唯一的问题是,我需要能够在实际位置绘制区域。“热图”(或ggplot)能做到这一点吗?所有区域均为矩形,但并非所有区域的大小都相同。所以,我想保持它们的实际大小和位置。那能做到吗?据我所知,热图不能做到。也许吧,我不确定。我在BaseR中编辑了另一种(有点笨拙)方式的答案,希望你能有一些想法。太好了!事实上,这是一个鼓舞人心的例子!事实上,这是一个鼓舞人心的例子。