R 创建ggplot2网格,将系数中的成对标高作为变量添加到;比较;

R 创建ggplot2网格,将系数中的成对标高作为变量添加到;比较;,r,ggplot2,R,Ggplot2,让我们看看我是否能正确地解释我的目标 我有大量属于不同类别的数据点,由一个因子变量控制。由于通过将所有类别一起绘制,无法观察它们是否具有任何特定结构(例如,特定类别密度较高的区域),即使使用较低的alpha,我也尝试在网格中一次仅显示其中两个类别(加上对角线中的单个类别) 通过以下示例中的极端黑客代码,我成功地实现了我的目标: fact <- factor(c('a', 'b', 'a', 'c', 'b', 'c')) x <- c(1, 2, -1, 3, -4, 0.5) y

让我们看看我是否能正确地解释我的目标

我有大量属于不同类别的数据点,由一个因子变量控制。由于通过将所有类别一起绘制,无法观察它们是否具有任何特定结构(例如,特定类别密度较高的区域),即使使用较低的
alpha
,我也尝试在网格中一次仅显示其中两个类别(加上对角线中的单个类别)

通过以下示例中的极端黑客代码,我成功地实现了我的目标:

fact <- factor(c('a', 'b', 'a', 'c', 'b', 'c'))

x <- c(1, 2, -1, 3, -4, 0.5)
y <- c(3, 1, 0.5, 6, 1, 2)

df <- data.frame(class = fact, fact = fact, x = x, y = y)

fact2 <- unique(df$fact)[
  as.numeric(unique(df$fact)) %x% rep(1, nrow(df))]

df <- do.call("rbind", replicate(length(unique(df$fact)),
                       df, simplify = F))
df$fact2 <- fact2

df2 <- df
df2$fact <- df$fact2
df2$fact2 <- df$fact

df3 <- unique(rbind(df, df2))

ggplot(subset(df3, as.numeric(fact) >= as.numeric(fact2)),
   aes(x=x, y=y)) +
  geom_point(aes(colour = class), size = 4) +
  facet_grid(fact ~ fact2)

fact这里是另一种使用
cowplot
包并制作单独绘图的方法

pl <- apply(expand.grid(levels(df$class), levels(df$class)), 1,
  function (cl) {
    ggplot(subset(df, class %in% cl), aes(x=x, y=y)) + 
      geom_point(aes(colour = class), size = 4) +
      xlim(range(df$x)) + ylim(range(df$y)) +
      scale_color_discrete(limits = levels(df$class), guide = FALSE)
  } )

cowplot::plot_grid(plotlist = pl)

pl这里是另一种使用
cowplot
包并制作单独绘图的方法

pl <- apply(expand.grid(levels(df$class), levels(df$class)), 1,
  function (cl) {
    ggplot(subset(df, class %in% cl), aes(x=x, y=y)) + 
      geom_point(aes(colour = class), size = 4) +
      xlim(range(df$x)) + ylim(range(df$y)) +
      scale_color_discrete(limits = levels(df$class), guide = FALSE)
  } )

cowplot::plot_grid(plotlist = pl)

pl一些事情。1) 您没有真正清楚地表达您的目标,尽管我认为这是通过成对查看坐标来发现数据中的结构(可能值得查看
ggpairs
)。2) 您没有真正表达数据的外观。你实际有多少因子(a,b,c,…),多少维(x,y,…),这些维的取值范围是什么(这里是从-4到6的半整数)。3) 当数据越来越大时,您担心效率低下,但您没有告诉我们数据到底有多大。4) 你说“hacky”,但代码并不是很大或凌乱!谢谢你的回复。我不知道我的具体数据看起来是否真的很重要,因为我希望有一个通用的函数,可以在必要时重复使用,但我会尝试进一步澄清:1。我的主要目标是确定属于一个类别或另一个类别的数据点之间是否存在“边界”。换句话说,试着观察两个指定的类别(即
x
y
)是否能够划分类别。(2)我在因子中总是有10个不同的级别/类别,几个变量大小(84、85、252、797等),但每次我只想将两个“最上面的一个”可视化,它们的值是双倍值,通常在[-8,2](3)之间。当前的数据集每个包含10000个观测值,但当我们通过模拟生成它们时,它们可以随意变大或变小。(4) 尽管代码不是很大,但代码还是非常粗糙,因为我通过膨胀数据集实现了我的目标,只是因为我找不到任何其他方法,但是我非常确定单因素列应该足以控制它。顺便说一句,非常感谢您将我指给
ggpairs
。它可能对“楼梯”形状有用。我会检查一些东西。1) 您没有真正清楚地表达您的目标,尽管我认为这是通过成对查看坐标来发现数据中的结构(可能值得查看
ggpairs
)。2) 您没有真正表达数据的外观。你实际有多少因子(a,b,c,…),多少维(x,y,…),这些维的取值范围是什么(这里是从-4到6的半整数)。3) 当数据越来越大时,您担心效率低下,但您没有告诉我们数据到底有多大。4) 你说“hacky”,但代码并不是很大或凌乱!谢谢你的回复。我不知道我的具体数据看起来是否真的很重要,因为我希望有一个通用的函数,可以在必要时重复使用,但我会尝试进一步澄清:1。我的主要目标是确定属于一个类别或另一个类别的数据点之间是否存在“边界”。换句话说,试着观察两个指定的类别(即
x
y
)是否能够划分类别。(2)我在因子中总是有10个不同的级别/类别,几个变量大小(84、85、252、797等),但每次我只想将两个“最上面的一个”可视化,它们的值是双倍值,通常在[-8,2](3)之间。当前的数据集每个包含10000个观测值,但当我们通过模拟生成它们时,它们可以随意变大或变小。(4) 尽管代码不是很大,但代码还是非常粗糙,因为我通过膨胀数据集实现了我的目标,只是因为我找不到任何其他方法,但是我非常确定单因素列应该足以控制它。顺便说一句,非常感谢您将我指给
ggpairs
。它可能对“楼梯”形状有用。我查一下