使用 R 和 ggplot 将 y 轴调整为 2x2 ANOVA 条形图时出现问题 [重复]

2024-03-20

我不是 Pro R 用户,但我已经尝试了多种方法,但找不到问题的解决方案。

我根据此网站创建了 2x2 方差分析的条形图,包括误差线、APA 主题和自定义颜色:https://sakaluk.wordpress.com/2015/08/27/6-make-it-pretty-plotting-2-way-interactions-with-ggplot2/ https://sakaluk.wordpress.com/2015/08/27/6-make-it-pretty-plotting-2-way-interactions-with-ggplot2/它工作得很好,但 y 轴从 0 开始,尽管我的比例范围仅在 1 - 7 之间。我正在尝试调整轴,但出现奇怪的错误。

这就是我所做的:

# see https://sakaluk.wordpress.com/2015/08/27/6-make-it-pretty-plotting-2-way-interactions-with-ggplot2/

interactionMeans(anova.2)
plot(interactionMeans(anova.2))

#using ggplot
install.packages("ggplot2")
library(ggplot2)

# create factors with value 

GIFTSTUDY1DATA$PRICE <- ifelse (Scenario == 3 | Scenario == 4, 1, -1 )
table(GIFTSTUDY1DATA$PRICE)
GIFTSTUDY1DATA$PRICE <- factor(GIFTSTUDY1DATA$PRICE, levels = c(-1, +1),
                                  labels = c("2 expensive", "1 inexpensive"))

GIFTSTUDY1DATA$AFFECT <- ifelse (Scenario == 1 | Scenario == 3, -1, +1 )
table(GIFTSTUDY1DATA$AFFECT)
GIFTSTUDY1DATA$AFFECT <- factor(GIFTSTUDY1DATA$AFFECT,
                                 levels = c(-1,1),
                                 labels = c("poor", "rich"))
# get descriptives

dat2 <- describeBy(EVALUATION,list(GIFTSTUDY1DATA$PRICE,GIFTSTUDY1DATA$AFFECT), 
                  mat=TRUE,digits=2)
dat2

names(dat2)[names(dat2) == 'group1'] = 'Price'
names(dat2)[names(dat2) == 'group2'] = 'Affect'

dat2$se = dat2$sd/sqrt(dat2$n)
# error bars +/- 1 SE
limits = aes(ymax = mean + se, ymin=mean - se)
dodge = position_dodge(width=0.9)

# set layout

apatheme=theme_light()+
  theme(panel.grid.major=element_blank(),
        panel.grid.minor=element_blank(),
        panel.border=element_blank(),
        axis.line=element_line(),
        text=element_text(family='Arial'))

#plot

p=ggplot(dat2, aes(x = Affect, y = mean, fill = Price))+
  geom_bar(stat='identity', position=dodge)+
  geom_errorbar(limits, position=dodge, width=0.15)+
  apatheme+
  ylab('mean gift evaluatoin')+
  scale_fill_manual(values=c("yellowgreen","skyblue4"))
p

这给了我这个数字:

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

现在,如果我尝试使用 ylim 或 scale_y_continous 更改 y 轴

p + ylim(1,7)
p + scale_y_continuous(limits = c(1,7))

我得到了一个图表,其 y 轴符合要求,但没有条形图,并且有一条错误消息指出

删除了包含缺失值的 4 行 (geom_bar)。

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

Using

p + expand_limits(y=c(1,7))
p 

更改 y 轴的上端,但仍然包含零!

我究竟做错了什么?我是否必须在不使用 geom_bar 的情况下从头开始? 提前致谢。


虽然 Magnus Nordmo 的答案很有帮助,但我想补充一下 ggplot2 如此行为的原因。

考虑下面的情节(友情提醒geom_col()是简写geom_bar(stat = "identity")):

df <- data.frame(x = letters[1:7],
                 y = 1:7)

g <- ggplot(df, aes(x, y)) +
  geom_col()
g

您可以清楚地看到这些条形看起来像矩形。检查底层绘图数据,确认条形已参数化为具有 xmin/xmax/ymin/ymax 参数化的矩形:

> layer_data(g)
  x y PANEL group ymin ymax xmin xmax colour   fill size linetype alpha
1 1 1     1     1    0    1 0.55 1.45     NA grey35  0.5        1    NA
2 2 2     1     2    0    2 1.55 2.45     NA grey35  0.5        1    NA
3 3 3     1     3    0    3 2.55 3.45     NA grey35  0.5        1    NA
4 4 4     1     4    0    4 3.55 4.45     NA grey35  0.5        1    NA
5 5 5     1     5    0    5 4.55 5.45     NA grey35  0.5        1    NA
6 6 6     1     6    0    6 5.55 6.45     NA grey35  0.5        1    NA
7 7 7     1     7    0    7 6.55 7.45     NA grey35  0.5        1    NA

现在考虑以下情节:

g2 <- ggplot(df, aes(x, y)) +
  geom_col() +
  scale_y_continuous(limits = c(1, 7))

这是空的,反映了您发布的案例。检查基础数据会产生以下结果:

> layer_data(g2)
  y x PANEL group ymin ymax xmin xmax colour   fill size linetype alpha
1 1 1     1     1   NA    1 0.55 1.45     NA grey35  0.5        1    NA
2 2 2     1     2   NA    2 1.55 2.45     NA grey35  0.5        1    NA
3 3 3     1     3   NA    3 2.55 3.45     NA grey35  0.5        1    NA
4 4 4     1     4   NA    4 3.55 4.45     NA grey35  0.5        1    NA
5 5 5     1     5   NA    5 4.55 5.45     NA grey35  0.5        1    NA
6 6 6     1     6   NA    6 5.55 6.45     NA grey35  0.5        1    NA
7 7 7     1     7   NA    7 6.55 7.45     NA grey35  0.5        1    NA

您可以看到ymin列被替换为NA是。此行为取决于oob(越界)参数scale_y_continuous(),默认为scales::censor()功能。该审查器(替换为NA) 超出轴限制的任何值,其中包括应为的 0ymin柱子。结果,无法绘制矩形。

有两种方法可以解决这个问题。一位候选人确实像马格努斯建议的那样使用ylim论据中的coord_cartesian()功能:

ggplot(df, aes(x, y)) +
  geom_col() +
  coord_cartesian(ylim = c(1, 7))

指定a内的限制coord_*函数导致图形对象被剪裁。当您关闭剪辑时,您可以看到这一点:

ggplot(df, aes(x, y)) +
  geom_col() +
  coord_cartesian(ylim = c(1, 7), clip = "off")

另一种选择是使用替代方案oob论据中的scale_y_continuous, 例如scales::squish:

g3 <- ggplot(df, aes(x, y)) +
  geom_col() +
  scale_y_continuous(limits = c(1, 7), 
                     oob = scales::squish)
g3

其作用是用最近的限制替换限制之外的任何值,例如这ymin0 变为 1:

> layer_data(g3)
  y x PANEL group ymin ymax xmin xmax colour   fill size linetype alpha
1 1 1     1     1    1    1 0.55 1.45     NA grey35  0.5        1    NA
2 2 2     1     2    1    2 1.55 2.45     NA grey35  0.5        1    NA
3 3 3     1     3    1    3 2.55 3.45     NA grey35  0.5        1    NA
4 4 4     1     4    1    4 3.55 4.45     NA grey35  0.5        1    NA
5 5 5     1     5    1    5 4.55 5.45     NA grey35  0.5        1    NA
6 6 6     1     6    1    6 5.55 6.45     NA grey35  0.5        1    NA
7 7 7     1     7    1    7 6.55 7.45     NA grey35  0.5        1    NA

您可以做的另一件事是为oob参数,它只是返回它的输入。由于默认情况下,剪裁处于打开状态,这反映了coord_cartesian(ylim = c(1,7)) case:

ggplot(df, aes(x, y)) +
  geom_col() +
  scale_y_continuous(limits = c(1, 7), 
                     oob = function(x, ...){x})

我希望这能澄清这里发生的事情。

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

使用 R 和 ggplot 将 y 轴调整为 2x2 ANOVA 条形图时出现问题 [重复] 的相关文章

  • 如何按定义的顺序将图像合并到一个文件中

    我有大约 100 张图像 png 我不想手动执行此操作 而是希望将它们按照定义的顺序 基于文件名 并排放置在一个 pdf 中 每行 12 个图像 有人有什么建议吗 我按照下面托马斯告诉我的方法尝试了 它把它们贴在旁边有一个黑边 我怎样才能去
  • 在网格中制作一个矩形图例,并标记行和列

    我有一个 ggplot 我将因子映射到填充和 alpha 如下所示 set seed 47 the data lt data frame value rpois 6 lambda 20 cat1 rep c A B each 3 cat2
  • 在包加载之前如何知道 R 中特定函数属于哪个包?

    例如 我知道许多流行的功能 例如tbl df 我通常不记得它属于哪个包 即data table or dplyr 所以我必须始终记住并加载一个包 但我做不到 tbl df除非我加载了正确的包 在 R 控制台本身加载或安装包之前 有没有办法知
  • 使用选定因子水平的值向 ggplot-barchart 添加水平线

    在这个情节中 df lt data frame factor as factor c rep A 3 rep B 3 Treatment c rep c A B C 2 values runif 6 0 1 ggplot df aes Tr
  • 为什么这个 R ggplot2 代码会显示一个空白的显示设备?

    虽然 SO 通常不用于帮助解决错误 但这个显示了特别简单且特别烦人的行为 如果你是一个ggplot2用户 您可以在 10 秒或更短的时间内重现它 正如这个 GitHub 问题 ggplot gtable 创建空白显示 https githu
  • dplyr:连接中的 NSE (by)

    我很难弄清楚如何使用 dplyr left join 和 NSE 连接两个表 问题是我无法为 by 提供正确的值 我想我现在已经找到了解决方案 但感觉我正在以一种额外复杂的方式来做 因此 如果您知道更简单 更优雅的解决方案 请告诉我 这就是
  • 从数据框中绘制多条平滑线

    我对 R 比较陌生 我正在尝试绘制从 csv 文件加载的数据框 数据由 6 列组成 如下所示 xval col1 col2 col3 col4 col5 第一列 xval 由一系列单调递增的正整数 例如 10 40 60 等 组成 其他列
  • 要在子集中显示的非数字条目的维恩图

    我有以下数据框 SET1 SET2 SET3 par1 par2 par1 par2 par3 par2 par3 par4 par5 我想制作一个维恩图 其中所有这些 parX 元素都显示在各自的子集中 即作为标签 而不仅仅是重叠元素的数
  • 使用数据帧的 R 中的 EWMA 波动性

    我正在尝试从一系列股票每日收益中获取 EWMA 波动性 这些收益来自一个名为base retorno diario Data IBOV ABEV3 AEDU3 ALLL3 BBAS3 BBDC3 BBDC4 1 2000 01 04 0 0
  • 将维基百科中的表格加载到 R 中

    我正在尝试从以下 URL 将最高法院法官表加载到 R 中 https en wikipedia org wiki List of Justices of the Supreme Court of the United States http
  • 如何在Rstudio中快速给几个单词加上引号?

    如何将 MI ID FL 转换为 MI ID FL 而无需键入每个双引号 Hmisc 包有一个函数 Cs 它将评估逗号分隔的文本是否带有引号 Cs MI ID FL becomes MI ID FL
  • StatET调试工具

    我想我只是很密集 但我似乎无法弄清楚如何在 Eclipse 中的 R 中使用调试工具 StatET 插件 有人有关于这个主题的任何提示或教程吗 StatET 2 00 现在对高级 可视化调试提供实验性支持 需要 Eclipse 3 6 或
  • 在 R 上安装 TDA 包时出错:目标“diag.o”的配方失败

    使用 Ubuntu 16 04 和 R 3 4 1 安装 R 包 TDA 时收到错误消息 它似乎与制作 CGAL diag cpp 和 或 diag o 最后的完整错误打印输出 有关 我仔细看了这个 在 R 上安装 TDA 包时出错 htt
  • HTTR GET 新错误:SSL 证书问题:证书已过期

    我已经运行这段代码几个月了 没有出现任何问题 今天我突然开始在我的两台 AWS 服务器上收到以下错误消息 错误 curl curl fetch memory url handle handle SSL证书问题 证书已过期 当尝试运行以下代码
  • 在 Google Colab 上的 R 笔记本中安装 python 库

    我正在尝试在 Google Colab 上的 R 笔记本中安装 python 库 为此我使用 reticulate 包 library reticulate py install pandas 但我得到的结果是这个错误 Error coul
  • 无法编译包“maps”

    当我安装 maps 包时 安装中出现警告 ld warning ignoring file Library Developer CommandLineTools SDKs MacOSX10 14 sdk usr lib libSystem
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • 是否有weighted.median()函数?

    我正在寻找类似形式的东西weighted mean 我通过搜索找到了一些解决方案 这些解决方案写出了整个函数 但希望有一些更用户友好的解决方案 以下软件包都有计算加权中位数的函数 aroma light isotone limma cwhm
  • 安装 2.15 后 ggplot2 中的 alpha 通道不起作用

    更新到 R 2 15 后 ggplot 中的 alpha 通道似乎不再起作用 plot rnorm 100 rnorm 100 bg cc000055 pch 21 工作得很好但是 qplot rnorm 100 rnorm 100 col
  • 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

随机推荐

  • 无法导入 Materialise CSS JS 反应

    大家 早安 我一直在努力让具体化CSS在我的react app上工作 特别是Javascript文件 我尝试了多种方法 但这是我认为我已经走得更远的一种 在我的 landingpage js 文件中 import React Compone
  • 仅隐藏供应商提供的类的弃用警告

    我们有一个应用程序 其中包含一个非常非常古老的类来连接到专有数据库的 API 此代码会生成大量弃用错误 然后将其记录下来 从而污染我们的日志文件 我们只想基本上忽略此供应商提供的类的弃用错误 但我无法找到执行此操作的最佳方法 我见过的选项
  • Bootstrap:两列居中

    我正在尝试使用 Bootstrap 3 1 实现两列居中布局 我读过这个 如何将 Bootstrap div 与 spanX 类居中 https stackoverflow com questions 9554724 how do i ce
  • 使用 Java 从 Keystore 中导入的证书获取公钥

    我已经创建并下载了证书销售队伍 https ap1 salesforce com 按照中的说明PicketLink 文档 https docs jboss org author display PLINK Picketlink as SP
  • 多租户:每个租户都有单独的数据库

    我们正在开发一个多租户应用程序 在架构方面 我们设计了共享中间层用于业务逻辑 每个租户一个数据库用于数据持久化 也就是说 业务层将为每个租户与数据库服务器建立一组连接 连接池 这意味着应用程序为每个租户维护单独的连接池 如果我们预计大约有
  • Android 画图 PorterDuff.Mode.CLEAR

    我正在开发在 Canvas 上绘图的应用程序 类似于 Android SDK 中的 Finger Paint 演示 我的问题是当我使用时PorterDuff Mode CLEAR 当绘图和画布时 如果我尝试擦除某些内容 它工作正常 但如果我
  • 声明参数化类型同义词的实例

    我有很多适用于向量的函数 即具有类型强制长度的列表 我试图让我的类型更容易编写 即而不是编写 foo Fold Integer v Map Integer Integer v v gt 我正在宣布一个新班级NList所以我可以写foo NL
  • Hibernate JPA 与 JTA 和 Glassfish 应用程序服务器似乎没有提交

    我是 hibernate 的新手 我希望它通过 JNDI 使用来自应用程序服务器的数据库连接 奇怪的是 它在数据库中创建我的表 但不保存实体 看来 它并没有承诺 有人在使用 hibernate 时遇到过类似的问题吗 这是一个小测试 serv
  • 如何将参数传递给graphql查询?

    我正在尝试在 Meteor blaze 项目中使用 Apollo graphql 我正在使用来自swydo blaze apollo 使用graphql查询从mongoDB获取数据就可以了 Using this one can get da
  • 使用 React Router V4 以编程方式导航

    我刚刚更换了react router从 v3 到 v4 但我不确定如何以编程方式在成员函数中导航Component 即在handleClick 我想要导航到的功能 path some where处理一些数据后 我曾经这样做过 import
  • 将 android studio 更新为花栗鼠后,导航组件方向生成的类中的构建时间错误

    在导航组件生成的所有 方向 类中将 android studio 更新为花栗鼠版本后 我收到 未解析的参考 R 构建时间错误 R 类未在该类中导入 尽管我可以手动导入它 但类将重新生成 而无需在下一个构建中导入 android gradle
  • Pytorch 分析器显示两个不同网络的卷积平均执行时间不同

    我有两个网络 我正在对它们进行分析以查看哪些操作占用了大部分时间 我注意到CUDA time avg为了aten conv2d不同网络的操作有所不同 这也增加了一个数量级 在我的第一个网络中 它是22us 而对于第二个网络则是3ms 我的第
  • 内蒂不写

    当尝试使用 netty 写入时 写入的数据永远不会在远程端结束 这已通过 Wireshark 确认 我努力了 Directly using writeAndFlush channel writeAndFlush new Packet Man
  • iOS,无法识别的选择器发送到实例?

    我有一个带有导入的自定义操作栏的主屏幕 我在单独的 xib 文件中创建了这个 actionBar 其中包含 m 和 h 文件 我在我的actionBar m中做了一些图形设置viewDidLoad like backgroundColor和
  • Swift 中可选的动态属性

    我正在尝试编译以下 Swift 类 class Waypoint NSObject dynamic var coordinate CLLocationCoordinate2D 但我收到以下编译器错误 属性无法标记为动态 因为其类型无法在 O
  • Excel VBA - 如何仅插入值?

    我正在寻找一种从其他工作簿复制范围 复制范围存在于 11 列和各种行 的方法 并仅在我的主工作簿中现有数据的下方插入 粘贴值 只是粘贴没有问题 但因为我不希望它覆盖最后一个 SUM 行 所以我想插入这些值 据我所知 没有像 InsertSp
  • 为什么在编程中使用常量? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从命令行提供当前目录

    有人可以给我一个提示 如何使用 ruby 从命令行提供当前目录吗 如果我可以有一些系统范围的配置 例如 mime 类型 并简单地从每个目录启动它 那就太好了 最简单的方法 谢谢亚伦 帕特森 https twitter com tenderl
  • Firefox 不显示网站图标

    Locked 有对该问题内容的争议 help locked posts此时正在解决 目前不接受新的答案或互动 I DO知道这个问题仅在这个网站上就被问了至少一千次 但我已经阅读了其中的许多主题 我确实认为自己知识渊博 很少问任何事情 而是更
  • 使用 R 和 ggplot 将 y 轴调整为 2x2 ANOVA 条形图时出现问题 [重复]

    这个问题在这里已经有答案了 我不是 Pro R 用户 但我已经尝试了多种方法 但找不到问题的解决方案 我根据此网站创建了 2x2 方差分析的条形图 包括误差线 APA 主题和自定义颜色 https sakaluk wordpress com