ggplot2 - geom_tile边框渲染

时间:2015-11-02 01:01:49

标签: r ggplot2

我希望渲染具有不同细胞边界长度的2个网格,以说明如何处理细胞重叠的数量(聚合数据)的差异。

考虑以下ggplot2图:

Two rasters plot

使用以下代码制作:

library("ggplot2")
library("gtools")

big_cell_size = 1
small_cell_size = 0.3
width = 4

make_cell_data <- function(cell_size) {
  n_cells = width / cell_size
  vals = seq(from = cell_size / 2, to = width, by = cell_size)
  perms <- permutations(length(vals),2, v=vals)
  x_vals <- append(perms[,1], vals)
  y_vals <- append(perms[,2], vals)
  data.frame(x = x_vals, y = y_vals)
}

p <- ggplot(data = make_cell_data(big_cell_size), aes(x, y))
p <- p + labs(x="", y="")

p <- p + geom_tile(data = make_cell_data(big_cell_size), alpha=0, color="black", width=1, height=1)
p <- p + geom_tile(data = make_cell_data(small_cell_size), alpha=0, color="darkorange", width=0.3, height=0.3, linetype="35")

p <- p + theme(aspect.ratio=1)
p

我正在使用geom_tile,因为在使用geom_raster时,似乎没有办法让细胞透明。

我的问题:

  • 是否可以在geom_raster上设置alpha?
  • 我用橙色网格的虚线,因为两个网格中的一些线重叠,我想要一种同时显示“两个”的方法。但是,正如您所看到的,不在橙色网格外边框上的所有单元格都具有不规则图案。那是因为渲染每个图块时不考虑那里是否有线;所以线条呈现两次,图案稍微偏移。有办法解决这个问题吗?
  • 我使用虚线的全部原因是因为我找不到一种方法来使一条线(边框)厚于1像素。有没有办法渲染具有一定宽度的线条?
  • 是否有其他视觉设计模式来解决规则出现的几何形状之间重叠的问题?
  • 是否有更简洁的方法来生成一个矩阵,其中包含数字向量的所有排列,包括“自置换”? gtools.permutations不包括那些现在我认为应该是单行的是5行。

1 个答案:

答案 0 :(得分:0)

你有很多问题包含在一起,所以最好在不同的问题上分解它们。就想要编写不同的数字组而言,gtools中有两种方法可以达到你想要的效果。

gtools::combinations(3,2,letters[1:3],repeats=TRUE)

产量

     [,1] [,2]
[1,] "a"  "a" 
[2,] "a"  "b" 
[3,] "a"  "c" 
[4,] "b"  "b" 
[5,] "b"  "c" 
[6,] "c"  "c"

gtools::permutations(3,2,letters[1:3],repeats=TRUE)

产量

[,1] [,2]
 [1,] "a"  "a" 
 [2,] "a"  "b" 
 [3,] "a"  "c" 
 [4,] "b"  "a" 
 [5,] "b"  "b" 
 [6,] "b"  "c" 
 [7,] "c"  "a" 
 [8,] "c"  "b" 
 [9,] "c"  "c"