如果您能帮助我重新创建这个显示比例的"交叉表图",我将不胜感激:

enter image description here (source: PEW)

我想方法是使用适当形状的geom_点,但我真的不能再深入了

library(ggplot2)
df <- data.frame (col  = c("A","A","B","B"),
                  row = c("C", "D","C","D"),
                  val = c(4,10,29,31))

ggplot(df, aes(y = row, x = col)) + geom_point(size = df$val, shape = 15)

谢谢你的指点.

推荐答案

我认为geom_rect()可能比geom_point()更合适.为了使这一点起作用,首先需要确定绘图的左/右、顶部/底部是什么.下面,我们通过找到一个类别的符号来实现这一点.

library(ggplot2)
df <- data.frame (col  = c("A","A","B","B"),
                  row = c("C", "D","C","D"),
                  val = c(4,10,29,31))

df <- transform(
  df,
  sign_col = ifelse(col == "A", -1, 1),
  sign_row = ifelse(row == "C", -1, 1)
)

然后你可以将符号与坐标相乘,得到你想要的图.

ggplot(df) +
  geom_rect(
    aes(xmin = 0, xmax = sign_col * val,
        ymin = 0, ymax = sign_row * val,
        fill = factor(val))
  ) +
  geom_text(
    aes(label = val,
        x = 0.5 * sign_col * val,
        y = 0.5 * sign_row * val)
  ) +
  geom_hline(yintercept = 0) +
  geom_vline(xintercept = 0) +
  coord_equal()

reprex package(v2.0.0)于2022-07-01创建

R相关问答推荐

图片中令人惊讶的行为

将带有范围的字符串转换为R中的数字载体

创建重复删除的唯一数据集组合列表

在数据表中呈现数学符号

如果行和列名以相同的开头,将矩阵值设置为0

如何在R中正确对齐放射状图中的文本

r中的stat_difference函数不起作用

如何使用R中的dhrr函数将李克特量表的因子列从长转换为宽?

如何根据组大小应用条件过滤?

在R中使用download. file().奇怪的URL?

在R中无法读入具有Readxl和lApply的数据集

R Read.table函数无法对制表符分隔的数据正常工作

使用带有OR条件的grepl过滤字符串

将Posict转换为数字时的负时间(以秒为单位)

Geom_Hline将不会出现,而它以前出现了

根据列表中项目的名称合并数据框和列表

在R中创建连续的期间

使用不同的定性属性定制主成分分析中点的 colored颜色 和形状

将多个列合并为一个列的有效方法是什么?

R中从因数到数字的转换