在 R 中绘制双变量到多个因子的图

2023-11-30

首先,我还是一个初学者。我正在尝试用 R 解释和绘制堆栈条形图。我已经查看了许多答案,但有些答案并不特定于我的情况,而另一些答案我根本不明白:

  • https://stats.stackexchange.com/questions/31597/graphing-a-probability-curve-for-a-logit-model-with-multiple-predictors
  • https://stats.stackexchange.com/questions/47020/plotting-logistic-regression-interaction-categorical-in-r
  • 在 R 中绘制多元逻辑回归模型的结果

我有一个数据集dvl它有五列:Variant、Region、Time、Person 和 PrecededByPrep。我想对 Variant 与其他四个预测变量进行多变量比较。每列可以有两个可能值之一:

  • 变体:elk or ieder.
  • 地区 =VL or NL.
  • Time: time or no time
  • Person: person or no person
  • 之前的准备:1 or 0

这是逻辑回归

从答案中我收集到图书馆ggplot2可能是最好的绘图库。我已经阅读了它的文档,但我一生都不知道如何绘制它:我怎样才能比较Variant与其他三个因素?

我花了一段时间,但我在 Photoshop 中制作了一些与我想要的类似的东西(虚构的值!)。

graph

深灰色/浅灰色:可能的值Varianty 轴:频率 x 轴:每列,细分为可能的值

我知道制作单独的条形图,堆叠和分组,但基本上我不知道如何堆叠、分组条形图。ggplot2可以使用,但如果可以不使用它,我会更喜欢。

我认为这可以被视为一个示例数据集,尽管我不完全确定。我是 R 初学者,我读到了有关创建示例集的内容。

t <- data.frame(Variant = sample(c("iedere","elke"),size = 50, replace = TRUE),
            Region = sample(c("VL","NL"),size = 50, replace = TRUE),
            PrecededByPrep = sample(c("1","0"),size = 50, replace = TRUE),
            Person = sample(c("person","no person"),size = 50, replace = TRUE),
            Time = sample(c("time","no time"),size = 50, replace = TRUE))

我也希望情节美观。我的想法是:

  • 绘图颜色(即条形图):col=c("paleturquoise3", "palegreen3")
  • 轴标签的粗体字体font.lab=2 but not对于值标签(例如“regionin bold, butVLandNL` 不以粗体显示)
  • #404040作为字体、轴和线条的颜色
  • 轴的标签:x:factors, y: frequency

这是一种从“未制表”数据框开始的可能性,melt它,用它绘制geom_bar in ggplot2(对每组进行计数),使用变量按变量分隔图facet_wrap.

创建玩具数据:

set.seed(123)
df <- data.frame(Variant = sample(c("iedere", "elke"), size = 50, replace = TRUE),
           Region = sample(c("VL", "NL"), size = 50, replace = TRUE),
           PrecededByPrep = sample(c("1", "0"), size = 50, replace = TRUE),
           Person = sample(c("person", "no person"), size = 50, replace = TRUE),
           Time = sample(c("time", "no time"), size = 50, replace = TRUE))

重塑数据:

library(reshape2)
df2 <- melt(df, id.vars = "Variant")

Plot:

library(ggplot2)
ggplot(data = df2, aes(factor(value), fill = Variant)) +
  geom_bar() +
  facet_wrap(~variable, nrow = 1, scales = "free_x") +
  scale_fill_grey(start = 0.5) +
  theme_bw()

enter image description here

有很多定制情节的机会,例如设置因子水平的顺序, 旋转轴标签, 将小平面标签包裹在两条线上(例如,对于较长的变量名称“PrecededByPrep”),或改变面之间的间距.

定制化(以下有问题的更新和OP的评论)

# labeller function used in facet_grid to wrap "PrecededByPrep" on two lines
# see http://www.cookbook-r.com/Graphs/Facets_%28ggplot2%29/#modifying-facet-label-text
my_lab <- function(var, value){
  value <- as.character(value)
    if (var == "variable") { 
      ifelse(value == "PrecededByPrep", "Preceded\nByPrep", value)
    }
}

ggplot(data = df2, aes(factor(value), fill = Variant)) +
  geom_bar() +
  facet_grid(~variable, scales = "free_x", labeller = my_lab) + 
  scale_fill_manual(values = c("paleturquoise3", "palegreen3")) + # manual fill colors
  theme_bw() +
  theme(axis.text = element_text(face = "bold"), # axis tick labels bold 
        axis.text.x = element_text(angle = 45, hjust = 1), # rotate x axis labels
        line = element_line(colour = "gray25"), # line colour gray25 = #404040
        strip.text = element_text(face = "bold")) + # facet labels bold  
  xlab("factors") + # set axis labels
  ylab("frequency")

enter image description here

为每个条添加计数(编辑以下来自OP的评论)。

计算 y 坐标的基本原理可以在本次问答。这里我使用dplyr计算每个芭比娃娃的数量label in geom_text)和他们的y坐标,但这当然可以在base R, plyr or data.table.

# calculate counts (i.e. labels for geom_text) and their y positions.
library(dplyr)
df3 <- df2 %>%
  group_by(variable, value, Variant) %>%
  summarise(n = n()) %>%
  mutate(y = cumsum(n) - (0.5 * n))

# plot
ggplot(data = df2, aes(x = factor(value), fill = Variant)) +
  geom_bar() +
  geom_text(data = df3, aes(y = y, label = n)) +
  facet_grid(~variable, scales = "free_x", labeller = my_lab) + 
  scale_fill_manual(values = c("paleturquoise3", "palegreen3")) + # manual fill colors
  theme_bw() +
  theme(axis.text = element_text(face = "bold"), # axis tick labels bold 
        axis.text.x = element_text(angle = 45, hjust = 1), # rotate x axis labels
        line = element_line(colour = "gray25"), # line colour gray25 = #404040
        strip.text = element_text(face = "bold")) + # facet labels bold  
  xlab("factors") + # set axis labels
  ylab("frequency")

enter image description here

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

在 R 中绘制双变量到多个因子的图 的相关文章

随机推荐

  • 修复内存泄漏

    我最近发现Delphi有一个名为ReportMemoryLeaksOnShutdown的全局变量 当设置为True时 将在应用程序关闭时检测内存泄漏 我通过阅读另一个相关问题的一些评论发现了这些信息 Delphi中检测内存泄漏的最佳工具是什
  • 自动增量不起作用

    我想创建一个表 其中包含 1 个预定义行 因此 我在 onCreate 中添加该行 以下是我的代码 private static final String CREATE CATEGORY TABLE CREATE TABLE CATEGOR
  • 当背景图像应延伸页面的整个长度时,页面右侧会出现空白[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我们的网页背景图像在 iPad iPhone 上的 FireFox 和 iOS 中的 Safari 中出现问题 页面右侧出现空白 背景图像在其他浏览器上可以很好地扩展 但我们很难在这些浏览
  • JavaScript OOP 与 jQuery

    我有对象myObject 里面我有函数execute 里面我有 ajax 其中有complete function xmlHttp 在该函数内部我想调用 setResult 它是在myObject 怎么做 function myObject
  • 文件存在并且是目录,但 listFiles() 返回 null

    的文档File listFiles 建议null仅当调用它的文件不是目录时才会返回 我有以下内容 String dir storage emulated 0 File f new File dir Log v Files f exists
  • jQuery 点击在 iOS 中不起作用?

    我在网站中添加了一些简单的 JavaScript jQuery document click function alert click 并且只有当有人点击实际的锚元素 按钮元素或带有cursor pointer CSS 具体来说 我在 Bo
  • 通过自定义 URL 方案启动 Blackberry 应用程序

    我正在研究 RIM HttpFilterRegistry 部分 任何人都可以解释如何使用 UI 入口点在本机应用程序中嵌入 协议和 packageManager 类 要求 当选择来自 BB 浏览器的 URL 时启动本机第 3 方应用程序 如
  • HTTP1.1 到 HTTP/2:标头怎么样?

    在 HTTP 1 1 中 状态行是 scheme version code reason HTTP 1 1 200 OK 我在 HPACK 规范中看到 scheme 和 status 标头 但是我没有看到任何版本或原因 难道就没有一个吗 在
  • 如何让 jquery 在循环中的每个 ajax 调用之后立即附加输出

    我想附加到一个元素并立即更新它 console log 按预期显示数据 但append 在 for 循环完成之前不执行任何操作 然后立即将其全部写入 索引 html p Page loaded p p Data p div div test
  • Python Beautiful Soup .content 属性

    BeautifulSoup content 有什么作用 我正在努力通过crummy com 的教程 我不太明白 content 的作用 我查看了论坛 但没有看到任何答案 看看下面的代码 from BeautifulSoup import B
  • 在从简单的 spring mvc json 服务输出之前,我得到了一个额外的空 {} json 对象以及 &&

    好的 我有一个基于 spring mvc 的 json Web 服务 这是一个测试应用程序 我在构建基于 spring mvc 的 Restful json 服务时从未见过这样的问题 我的测试服务的输出始终返回空 json 对象 后跟 后跟
  • Apache Tika 如何提取没有页眉和页脚内容的 html 正文

    我希望提取除页眉和页脚之外的 html 的整个正文内容 但是我遇到了异常 org xml sax SAXException 命名空间http www w3 org 1999 xhtml未申报 下面是我如上所述创建的代码at import o
  • 使用 HttpInterceptor 的 Angular 1.5 超时

    All 我正在尝试设置一个全局 httpInterceptor 以便在出现客户端超时 而不是服务器超时 时显示自定义弹出消息 我找到了这篇文章 Angular http 在 超时 配置上设置承诺 并将其转换为 httpInterceptor
  • 分析磁盘访问

    目前我正在开发一个 MFC 应用程序 该应用程序读取和写入磁盘 有时这个应用程序运行得非常快 有时却非常慢 我猜测这是因为涉及磁盘访问 因此我想对其进行分析 这方面有一些疑问 1 目前我正在使用AQTime 分析器来分析应用程序 有人尝试过
  • C++ make_shared 不可用

    虽然我有std tr1 shared ptr
  • 正则表达式:最后一次出现的模式出现在另一个模式之前

    我想采用最后出现在另一个文本模式之前的文本模式 例如我有这样的文字 code 4ab6 7b5 Another lorem ipsum Random commentary code f6ee 304 Lorem ipsum text Dum
  • 在 Spring 中对 @NumberFormat 使用不同的区域设置

    我正在开发一个 Spring 3 项目 我需要格式化Long土耳其货币字段 默认Locale该应用程序是en US 我用的是 NumberFormat注释如下 NumberFormat style NumberFormat Style CU
  • 以方法作为上下文的 KVO 调度程序模式

    我一直在尝试使用看起来像非常聪明的KVO模式它将选择器解析为可以作为上下文传递的方法指针 模式部分的最后一部分给我带来了一些麻烦 void observeValueForKeyPath NSString keyPath ofObject i
  • Git开发-测试-生产分支过程[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我对这个过程很感兴趣 首先我想在我的开发分支 比它应该被推到测试 主 分支并因此生产 对我来说这个过程 初始化提交然后 从 master init 提交创建 prod 分支然后 从 mas
  • 在 R 中绘制双变量到多个因子的图

    首先 我还是一个初学者 我正在尝试用 R 解释和绘制堆栈条形图 我已经查看了许多答案 但有些答案并不特定于我的情况 而另一些答案我根本不明白 https stats stackexchange com questions 31597 gra