是否可以在不消除数据aggredating的情况下创建一个ggMarginal图?

我有一个数据框,里面有一些点和它们的出现频率,我想用它们的频率来表示点(球)的大小。但我也想使用 ggMarginal 来创建边际图。这段代码在创建边际图时没有考虑到它们的频率。

library(ggplot2)
df <- data.frame("x" = 1:5, "y" = c(5,8,8,12,10), "f" = c(4,5,8,8,5))
p <- ggplot(df, aes(x=x, y=y, size=f)) + geom_point() + theme_bw()
ggExtra::ggMarginal(p, data=df, type = "histogram")

enter image description here

我不想用分类数据创建另一个数据框架。但这将导致正确的边际图。如bellow所呈现的。

# disaggregated data
df2 <- df[ rep(1:nrow(df), df$f), c("x", "y") ]
p <- ggplot(df2, aes(x=x, y=y)) + geom_point() + theme_bw()
ggExtra::ggMarginal(p, data=df2, type = "histogram")

enter image description here

但即使我尝试使用这两个数据框架,结果的边际值还是会出错。

p <- ggplot(df, aes(x=x, y=y, size=f)) + geom_point() + theme_bw()
ggExtra::ggMarginal(p, data=df2, type = "histogram")

enter image description here

  1. 是否可以用分解数据来创建边距?怎么做?
  2. 如果1.是不可能的,那么怎么做呢,因为上面的例子都没有提供所需的图?

解决方案:

它可以用 cowplot 包。

library(tidyverse)
library(cowplot)

df <- data.frame("x" = 1:5, 
                 "y" = c(5,8,8,12,10), 
                 "f" = c(4,5,8,8,5))
df2 <- df[rep(1:nrow(df), df$f), c("x", "y") ]

p <- 
  ggplot(df, aes(x=x, y=y, size=f)) + 
  geom_count() + 
  theme_bw()
xhist <- 
  axis_canvas(p, axis = "x") + 
  geom_histogram(data = df2, aes(x = x), color = 'lightgray')
yhist <-
  axis_canvas(p, axis = "y", coord_flip = TRUE) + 
  geom_histogram(data = df2, aes(x = y), color = 'lightgray') +
  coord_flip()
p %>%
  insert_xaxis_grob(xhist, grid::unit(1, "in"), position = "top") %>%
  insert_yaxis_grob(yhist, grid::unit(1, "in"), position = "right") %>%
  ggdraw()

enter image description here

给TA打赏
共{{data.count}}人
人已打赏
未分类

Spring Maven - 无法生成WSDL。

2022-9-8 22:22:41

未分类

在Laravel控制器中删除url中的参数.

2022-9-8 22:22:43

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索