问题标签 [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.
r - 如何在 geom_split_violin 中设置不同的宽度值?
众所周知,可以使用geom_split_violin
( Split violin plot with ggplot2 ) 绘制分割小提琴图。
在这里,我想分别为左半小提琴和右半小提琴设置不同的宽度值(例如,0.2 和 1)。这是我的尝试:
希望左半部小提琴比图 1 中的小,右半部小提琴与图 1 中的相同。
r - 构建一个新的 geom_hurricane
我一直打算为已按以下形式整理的数据集创建一个新的 geom:
我首先定义了类,然后定义了实际的 geom 函数,但是,我的输出图变得如此小型化,所以如果你能告诉我比例尺哪里可能出错,我将不胜感激。
和实际的geom函数定义:
所以我继续绘制以下内容:
可在此处找到用于此目的的数据,即 1988 - 2018 年大西洋盆地数据集: http ://rammb.cira.colostate.edu/research/tropical_cyclones/tc_extended_best_track_dataset/
为了您的考虑,我使用以下代码来整理数据:
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 栏c
的500
文本超出了栏的底部。所以在这种情况下,我也想将geom_text()
's更改vjust
为0
, 仅用于 bar c
。
总结一下
尽管有一些解决方案可以根据 y 值vjust
通过简单的ifelse
(请参阅此 SO 解决方案)进行有条件地更改,但我试图弄清楚如何进行调节vjust
,以使其无论 y 刻度上的值如何都可以工作。相反,规则应该是,如果栏的高度低于 size of geom_text()
,则文本位置将移动到顶部。谢谢!
编辑
根据下面与@Paul 的讨论,我想知道是否可以更容易地vjust
确定geom_text()
position 是否覆盖y = 0
,如果是,则更vjust
改为0
.
编辑 2
这个 SO 解决方案(归功于@Paul的发现)似乎与我的要求足够接近。它会动态更改size
ofgeom_text()
以适合条形宽度,并且即使在调整绘图大小时也能正常工作。所以我认为这为我所追求的提供了基础,而不是调整size
我需要调整vjust
,而不是调整它的条宽,我需要调整它的条高。不幸的是,它对于我的理解和类似的东西来说太复杂了ggproto
,所以我不知道如何适应我的情况。
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_layout
and map_data
。
当然,一种选择是计算我的新列两次,一次在内部,一次compute_layout
在内部map_data
,但这将是计算成本的两倍,而且不那么优雅。
似乎setup_params
并且setup_data
适用于这个确切的用例。
什么不起作用❌</h1>
我正在根据这个伟大的小插图创建一个可重复的小例子。
我刚刚做了一个小的修改,尝试使用该函数hello
向数据中添加一列。setup_data
输出:
注意我的hello
专栏是如何可用的,compute_layout
但不是map_data
什么工作✅</h1>
作为一种解决方法,我可以创建一些列并将它们作为parameters
using传递setup_params
。这有点粗俗,因为它们在概念上不是“参数”,它们是数据。但如果一切都失败了——我会采取这种方法
具有以下输出
结果总结
- 当我从“setup_data”修改数据时,我可以在“compute_layout”中访问它✅</li>
- 当我从“setup_data”修改数据时,我无法在“map_data”中访问它❌</li>
- 当我从“setup_params”修改数据时,我可以在“compute_layout”中访问它✅</li>
- 当我从“setup_params”修改数据时,我可以在“map_data”中访问它✅</li>
最后的问题
- 上述结果是预期的,还是我只是想错了事情?
- 为
data
ONCE 计算新列,然后将它们同时用于map_data
AND的理想方法compute_layout
是Facet
ggproto
什么?
提前致谢!
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)
。
如何解决这个问题呢?
r - 尝试将自定义位置调整添加到 ggplot2 中的包时出错
我正在尝试为ggplot2创建位置调整,以明确控制点沿 (x) 轴分布的方式(而不仅仅是添加随机抖动)。我成功地使用了这些示例position_jitter
并position_jitterdodge
创建了适合我的目的的简单变体:
和
这些功能似乎都可以正常工作。现在,我正在尝试将它们添加到内部包中,以便在多个项目中轻松访问它们,但我遇到了文档问题。我已经Depends: ggplot2 (>= 3.0.0)
在DESCRIPTION文件中添加了。
以position_spreaddodge
示例为例,我添加了以下注释:
尝试document()
使用包中的任何一个函数运行时,我收到错误“错误:_inherit
必须是 ggproto 对象”。我无法弄清楚错误试图告诉我什么,这使得无法修复。这显然是我添加的文档的问题,但我不确定我错过了什么。
谢谢!
r - 在自己的“ggproto”对象中访问父级
我想在我自己的对象中访问compute_group()
父方法。ggproto
这是两种不同的工作方法,但不知道是否有“正确”的方法:
self$super()$compute_group(...)
ggproto_parent(<parent>, self)$compute_group(...)
有什么(强烈的)意见吗?
r - 自定义 `geom_` 有两种不同的绘图风格
我的目标是编写一个自定义geom_
方法来计算和绘制,例如置信区间,这些应该绘制为多边形或线条。现在的问题是,在哪里检查应该绘制哪种“样式”?
到目前为止,我已经尝试了三种不同的方法,
- (i) 写两个不同的
geom_
/stat_
用于线和多边形样式的图, - (ii) 编写一个使用自定义的
geom_
/ ,stat_
GeomMethod
- (iii) 写一个
geom_
/stat_
它使用GeomPolygon
orGeomLine
。
在我看来,总结一下
- (i) 或多或少直截了当,但只是绕过了问题,
- (ii) 当您使用
GeomPath$draw_panel()
或GeomPolygon$draw_panel()
依赖额外参数时有效style
。但是在这里我无法default_aes
根据额外的参数进行设置style
。比较这里的答案。 - (iii) 调用时有效,
geom_
但调用失败,因为ggplot2stat_
中的名称匹配失败。请参阅下面的最小示例。
设置方法(iii)的方法:
尝试方法(iii)的方法:
到目前为止,这运作良好。但是,调用时stat_
会出现错误,ggplot2:::check_subclass
因为没有GeomMyConfint
方法。
任何替代方法的解决方案或建议?
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 ):data
draw_key()
size
browser()
draw_key()