问题标签 [ggproto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
156 浏览

r - 如何在 geom_split_violin 中设置不同的宽度值?

众所周知,可以使用geom_split_violin( Split violin plot with ggplot2 ) 绘制分割小提琴图。

图1

在这里,我想分别为左半小提琴和右半小提琴设置不同的宽度值(例如,0.2 和 1)。这是我的尝试:

图2

希望左半部小提琴比图 1 中的小,右半部小提琴与图 1 中的相同。

0 投票
1 回答
93 浏览

r - 构建一个新的 geom_hurricane

在此处输入图像描述我一直打算为已按以下形式整理的数据集创建一个新的 geom:

我首先定义了类,然后定义了实际的 geom 函数,但是,我的输出图变得如此小型化,所以如果你能告诉我比例尺哪里可能出错,我将不胜感激。

和实际的geom函数定义:

所以我继续绘制以下内容:

可在此处找到用于此目的的数据,即 1988 - 2018 年大西洋盆地数据集: http ://rammb.cira.colostate.edu/research/tropical_cyclones/tc_extended_best_track_dataset/

为了您的考虑,我使用以下代码来整理数据:

0 投票
4 回答
876 浏览

r - ggplot2:当低条使文本超过条的底部时,如何有条件地更改 geom_text 的 vjust

在绘制条形图时,我经常给条形添加标签以表示每个条形的 y 值。但是,当栏变得太低时,我会遇到麻烦,使标签不可读或简直丑陋。

例子

reprex 包(v0.3.0)
创建于 2021-01-25 查看 栏,AB-我们可以看到0.01文本超出栏的高度(在栏的底部)。在这种情况下,我想将 的更改vjust为。geom_text()0


另一个具有不同 y 比例的示例

在这里,我使用与size = 7上面相同的方法geom_text()

reprex 包(v0.3.0)
于 2021 年 1 月 25 日创建在 这里,我们看到 for 栏c500文本超出了栏的底部。所以在这种情况下,我也想将geom_text()'s更改vjust0, 仅用于 bar c


总结一下

尽管有一些解决方案可以根据 y 值vjust通过简单的ifelse(请参阅此 SO 解决方案)进行有条件地更改,但我试图弄清楚如何进行调节vjust,以使其无论 y 刻度上的值如何都可以工作。相反,规则应该是,如果栏的高度低于 size of geom_text(),则文本位置将移动到顶部。谢谢!


编辑


根据下面与@Paul 的讨论,我想知道是否可以更容易地vjust确定geom_text()position 是否覆盖y = 0,如果是,则更vjust改为0.


编辑 2


这个 SO 解决方案(归功于@Paul的发现)似乎与我的要求足够接近。它会动态更改sizeofgeom_text()以适合条形宽度,并且即使在调整绘图大小时也能正常工作。所以我认为这为我所追求的提供了基础,而不是调整size我需要调整vjust,而不是调整它的条宽,我需要调整它的条高。不幸的是,它对于我的理解和类似的东西来说太复杂了ggproto,所以我不知道如何适应我的情况。

0 投票
2 回答
171 浏览

r - ggplot 扩展函数在散点图中绘制叠加均值

我正在尝试创建一个扩展 ggplot2 的自定义函数。该函数的目标是将平均值与水平和垂直标准误差叠加。下面的代码完成了整个事情。

理想情况下,它只需要一个函数geom_scattermeans()来完成整个事情。但我不确定美学是如何geomggplot().

此外,我在制作一个接收列名作为参数的函数并使其与ddply(). 在此处输入图像描述

0 投票
1 回答
50 浏览

r - 我可以从“map_data”访问“setup_data”的结果吗?(适用于“compute_layout”,但不适用于 ggplot2 ggproto 中的“map_data”)

我可以从 ggpplot2 ggproto 中的“map_data”访问“setup_data”的结果吗?

(适用于“compute_layout”但不适用于“map_data”)

嗨伙计。我正在开发一个 ggplot2 扩展,它将实现一种新的分面方法。

我不想深入了解算法的本质,但我只想说我需要首先为 input 的每一行计算一些新列,data然后才能执行compute_layoutand map_data

当然,一种选择是计算我的新列两次,一次在内部,一次compute_layout在内部map_data,但这将是计算成本的两倍,而且不那么优雅。

似乎setup_params并且setup_data适用于这个确切的用例。

什么不起作用❌</h1>

我正在根据这个伟大的小插图创建一个可重复的小例子。

我刚刚做了一个小的修改,尝试使用该函数hello向数据中添加一列。setup_data

输出:

注意我的hello专栏如何可用的,compute_layout但不是map_data

什么工作✅</h1>

作为一种解决方法,我可以创建一些列并将它们作为parametersusing传递setup_params。这有点粗俗,因为它们在概念上不是“参数”,它们是数据。但如果一切都失败了——我会采取这种方法

具有以下输出

结果总结

  • 当我从“setup_data”修改数据时,我可以在“compute_layout”中访问它✅</li>
  • 当我从“setup_data”修改数据时,我无法在“map_data”中访问它❌</li>
  • 当我从“setup_params”修改数据时,我可以在“compute_layout”中访问它✅</li>
  • 当我从“setup_params”修改数据时,我可以在“map_data”中访问它✅</li>

最后的问题

  • 上述结果是预期的,还是我只是想错了事情?
  • dataONCE 计算新列,然后将它们同时用于map_dataAND的理想方法compute_layoutFacet ggproto什么?

提前致谢!

0 投票
0 回答
38 浏览

r - 无法将 scale_x_log10() 应用于我自己的 geom:它错误地出现在绘图上

我试图了解如何ggproto编写自己的 geoms。

我写了geom_myerrorbarh(类似于geom_errorbarh,但只有x, y,xwidth参数)。下图显示一切都在线性比例下正常工作。但是,如果您使用 log10 比例,它与geom_errorbarh不同。

我注意到在使用scale_x_log10()时,x=log10(x)首先转换,然后xmin=x-xwidth; xmax=x+xwidth(参见 setup_data 参数)。但它应该是xmin=log10(x-width); xmax=log10(x+xwidth)

如何解决这个问题呢?

阴谋

0 投票
0 回答
40 浏览

r - 尝试将自定义位置调整添加到 ggplot2 中的包时出错

我正在尝试为ggplot2创建位置调整,以明确控制点沿 (x) 轴分布的方式(而不仅仅是添加随机抖动)。我成功地使用了这些示例position_jitterposition_jitterdodge创建了适合我的目的的简单变体:

这些功能似乎都可以正常工作。现在,我正在尝试将它们添加到内部包中,以便在多个项目中轻松访问它们,但我遇到了文档问题。我已经Depends: ggplot2 (>= 3.0.0)在DESCRIPTION文件中添加了。

position_spreaddodge示例为例,我添加了以下注释:

尝试document()使用包中的任何一个函数运行时,我收到错误“错误:_inherit必须是 ggproto 对象”。我无法弄清楚错误试图告诉我什么,这使得无法修复。这显然是我添加的文档的问题,但我不确定我错过了什么。

谢谢!

0 投票
1 回答
31 浏览

r - 在自己的“ggproto”对象中访问父级

我想在我自己的对象中访问compute_group()父方法。ggproto这是两种不同的工作方法,但不知道是否有“正确”的方法:

  1. self$super()$compute_group(...)
  2. ggproto_parent(<parent>, self)$compute_group(...)

有什么(强烈的)意见吗?

0 投票
2 回答
66 浏览

r - 自定义 `geom_` 有两种不同的绘图风格

我的目标是编写一个自定义geom_方法来计算和绘制,例如置信区间,这些应该绘制为多边形或线条。现在的问题是,在哪里检查应该绘制哪种“样式”?

到目前为止,我已经尝试了三种不同的方法,

  • (i) 写两个不同的geom_/stat_用于线和多边形样式的图,
  • (ii) 编写一个使用自定义的geom_/ ,stat_GeomMethod
  • (iii) 写一个geom_/stat_它使用GeomPolygonor GeomLine

在我看来,总结一下

  • (i) 或多或少直截了当,但只是绕过了问题,
  • (ii) 当您使用GeomPath$draw_panel()GeomPolygon$draw_panel()依赖额外参数时有效style。但是在这里我无法default_aes根据额外的参数进行设置style比较这里的答案。
  • (iii) 调用时有效,geom_但调用失败,因为ggplot2stat_中的名称匹配失败。请参阅下面的最小示例。

设置方法(iii)的方法:

尝试方法(iii)的方法:

到目前为止,这运作良好。但是,调用时stat_会出现错误,ggplot2:::check_subclass因为没有GeomMyConfint方法。

任何替代方法的解决方案或建议?

0 投票
0 回答
48 浏览

r - 根据自己的`draw_panel()`为新的`ggproto`适配`draw_key()`

基于Master Software Development in R中的示例,我编写了一个新的,根据数据点的数量进行geom_my_point()调整。alpha

这工作正常,但如果明确设置了 alpha,则标签的 alpha 值不正确。

这里是数字的代码:

在此处输入图像描述

这里的代码geom_*()

编辑:

根据@teunbrand 的评论,情节qq2 的问题可以通过对draw_key()函数的以下改编来解决:

但这仍然不能解决图 qq3 的问题 - 所以根本问题是为什么函数的参数alpha没有正确表示。还比较下图 qq4,其中正确显示在图例中(设置w/i ):datadraw_key()sizebrowser()draw_key()

在此处输入图像描述