通过C中的CGPfunctions :: Plot2WayANOVA与R中的GGplot2更改图中的图例和点形状的大小

克雷茨·吉格斯

我想调整图例的大小,以便可以在图例中看到不同类型的线,还可以更改点的形状,以便每个圆柱组有不同的点形状。

Plot2WayANOVA函数具有用于传递ggplot2参数的参数,但也许仅用于更改主题的组件?另外,有一个保存图的选项,但是它将图另存为png,当我将图分配为对象并打印时,仅显示文本。

library(CGPfunctions)

Plot2WayANOVA(formula = mpg ~ am * cyl, dataframe = mtcars)

更新:运行以下数据时出现错误。

d <- structure(list(Wave = c(1, 2, 3, 4, 3, 1, 2, 3, 4, 1, 2, 3, 4, 
1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 
2, 3, 4, 1, 2, 3, 1, 2, 3, 4, 3, 4, 1, 3, 4, 1, 2, 3, 4, 1, 2, 
3, 4, 1, 3, 4, 1, 2, 3, 4, 1, 4, 1, 1, 2, 3, 1, 2, 3, 4, 1, 2, 
3, 1, 1, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 2, 4, 1, 2, 3, 4, 1, 2, 
3, 4, 1), CigAd = c(1, 0, 4, 1, 15, 8, 4, 1, 2, 36, 17, 14, 16, 
21, 16, 34, 29, 30, 17, 32, 24, 23, 5, 15, 17, 26, 26, 29, 12, 
22, 30, 30, 37, 25, 0, 25, 22, 22, 22, 30, 21, 29, 36, 37, 14, 
23, 0, 0, 0, 0, 0, 0, 0, 0, 17, 15, 34, 0, 0, 0, 13, 15, 24, 
19, 18, 25, 40, 4, 0, 3, 1, 0, 0, 10, 18, 16, 18, 29, 1, 15, 
14, 30, 21, 22, 27, 26, 28, 28, 24, 4, 5, 0, 0, 5, 0, 9, 4, 17, 
16, 26), storetype = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 
2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("1", 
"2", "3"), class = "factor")), row.names = c(NA, 100L), class = "data.frame")

谢谢!

艾伦·卡梅伦

这里的问题Plot2WayANOVA是一个包装函数,ggplot函数试图通过处理创建适当的ggplot以便可视化数据的许多技术方面来简化ANOVA的绘制。尽管这种功能对于学习者或数据的快速可视化来说都是不错的,但它并不能使您以所需的方式自定义绘图。

函数本身不存在执行您要求的所有操作的选项。你可以通过额外的geom呼叫和scale通话以及theme通话,但困难是造型美观的点没有被映射。可以添加一个theme加宽的传说关键,但是当你这样做你会发现,对于errobars行也包含在传说为细实线覆盖了厚厚的图案线条,它看起来凌乱,再不能改变通过功能参数。

因此,您有两种选择:

  1. ggplot直接使用自己构建图:问题在于,将所有相关的模型摘要信息放入标题下方的标题将是一件痛苦的事情,当然会打败Plot2WayANOVA最初的拥有点
  2. 修改由返回的绘图对象Plot2WayANOVA:这样做的问题是,Plot2WayANOVA实际上并没有返回ggplot对象。它仅打印ggplot,然后返回有关分析的漂亮信息大列表。您将需要修改该函数以使其返回ggplot对象。

我将在此处演示如何进行第二种方法。与从头开始构建相比,它所需的代码要少一些,但在技术和难度上也要高一些。

首先,编写一个新版本,Plot2WayANOVA版本返回ggplot而不是summary对象:

f <- CGPfunctions::Plot2WayANOVA
body(f)[[84]] <- quote(return(p))
My_Plot2WayANOVA <- f

现在,我们可以通过执行以下操作获取ggplot对象:

p <- My_Plot2WayANOVA(formula = mpg ~ am * cyl, dataframe = mtcars)

我们将需要修改美学映射,以使其表现出所需的效果,并覆盖,geom_errorbar以确保其具有空白键字形:

p$layers[[3]]$aes_params$shape   <- NULL
p$layers[[3]]$aes_params$colour  <- NULL
p$layers[[3]]$geom_params$colour <- NULL
p$layers[[3]]$geom_params$shape  <- NULL
p$layers[[3]]$mapping            <- aes(color = cyl, fill = cyl)
p$mapping                        <- aes(colour = cyl, shape = cyl, 
                                        fill = cyl, group = cyl,
                                        x = am, y = TheMean)

p$layers[[1]] <- geom_errorbar(aes(ymin = LowerBound, ymax = UpperBound), 
                               size = 1, width = 0.1, key_glyph = "blank")

现在p是一个ggplot对象,您可以根据需要添加自定义比例和主题:

p + scale_shape_manual(values = c(21:23), name = "cyl") +
    theme(legend.key.width = unit(75, "points"))

在此处输入图片说明

是否值得所有这些麻烦值得商bat;如果您真的发现原始样式不可接受,那么从头开始构建图可能会更容易,更安全。


编辑

这是一个将数据添加到问题中的工作示例:

p <- My_Plot2WayANOVA(formula = CigAd ~ Wave * storetype, dataframe = d)

p$layers[[3]]$aes_params$shape   <- NULL
p$layers[[3]]$aes_params$colour  <- NULL
p$layers[[3]]$geom_params$colour <- NULL
p$layers[[3]]$geom_params$shape  <- NULL
p$layers[[3]]$mapping <- aes(color = storetype, fill = storetype)
p$mapping <- aes(colour = storetype, shape = storetype, 
                 fill = storetype, group = storetype,
                 x = Wave, y = TheMean)
p$layers[[1]] <- geom_errorbar(aes(ymin = LowerBound, ymax = UpperBound), 
                               size = 1, width = 0.1, key_glyph = "blank")

p + scale_shape_manual(values = c(21:23), name = "storetype") +
    theme(legend.key.width = unit(75, "points"))

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以在基数R中更改图例大小(无ggplot2)

ggplot2:更改图例中的因子顺序

更改图例在ggplot2中的位置

如何在R(ggplot2)中更改图例标签

将形状、大小和颜色映射到 ggplot2 中的相同图例

难以获得混合线a和点图例,该图例指定了ggplot2中的颜色和形状

在ggplot2中更改图例标题时出现幻影图例?

更改图例标题会中断ggplot2中的图例颜色

更改颜色形状并在R ggplot2对象中编辑图例

在ggplot中更改图例形状的填充

R ggplot更改图例中的颜色和图例序列

在GGplot2中为不同大小和形状的点添加边框

ggplot2中图例的位置和大小

r ggplot2:图例中的字体大小不同

如何在R中的ggplot2中添加图例信息以获得添加到箱线图中的点的含义?

如何在ggplot2中更改图例标签上的科学计数法

如何在ggplot2中更改图例的背景颜色?

是否可以在ggplot2中更改图例元素的颜色?

在ggplot2中,如何更改图例标签但颜色保持不变?

无法更改ggplot2中的图例

更改ggplot2的图例中的标签

ggplot2-在大小图例中显示多个关键点(形状)

如何单独更改图例中的色线大小和形状大小?

如何通过 R 中的数字变量对 ggplot2 散点图中的点和相应标签重新排序?

ggplot2 中的线条和图例

在ggplot2中更改geom_bar的图例键的形状

为ggplot2中的两个变量合并图例中的颜色和形状

更改图例以映射到R ggplot 2中的其他变量

R中的图例问题-如何更改ggplot2中的图例文本