r - ggplot2 - 分割超过 2 组的小提琴图

2023-12-14

从哪里继续这个线程离开了。

我想在 ggplot 2 中制作一个分割小提琴图。上面提出的方法仅限于 x 轴上的 2 个类别。

Example:

set.seed(20160229)
my_data = data.frame(
y=c(rnorm(1000), rnorm(1000, 0.5), rnorm(1000, 1), rnorm(1000, 1.5)),
x=c(rep('a', 2000), rep('b', 2000)),
m=c(rep('i', 1000), rep('j', 2000), rep('i', 1000)))

#Get densities
library(dplyr)
pdat <- my_data %>%
group_by(x, m) %>%
do(data.frame(loc = density(.$y)$x,
            dens = density(.$y)$y))

#Flip and offset densities for the groups
pdat$dens <- ifelse(pdat$m == 'i', pdat$dens * -1, pdat$dens)
pdat$dens <- ifelse(pdat$x == 'b', pdat$dens + 1, pdat$dens)
Plot

ggplot(pdat, aes(dens, loc, fill = m, group = interaction(m, x))) + 
geom_polygon() +
  scale_x_continuous(breaks = 0:1, labels = c('a', 'b')) +
  ylab('density') +
  theme_minimal() +
  theme(axis.title.x = element_blank())

And the result

看起来可以在 x 轴上放置两个以上的类别,但我不知道如何去做。


我想出了使用 for 循环按组因子级别定位形状的方法。

 set.seed(20160229)
my_data = data.frame(
y=c(rnorm(1000), rnorm(1000, 0.5), rnorm(1000, 1), rnorm(1000, 1.5), rnorm(1000, 1.25), rnorm(1000, 0.75)),
x=c(rep('a', 2000), rep('b', 2000), rep('c', 2000)),
m=c(rep('i', 1000), rep('j', 1000), rep('i', 1000,rep('j', 1000), rep('i', 1000,rep('j', 1000), rep('i', 1000)))

#Get densities
library(dplyr)
pdat <- my_data %>%
group_by(x, m) %>%
do(data.frame(loc = density(.$y)$x,
            dens = density(.$y)$y))

#Flip and offset densities for the groups
pdat$dens <- ifelse(pdat$m == 'i', pdat$dens * -1, pdat$dens)

#Flip and offset densities for x
    #for(pdat$x){pdat$dens <- (pdat$dens + (as.numeric(as.factor(pdat$x))))}
    for(i in 1:nrow(pdat)){(pdat$dens[i] <- (pdat$dens[i] + as.numeric(as.factor(pdat$x[i]))))}


    #Plot
    library(ggplot2)
    ggplot(pdat, aes(dens, loc, fill = m, group = interaction(m, x))) + 
      geom_polygon() +
      scale_x_continuous(breaks = (1:(as.numeric(length(levels(unique(pdat$x)))))), labels = levels(pdat$x)) +

      #scale_x_continuous(breaks = length(pdat$x), labels=pdat$x)+
      ylab("y") +
      theme_minimal() +
      theme(axis.title.x = element_blank())

https://i.stack.imgur.com/bxfHh.png

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

r - ggplot2 - 分割超过 2 组的小提琴图 的相关文章

随机推荐

  • Highcharts饼图可以有url链接

    我在我的应用程序中使用 Highcharts 饼图 其中饼图的数据是从数据库填充的 我的问题是填充饼图后 如果我单击某个区域 它应该呈现到特定的 php 页面 是否可以 这是我的代码 function open risk level pie
  • Angular2 - API 接收的内容中的动态组件

    我有一个组件 该组件的内容由 API 接收 并且它包含另一个组件 问题是 如何渲染子组件 当我将接收到的内容放入innerHTML 中时 组件标签将被删除 我检查了所有有关使用resolveComponentFactory创建组件的文章 但
  • 移动 JS 应用程序上的 Location.reload()

    在桌面上 您可以使用location reload 它将重新加载页面 重新启动页面上的代码 但是如果我想 重新加载 一个 JavaScript 应用程序怎么办 有办法这样做吗 谢谢 location reload Page reloads
  • Android EditText如何在所有字符的末尾启动光标指针 - 而不是第一行的末尾

    我有使用 EditText 的评论框 它有几行 当用户返回到该框时 如果框中总共有三行 他们总是位于第 1 行的末尾 而不是第 3 行的末尾 我怎样才能解决这个问题 也许有更简单的方法 但一种方法是使用 editText setSelect
  • 奇怪的Rx+CancellationToken问题:有时注册的回调未完成

    我观察到一个奇怪的现象 有时会在我编写的 Rx 查询中发生 其中涉及CancellationToken 两个回调注册到同一个CancellationToken 一个在查询之外 一个是查询的一部分 的意图CancellationToken是发
  • 在 PowerShell 中计时命令的执行

    有没有一种简单的方法可以在 PowerShell 中计时命令的执行时间 例如 Linux 中的 time 命令 我想出了这个 s Get Date do something ps1 e Get Date e s TotalSeconds 但
  • Tkutter 错误:无法在 内部使用几何管理器网格。已经有由包管理的奴隶

    from tkinter import import random import time tk Tk canvas Canvas tk width 1000 height 1000 canvas pack i 0 x1 50 y1 0 c
  • 如何在Python中为列表中的每个字符串创建子列表?

    例如 我有这个列表 word1 organization community 我有一个函数可以从列表中的单词中获取同义词 from nltk corpus import wordnet as wn def getSynonyms word1
  • 同步框架:我可以仅同步表的子集吗?

    与同步框架同步数据的常规代码片段是这样的 LocalDBSyncAgent syncAgent new LocalDBSyncAgent Microsoft Synchronization Data SyncStatistics syncS
  • Django 字符集和编码

    我正在尝试在 Mysql 数据库中存储和查看希腊字符 我想使用 utf8 编码 我使用以下命令更改我的数据库 ALTER DATABASE el CHARACTER SET utf8 COLLATE utf8 general ci 现在 当
  • 如何将 DOM 元素转换为 jQuery 元素?

    我正在使用 document createElement 创建一个元素 现在我如何将它传递给只接受 Jquery 对象的函数 id 我无法使用它 因为该元素尚未在页面中呈现 var elm document createElement di
  • 具有可为空值类型参数的扩展方法解析

    public static class Extension public static void Test this DateTime dt void Main var now DateTime Now Extension Test now
  • AD 计算机对象上的设置 ACL

    我正在尝试Set Acl在 AD 中的计算机对象上 首先我使用以下方法获取 ACL acl Get Acl AD CN Tester1 OU Ou1 OU OU2 OU OU3 DC Contoso DC com Access 这给了我该计
  • jQuery 可选择:如何在第一次加载时选择项目

    我正在使用 jQuery selectable 来选择 net 列表视图中的项目 用户可以选择他想要的项目 并可以通过单击保存按钮来保存它 下次当用户来到页面时 他将能够看到他之前选择的项目 使用 jQuery 可选择插件 用户可以通过单击
  • 是否有必要将 $scope 注入到 angularjs 中的控制器中? [复制]

    这个问题在这里已经有答案了 下面的两个代码片段有什么区别吗 两者都有效 1 myApp controller myAppController scope function scope function body 2 myApp contro
  • 在perl中的多行正则表达式中分割一行正则表达式

    我无法将正则表达式分成多行 我希望我的正则表达式与给定的行匹配 Code l k dfsakd lkaDald 所以我创建了这个有效的正则表达式 my firstRegexpr qr s s Code s code x 但现在我想像这样将它
  • AngularJS 1.2 跨源请求仅支持 HTTP

    有什么方法可以配置 Angular 应用程序以使其可用吗 在使用工厂时 顺便说一句 我使用本地主机作为网络服务器 但我正在向其他服务器 同一网络 发出请求 angular module demoApp factories factory d
  • C中的客户端服务器多个连接

    我试图推理用 C 语言实现的带有套接字的简单服务器如何处理并发客户端 假设一个简单的服务器等待客户端连接 然后读取客户端发送的消息 read 是一个阻塞函数 因此服务器将阻塞 直到客户端写入它 如果我们假设两个客户端同时向服务器写入数据 服
  • VB.NET 中的屏幕截图程序

    我创建了一个捕获桌面屏幕截图的应用程序 它与我在表单中使用的按钮配合得很好 但现在我想使用计时器让这个东西自动工作 但是每当我尝试运行程序时NullReferenceException发生任何人都可以告诉我这里出了什么问题吗 TimerCa
  • r - ggplot2 - 分割超过 2 组的小提琴图

    从哪里继续这个线程离开了 我想在 ggplot 2 中制作一个分割小提琴图 上面提出的方法仅限于 x 轴上的 2 个类别 Example set seed 20160229 my data data frame y c rnorm 1000