如何在 ggplot2 中创建 Marimekko/马赛克图

2023-11-23

当 x 和 y 都是分类变量时,Marimekko/Mosaic 图是一个很好的默认图。使用 ggplot 创建这些的最佳方法是什么?

example

我能找到的唯一参考资料是这个 4yo博客文章但这似乎有点过时了。现在有更好或更简单的实现吗? GGally包有一个功能ggally_ratio但这会产生完全不同的东西:

ggally


I did it myself a time ago, using just geom_bar, I turned it into a general function so it should work on any two factors. enter image description here

ggMMplot <- function(var1, var2){
  require(ggplot2)
  levVar1 <- length(levels(var1))
  levVar2 <- length(levels(var2))

  jointTable <- prop.table(table(var1, var2))
  plotData <- as.data.frame(jointTable)
  plotData$marginVar1 <- prop.table(table(var1))
  plotData$var2Height <- plotData$Freq / plotData$marginVar1
  plotData$var1Center <- c(0, cumsum(plotData$marginVar1)[1:levVar1 -1]) +
    plotData$marginVar1 / 2

  ggplot(plotData, aes(var1Center, var2Height)) +
    geom_bar(stat = "identity", aes(width = marginVar1, fill = var2), col = "Black") +
    geom_text(aes(label = as.character(var1), x = var1Center, y = 1.05)) 
  }

ggMMplot(diamonds$cut, diamonds$clarity)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ggplot2 中创建 Marimekko/马赛克图 的相关文章

  • 在 RcppArmadillo 中将列向量乘以数值标量

    我在编译这个简单的程序时遇到一些麻烦c 代码使用Rcpp和RcppArmadillo包裹 采用以下简单示例 将矩阵的每一列乘以数值标量 code lt arma mat out Rcpp as
  • 在 R 的 for 循环中创建动态命名对象并分配动态值

    我正在尝试创建一套动态命名的新对象 例如 temp2015 使用 for 循环 并存储动态值 具体来说 其他对象的名称 例如 Y2015 和 for 循环中使用的值 例如 2015 在动态命名的新对象中 我不确定为什么下面的代码不起作用 Y
  • R,使用具有两种以上可能性的二项式分布

    我知道这可能是基本的 但我似乎有一个心理障碍 假设您想要计算在一个骰子上掷出 4 5 或 6 的概率 在 R 中 这很简单 sum 1 6 1 6 1 6 这给出了 1 2 这是正确答案 然而 我内心深处 可能应该保留的地方 认为我应该能够
  • R在Windows平台Rstudio上打印data.frames中的UTF-8代码

    当数据框中存在UTF 8字符时 将无法正常显示 例如 以下内容是正确的 gt U6731 1 朱 但是当我将其放入数据框中并打印出来时 它是 gt data frame x U6731 x 1
  • data.table 抛出“找不到对象”错误[重复]

    这个问题在这里已经有答案了 我有一个数据表 library data table mydt lt data table index 1 10 当我在全局环境中尝试它时 我可以让它工作 但当我在调试器中或在包测试中使用它时却无法工作 问题是我
  • R:按组,测试一个变量的每个值是否存在于另一个变量中

    我有一个数据框架 结构如下 a lt c 1 1 1 2 2 2 3 3 3 3 4 4 b lt c 1 2 3 1 2 3 1 2 3 4 1 2 c lt c NA NA 2 NA 1 1 NA NA 1 1 NA NA df lt
  • 从数据框中绘制多条平滑线

    我对 R 比较陌生 我正在尝试绘制从 csv 文件加载的数据框 数据由 6 列组成 如下所示 xval col1 col2 col3 col4 col5 第一列 xval 由一系列单调递增的正整数 例如 10 40 60 等 组成 其他列
  • 增加雷达图中长轴标签的空间

    我想创建一个雷达图ggirahExtra ggRadar 问题是我的标签很长并且被剪掉了 我想我可以通过添加在标签和绘图之间创建更多空间margin margin 0 0 2 0 cm to element text in axis tex
  • R中IF函数的使用

    我正在短跑ifR 中的函数 但收到以下警告消息 In if runif 50 0 1 lt 0 69 the condition has length gt 1 and only the first element will be used
  • 使用点阵个性化 R 上显示的 X 轴值

    我收集了大量包含日期 客户端及其 NFS 使用情况的数据 我正在使用lattice R包进行绘图 正如对超级用户的建议 https superuser com questions 523195 plot custom log data on
  • 使用数据帧的 R 中的 EWMA 波动性

    我正在尝试从一系列股票每日收益中获取 EWMA 波动性 这些收益来自一个名为base retorno diario Data IBOV ABEV3 AEDU3 ALLL3 BBAS3 BBDC3 BBDC4 1 2000 01 04 0 0
  • StatET调试工具

    我想我只是很密集 但我似乎无法弄清楚如何在 Eclipse 中的 R 中使用调试工具 StatET 插件 有人有关于这个主题的任何提示或教程吗 StatET 2 00 现在对高级 可视化调试提供实验性支持 需要 Eclipse 3 6 或
  • HTTR GET 新错误:SSL 证书问题:证书已过期

    我已经运行这段代码几个月了 没有出现任何问题 今天我突然开始在我的两台 AWS 服务器上收到以下错误消息 错误 curl curl fetch memory url handle handle SSL证书问题 证书已过期 当尝试运行以下代码
  • 如何将参数从 Excel/VBA 传递到 Rstudio 中的脚本

    我正在尝试使用 Rstudio 从 VBA 打开 R 脚本 同时将参数传递给 R 脚本 然后我可以使用 commandArgs 访问该脚本 该问题与此处描述的问题非常相似 WScript Shell 用于运行路径中包含空格且来自 VBA 的
  • 更改 R 中 ggplot geom_polygon 的颜色方案

    我正在使用地图库和 ggplot 的 geom polygon 创建地图 我只是想将默认的蓝色 红色 紫色配色方案更改为其他颜色 我对 ggplot 非常陌生 所以如果我没有使用正确的数据类型 请原谅 我使用的数据如下所示 gt head
  • R 数据结构的运算效率

    我想知道是否有任何关于操作效率的文档R 特别是那些与数据操作相关的 例如 我认为向数据框添加列是有效的 因为我猜您只是向链接列表添加一个元素 我想添加行会更慢 因为向量保存在数组中C level你必须分配一个新的长度数组n 1并将所有元素复
  • R:改变堆积条形图的颜色

    library ggplot2 df2 lt data frame supp rep c VC OJ each 3 dose rep c D0 5 D1 D2 2 len c 6 8 15 33 4 2 10 29 5 head df2 g
  • R 中的数据框操作 - 将单元格向左移动并删除 NA

    我有一个数据框 其列由随机分布的值和 NA 组成 如下所示 a lt c S E NA S NA b lt c A NA M G K c lt c I NA NA NA L meh lt dataframe a b c 1 2 3 4 5
  • 使用“assign()”为列表项分配值

    首先了解一些背景 我写了一个中缀函数 本质上取代了这个习惯用法 x length x 1 lt y 或者简单地说x lt append x y 对于向量 这里是 lt function x y xcall lt substitute x x
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d

随机推荐

  • 从 Angular 2 发送电子邮件

    如何从 Angular 2 应用程序发送电子邮件 我在 firebase 上托管一个 Angular 2 应用程序 我想通过电子邮件发送联系表格 理想情况下 我的解决方案将使用 Nodejs 但我愿意使用任何能够正确完成工作的东西 以下是我
  • 使用“for”循环迭代字典

    d x 1 y 2 z 3 for key in d print key corresponds to d key Python 如何识别它只需要读取key从字典里 是key一个特殊的关键字 或者只是一个变量 key只是一个变量名 for
  • html 标签上的 Jsoup 属性删除

    我有一个问题 我想过滤某些可能包含 html 的文本 我使用 jsoup 将标签列入白名单并清理标签 效果非常好 我唯一的问题是某些标签可以包含属性 主要是样式或类 但也可能有不同的属性 名称 目标等 在清理时这不是问题 因为它们被很好地剥
  • C#:获取斯堪的纳维亚语言的字母?

    有没有办法获取语言中的字母 我想做分页 我想显示例如字母表的最后 7 个字母 对于荷兰语字母表 t z 是最后 7 个字母 但对于瑞典语字母表 它是 w 即 w x y z 当我将其作为输入时 对于 正常 a z 字母表 我可以生成 使用
  • C、C++ 或 Fortran 中的多元正态 cdf [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有开源软件可以计算 C C 或 Fortran 中高斯分布的多变量 维度大于 3 不是二变量或三变量 数值 cdf 我相信 IMSL 能做到 h
  • Python (Flask) 为 Angular 项目的 index.html 文件提供服务

    有谁知道如何使用 Flask 提供 Angular 单页应用程序 我在提供默认路由 时遇到问题 该路由应该加载index html 和相关组件 这是我的烧瓶功能 app route def hello world return send f
  • 旋转自定义 UITableViewCell

    我有一个自定义 UITableViewCell 其中包含多个 UIButton 每个按钮的框架位置都相对于单元格宽度 我设置了 autoresizingMask UIViewAutoresizingFlexibleWidth 这样当应用程序
  • 将矩阵 R 中的所有元素相加

    我正在尝试添加矩阵中的所有元素 这是我的矩阵的示例 实际矩阵更大 m matrix c 528 479 538 603 nrow 2 ncol 2 m A B male 528 538 female 479 603 我正在尝试这样做 sum
  • React-native 中“不存在捆绑包 URL”是什么意思?

    当我运行react native项目时 出现错误no bundle URL present 但我不知道自己犯了什么错误 我很困惑 解决错误No bundle URL present by 在项目根目录中运行以下命令来删除 iOS 构建目录
  • 允许在运行时不动态分配数组大小吗? [复制]

    这个问题在这里已经有答案了 我已经使用 C 几年了 今天我看到了一些代码 但这怎么可能是完全合法的呢 int main int argc char argv size t size cin gt gt size int array size
  • 如何使用Java获取上传到Amazon S3的文件的进度状态

    我正在使用 Java 将多个文件上传到 Amazon S3 我使用的代码如下 MultipartHttpServletRequest multipartRequest MultipartHttpServletRequest request
  • R:使用省略号参数 (...)

    我想创建一个包装函数来替换一些默认参数 这是我正在努力解决的问题的核心 Error in localWindow xlim ylim log asp formal argument cex matched by multiple actua
  • 在 ClientWebSocket 中设置“User-Agent”HTTP 标头

    我需要在 a 中设置 User Agent HTTP 标头ClientWebSocket对象 但这是不可能的 虽然有一个ClientWebSocket SetRequestHeader header value 如果我尝试设置该标头 该方法
  • 如何将 requestdispatcher 转发到远程 URL

    我有一个 HTML 页面http www mywebapp com sample html这是从远程服务器使用的 我正在将 HTML URL 作为隐藏表单在同一 HTML 表单中传递
  • 将 pandas DataFrame 写入 Excel,针对不同的列使用不同的格式

    我正在尝试写一个熊猫DataFrame to an xlsx文件 其中不同的数字列将具有不同的格式 例如 有些仅显示两位小数 有些不显示 有些将格式化为带有 符号的百分比 等等 我注意到DataFrame to html has a for
  • 更改 PyPI 上包名称的大小写

    我最近将一个包上传到 PyPI 名称为混合大小写字母 QualysAPI 回想起来 我认为包名称最好全部小写PEP 8 我有办法改变它吗 当我尝试在 Pypi 上手动编辑包名称时 会发生以下情况 禁止 包名称与现有包 QualysAPI 冲
  • Promise.then.then 和 Promise.then; 之间有区别吗?承诺.然后[重复]

    这个问题在这里已经有答案了 我想知道以下两者有区别吗 aPromiseObj then fn1 then fn2 catch fn3 aPromiseObj then fn1 aPromiseObj then fn2 aPromiseObj
  • 如何初始化一系列不可移动、不可复制的对象?

    假设我有一个既不可移动也不可复制的类型 struct foo explicit foo size t foo foo foo const delete foo foo delete foo operator foo const delete
  • Java 8 添加没有时间段的天数

    这里是 Java 8 我正在尝试采取当前Date 现在 添加一天 并获得新的Date代表明天的实例 没有时间成分 只有年 月和日 我最好的尝试 Calendar calendar Calendar getInstance calendar
  • 如何在 ggplot2 中创建 Marimekko/马赛克图

    当 x 和 y 都是分类变量时 Marimekko Mosaic 图是一个很好的默认图 使用 ggplot 创建这些的最佳方法是什么 我能找到的唯一参考资料是这个 4yo博客文章但这似乎有点过时了 现在有更好或更简单的实现吗 GGally包