在 R 中用绘图可视化交叉表

Posted

技术标签:

【中文标题】在 R 中用绘图可视化交叉表【英文标题】:visualizing crosstab tables with a plot in R 【发布时间】:2014-01-07 13:01:26 【问题描述】:

我在 excel 中看到了一个绘图,我想知道 R 是否也可以做到。

这张图片本质上是一个交叉表的可视化,将一周中的几天与当天的首选餐点进行比较,并计算属于这些类别的人数。

我已经阅读了一些 R 气泡图,但我还没有看到这样的一个。谁能指点我一个包或一个网站来解释我如何制作这样的情节?

【问题讨论】:

也许my answer here 可以帮助你。 我对如何在 Excel 中制作该图表很感兴趣。有什么线索吗? 【参考方案1】:

只需添加一种利用出色的ggpubr 包的替代方法:

# Load ggpubr package
library(ggpubr)

## Borrowed from Tommy O'Dell's answer
# Set up the vectors                           
days <- c("Mon", "Tues", "Wed", "Thurs", "Fri")
slots <- c("Coffee/Breakfast", "Lunch", "Happy Hour", "Dinner")

# Create the data frame
df <- expand.grid(days, slots)
df$value <- c(1, 1, 1, 1, 2, 1, 1, NA, NA, 1, 4, 4, 7, 4, 1, 5, 6, 14, 5, 1)

## Plot the data (my contribution)
ggballoonplot(
  data = df, 
  x = "Var1", 
  y = "Var2",
  size = "value",
  size.range = c(10, 20), 
  fill = "green",
  show.label = TRUE, 
  rotate.x.text = FALSE, 
  legend = "none"
)

由reprex package (v2.0.0) 于 2021 年 6 月 12 日创建

【讨论】:

【参考方案2】:

ggmosaic package 扩展 ggplot 以提供替代方案。

library(ggplot2)
library(ggmosaic)

# Set up the vectors                           
days <- c("Mon","Tues","Wed","Thurs","Fri")
slots <- c("Coffee/Breakfast","Lunch","Happy Hour","Dinner")

# Create the comporessed data frame
df <- expand.grid(days, slots, stringsAsFactors = TRUE)
df$value <- c(1,1,1,1,2,1,1,0,0,1,4,4,7,4,1,5,6,14,5,1)    
df.expanded <- df[rep(row.names(df), df$value), 1:2]

#Plot the Data
ggplot(data = df.expanded) +
  geom_mosaic(aes(x = product(Var2,Var1), fill = Var2)) + 
  ggsave("mosaic.png")

【讨论】:

【参考方案3】:

使用 Hadley Wickham 的ggplot2

library(ggplot2)                           

# Set up the vectors                           
days <- c("Mon","Tues","Wed","Thurs","Fri")
slots <- c("Coffee/Breakfast","Lunch","Happy Hour","Dinner")

# Create the data frame
df <- expand.grid(days, slots)
df$value <- c(1,1,1,1,2,1,1,NA,NA,1,4,4,7,4,1,5,6,14,5,1)    

#Plot the Data
g <- ggplot(df, aes(Var1, Var2)) + geom_point(aes(size = value), colour = "green") + theme_bw() + xlab("") + ylab("")
g + scale_size_continuous(range=c(10,30)) + geom_text(aes(label = value))

你关心轴线穿过圆圈吗?此外,绿色略有不同,标签文本是黑色而不是白色。

【讨论】:

这样完美,谢谢。只有一个问题,有没有办法改变形状,圆圈的边缘看起来有点“褶皱”。该功能可以使它成为一个光滑的圆圈吗?如果没有,那没关系 使用ggsave,您可以设置每英寸的点数。默认值为 72 dpi,使用 ggsave(file="filename.png", dpi=300) 您可以将 dpi 的值设置为更高的值。这可能会解决您的问题。

以上是关于在 R 中用绘图可视化交叉表的主要内容,如果未能解决你的问题,请参考以下文章

R语言之数据可视化 - R的绘图系统1 - R的三大绘图系统简介

R语言可视化及作图2--低级绘图函数

R语言之数据可视化 - R的绘图颜色

免费资源丨最全的R语言可视化绘图教程

R语言可视化绘图基础知识详解

资料|R语言可视化绘图,用最少的时间快速掌握图表绘制