问题标签 [gtable]
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 - 如何在双 y 轴 ggplot 上显示图例
我正在尝试使用 ggplot 组成一个双 y 轴图表。首先让我说,我不是在寻找关于这样做是否是好的做法的优点的讨论。我发现它们在查看基于时间的数据以识别 2 个离散变量的趋势时特别有用。在我看来,对此的进一步讨论更适合交叉验证。
Kohske提供了一个很好的例子来说明如何做到这一点,到目前为止我已经使用它,效果很好。然而,我在我的极限中包含两个 y 轴的图例。我在这里和这里也看到了类似的问题,但似乎没有一个解决包含图例的问题。
我有一个使用 ggplot 中的 diamonds 数据集的可复制示例。
数据
图表
问题:有没有人有一些关于如何让图例的第二部分显示的提示?
以下是按 p1、p2、组合 p1&p2 的顺序生成的图表,您会注意到 p2 的图例没有显示在组合图表中。
p1
p2
结合 p1 和 p2
r - 如何使用带有双 y 轴 ggplot 的构面
我一直在尝试从这里扩展我的场景以利用方面(特别是facet_grid()
)。
我已经看过这个例子,但是我似乎无法让它为我的geom_bar()
和geom_point()
组合工作。我试图使用示例中的代码,只是从 更改facet_wrap
为 似乎facet_grid
也使第一层不显示。
在网格和 grobs 方面,我是一个新手,所以如果有人可以就如何让 P1 显示在左 y 轴上而 P2 显示在右 y 轴上提供一些指导,那就太好了。
数据
p1 & p2
尝试组合(基于上面链接的示例) 这在第一个 for 循环中失败,我怀疑 geom_point.points 的硬编码,但是我不知道如何使它适合我的图表(或足够流畅以适合各种图表)
编辑以尝试使其可行facet_wrap
以下代码仍然适用于facet_grid
usingggplot2 2.0.0
r - 在 facet_grid ggplot 上强制 x 轴标签:x 轴标签每行不同
我很高兴在帖子“为 facet_grid 图的所有方面强制启用 X 轴文本”中找到解决我问题的大部分内容。
我想创建一个看起来有点像 OP Drew Steen 的图表,除了我有超过两行的刻面,我想让每行的 x 轴标签不同。
我根据@baptiste 的精彩回答做了一个超级hacky 的解决方案(主要是因为我不熟悉 gtable 包),我想知道:
- 如果有比我在下面写的混乱更优雅的解决方案
- 如何为“Premium”(中间)行插入标签。
这是我改编自@Drew Steen 和@baptiste 的代码,
r - 用 grid 和 gtable 拆解 ggplot
ggplot
我正在努力构建基于对象的双轴图。在巴蒂斯特的建议下,我将问题分解为更小的部分。目前的问题是:
- 如何从 中删除所有数据
grobs
,同时保留轴、轴标签、轴刻度线和网格线?“数据”是指与geom_line()
和相关联的数据geom_points()
。
想要这样做的原因是,在构建双轴绘图的过程中,我遇到了以下问题:一个 grob 的网格线会覆盖另一个 grob 的数据。通过删除数据线和点,不会有覆盖。
让我明确一点:我确实有解决方法,包括向 aes() 添加线型并设置 scale_linetype_manual(values = c("solid", "blank") 或者,将数据“脱离网格”发送,但是我想对一个没有被“修饰”太多以达到手头目的的绘图对象进行后期处理。
下面是一些代码和数字。
在下面的情节中,我希望线条消失!
编辑:按照 baptiste 的建议,我尝试删除数据层。然而,正如 BondedDust 在评论部分指出的那样,这破坏了 ggplot 对象:
从 ggplot 对象中删除数据会破坏它。我在应用程序中使用的一种解决方法是“将数据发送到网格之外”,例如将每个单元格乘以 -999999 并用 切断显示+ scale_y_continuous(limits = c(1, 10))
,但如果可行的话,我想避免这种丑陋的黑客攻击。我希望如果我用 NA 或 NULL 替换每个数据点,关联的 gtable 不会被破坏,所以这就是为什么我正在寻找一种从 g 对象内部而不是 p 对象中删除数据的方法。
在操纵 grobs 之后(而不是直接破解 ggplot 对象),结果grid.draw(g)
将是:
仅供参考,第二个情节是通过以下解决方法获得的。
r - 替换 gtable 中 ggplot 的元素:标签和网格线
我正在学习ggplot
使用gtable
. [这是我问的一个相关问题:用 grid 和 gtable 拆除 ggplot ]
目前的问题是:
- 如何从一个 gtable 中获取各种轴元素并将它们放入另一个 gtable 以替换现有元素?特别是:替换垂直网格线(和相应的刻度线)。
下面是一些代码和数字。
这是p1:
这是p2:
这是 p1 和一些 p2 元素:
g1 是绿色的,g2 是红色的,我想要红色的底轴标签和垂直网格线来代替绿色的。
我已成功识别轴标签和轴标题,但我仍在寻找垂直网格线(以及轴刻度线和轴水平线!)。我想它们在里面panel
,但是如何访问它们并改变它们呢?
在之前的评论中,巴蒂斯特建议names(ggplotGrob(p2)[["grobs"]][[4]][["children"]])
作为一种识别不同元素的方法。这将返回:
但是,我不知道如何从这里拿走它。此外,附加的数字,例如 .843 每次会话都会改变,所以我想找到一种方法来不对这些数字进行硬编码。感谢您的建议!
r - 在 ggplot 中对齐和排列图表
我在 ggplot 中有两个图,在我想对齐的轴上具有相似的范围。
使用:
在哪里size='last'
确保网格与 x 对齐,我得到这样的布局:
对于我要描绘的简单行,顶部图表的垂直范围过大。
我想要一个更符合以下内容的图像:
或者,g1 图表在 g2 图表的轴下方对齐。(一般来说,假设我希望能够选择其中一个,或者甚至将 g1 覆盖在 g2 之上。
(我的原始模型是一个单独的图表,其中 g1 组件简单地设置为 g2 图表中 y=0 的层;但是,图表太杂乱,无法使用该布局阅读,所以我想我应该移动原始的 y=0元素到一个单独的面板(即g1)。
最小的例子:
我希望标签条(g2)相对于散点图整齐定位。g2 条带是原始图表的一部分,作为 at 的一个geom_text()
元素,y=0
但图表在此处过于杂乱,标签也放在那里。
r - ggplot2,geom_bar,在多个绘图中对齐条形大小
我有一组条形图,我试图将它们放入一个图中。它们在多个图中有不同数量的条形图,我看不到将它们与facet_grid
. 相反,我使用gtable
了布局,但这使事情变得复杂。我无法弄清楚如何正确对齐 x 轴上的刻度以及强制相同宽度的条形。
我在这里使用了来自 babtiste 的绝妙技巧来对齐 y 轴的宽度。地块的位置是通过反复试验确定的。如果方面内的图是平衡的,这里建议的答案似乎才有效。仅使用scale_x_discrete(expand = c(0,0))
似乎会影响左上角的情节并使问题变得更糟。
下面是重现问题的代码。请注意条形宽度的差异以及第 1 列中的行之间“2”和“5”的轻微错位。
在真实数据中,每个图中都有多个组。使用 gtable 不是必需的,只要符合我的要求就行。
r - ggplot2: Using gtable to move strip labels to top of panel for facet_grid
I am creating a graphic using facet_grid
to facet a categorical variable on the y-axis. I decided not to use facet_wrap
because I need space = 'free'
and labeller = label_parsed
. My labels are long and I have a legend on the right so I would like to move the labels from the right of the panel to the top of the panel.
Here is an example to show where I'm getting stuck.
Now I would like to move the strip text from the right of each panel to the top of each panel. I can store the grobs for the strip labels and remove them from the plot:
But now I'm stuck when it comes to rbind
-ing the grobs back so the labels go to the top of the panels.
Another possible solution would be to use facet_wrap
and then re-size the panels as discussed in another question, but in that case I would have to manually change the labels on the facets because there is no labeller = label_parsed
for facet_wrap
.
I'd appreciate suggestions on either approach!
Thanks for reading,
Tom
r - 如何将图例高度设置为与绘图区域的高度相同?
我已经安排了两个图:顶部的折线图和下面的热图。
我希望热图图例与热图的绘图区域具有相同的高度,即与 y 轴相同的长度。我知道我可以使用 更改图例的高度和大小theme(legend.key.height = unit(...))
,但是在我找到合适的设置之前,这需要多次试验和错误。
有没有办法指定图例的高度,使其与热图绘图区域的高度完全相同,并在绘制到 pdf 时保留该比率?
我尝试过的代码的可重现示例:
我的实际数据有更多类别,但要点是相同的。 这是使用上面的代码生成的图像,并带有我想要做的注释。
提前致谢!马丁
r - 双 y 轴和 facet_wrap
在如何将转换后的比例放在 ggplot2 的右侧?展示了如何通过操纵 ggplot2 对象并将其与 gtable 合并来在同一个图中添加两个 y 轴。从那里的示例中,我设法将其扩展为与 facet_wrap 一起使用。请参见下面的示例。
然而,有三件事并不完美。
- 天平总是放在最右边。如果它与最后一行的情节联系起来会更好
scales="free_y"
如果所有图上分别有 y 轴(即您输入facet_wrap
),则它不起作用- 如果我将网格线留在(注释掉的线)中,第二个图的网格线出现在第一个图的前面。
如果有解决这些公认的小问题的聪明方法有什么想法吗?