- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习使用 gtable
操作 ggplot
对象。 [这是我问的一个相关问题:dismantling a ggplot with grid and gtable ]
目前的问题是:
下面是一些代码和数字。
# Data
df <- structure(list(Year = c(1950, 2013, 1950, 2013), Country = structure(c(1L,
1L, 2L, 2L), .Label = c("France", "United States"), class = "factor"),
Category = c("Hourly minimum wage", "Hourly minimum wage",
"Hourly minimum wage", "Hourly minimum wage"), value = c(2.14,
9.43, 3.84, 7.25), variable = c("France (2013 euros)",
"France (2013 euros)", "United States (2013 dollars)", "United States (2013 dollars)"
), Unit = c("2013 euros", "2013 euros", "2013 dollars", "2013 dollars"
)), .Names = c("Year", "Country", "Category", "value", "variable",
"Unit"), row.names = c(NA, 4L), class = "data.frame")
# Plot data with ggplot
library(ggplot2)
p1 <- ggplot(data = df, aes(x = Year, y = value, group = variable, colour = variable, shape = variable)) +
geom_line(size = 2, show_guide = FALSE) +
geom_point(size = 4, show_guide = FALSE) +
theme(panel.grid.major.x = element_line(size = 1, colour = "darkgreen"),
panel.grid.minor.x = element_line(size = 1, colour = "darkgreen", linetype = "dotted")) +
theme(text = element_text(size = 20, colour = "darkgreen")) +
theme(axis.text = element_text(size = 20, colour = "darkgreen"))
这是 p1:
p2 <- ggplot(data = df, aes(x = Year, y = value, group = variable, colour = variable, shape = variable)) +
geom_line(size = 2, show_guide = FALSE) +
geom_point(size = 4, show_guide = FALSE) +
theme(panel.grid.major.x = element_line(size = 1, colour = "darkred"),
panel.grid.minor.x = element_line(size = 1, colour = "darkred", linetype = "dotted")) +
theme(text = element_text(size = 20, colour = "darkred")) +
theme(axis.text = element_text(size = 20, colour = "darkred"))
这是p2:
# replace the bottom axis of p1 with that of p2
library(gtable)
g1 <- ggplot_gtable(ggplot_build(p1))
g2 <- ggplot_gtable(ggplot_build(p2))
# function to remove selected elements from gtables, keeping widths
gtable_grob_remove <- function (g, what = "guide-box") {
require(gtable)
matches <- c(grepl(pattern = what, g$layout$name))
g$layout <- g$layout[!matches, , drop = FALSE]
g$grobs <- g$grobs[!matches]
return(g)
}
# replace "axis-b"
g <- g1
pos <- c(subset(g$layout, name == "axis-b", se = t:r))
g <- gtable_grob_remove(g, what = "axis-b")
g <- gtable_add_grob(g, g2$grobs[[which(g2$layout$name == "axis-b")]],
pos$t, pos$l, pos$b, pos$r, , name = "axis-b")
# replace "xlab"
pos <- c(subset(g$layout, name == "xlab", se = t:r))
g <- gtable_grob_remove(g, what = "xlab")
g <- gtable_add_grob(g, g2$grobs[[which(g2$layout$name == "xlab")]],
pos$t, pos$l, pos$b, pos$r, , name = "xlab")
grid.newpage()
grid.draw(g)
这是带有一些 p2 元素的 p1:
g1 是绿色的,g2 是红色的,我想要红色底轴标签和垂直网格线替换绿色的。
我已成功识别轴标签和轴标题,但我仍在寻找垂直网格线(以及轴刻度线和轴水平线!)。我想它们在 panel
中,但如何访问它们并更改它们?
在之前的评论中,baptiste 建议使用 names(ggplotGrob(p2)[["grobs"]][[4]][["children"]])
作为识别不同元素的方法.这将返回:
names(ggplotGrob(p2)[["grobs"]][[4]][["children"]])
[1] "grill.gTree.843" "GRID.polyline.828"
[3] "geom_point.points.830" "panel.border.zeroGrob.831"
但是,我不知道如何从这里获取它。此外,附加的数字,例如.843 随每个 session 而变化,所以我想找到一种不对这些数字进行硬编码的方法。感谢您的建议!
最佳答案
根据另一个答案,考虑这个,
# locate the children
grill1 <- grepl("grill",
names(g1[["grobs"]][[4]][["children"]]))
grill2 <- grepl("grill",
names(g2[["grobs"]][[4]][["children"]]))
# swap the kids, the parents won't notice
g1[["grobs"]][[4]][["children"]][grill1] <-
g2[["grobs"]][[4]][["children"]][grill2]
grid.newpage()
grid.draw(g1)
关于替换 gtable : labels and gridlines 中 ggplot 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27754638/
我正在尝试生成 ggplot 的 png 文件具有透明背景的对象。当我直接使用 ggplot 对象时 panel.background=element_rect(fill = "transparent
来自 https://stackoverflow.com/a/13295880我学会了如何用对齐的绘图区域排列两个绘图。 我的问题是:我怎样才能得到一个排列好的图的对象? 例子: require(gg
我遇到以下问题: library(gWidgets) options(guiToolkit = "RGtk2") aa <- c(1,2,3) bb <- c(4,5,6) cc <- cbind(a
我一直在尝试在 gtable 单元格中指定 rasterGrob 的绝对位置,但没有成功。我希望能够使图像的范围与 y 轴上的值对齐。该脚本将钻芯图像与 ggplot2 方面绘制的多传感器数据对齐。例
我一直在尝试在 gtable 单元格中指定 rasterGrob 的绝对位置,但没有成功。我希望能够使图像的范围与 y 轴上的值对齐。该脚本将钻芯图像与 ggplot2 方面绘制的多传感器数据对齐。例
以下代码曾经有效但不再有效。有人知道发生了什么吗?它必须是底层 gtable 代码中的一些更改。 require(cowplot) # for plot_grid() require(grid) #
我使用 ggplot2 创建了两个图,我想使用 gtable 同时显示它们。我有两个问题。首先是我希望面板大小在两个图中匹配。我已经使用 gtable 完成了这项工作。第二个问题是我希望第一个图的宽度
我正在尝试制作这样的图形: Optimal/efficient plotting of survival/regression analysis results hier 是我的示例代码: libra
我正在使用 gganimate 制作 gif,我想对绘图格式进行一些调整,这只能通过将 ggplot 对象转换为一个 gtable。例如,我想更改绘图标题的位置,使其始终出现在绘图的最左角。 下面是情
我想用 R 绘制一个看起来像用 Mac 的 Numbers 制作的示例的图。我正在为情节和图例框之间的空间而苦苦挣扎。这是我想要实现的示例: 在一些用户的帮助下(请参阅帖子末尾以供引用)我已经非常接近
我正在使用 R 中的 ggplot 为 DC 创建 GIS map 。我正在尝试自定义我的图例栏和标签。我可以使用 gtable_filter 移动图例键,但不能移动标签。我想像其他标签一样将最后一个
我正在努力构建基于 ggplot 对象的双轴图。根据巴蒂斯特的建议,我已将问题分解为更小的部分。目前的问题是: 如何从grobs中删除所有数据,同时保留轴、轴标签、轴刻度线和网格线?我的意思是与 ge
我正在学习使用 gtable 操作 ggplot 对象。 [这是我问的一个相关问题:dismantling a ggplot with grid and gtable ] 目前的问题是: 如何从一个
我有正在使用 ggplot 的 facet_grid 绘制的数据: 我的数据: species <- c("spcies1","species2") conditions <- c("cond1","
我试图删除两个 ggplot 上的 y 轴,这两个 ggplot 位于带有第三个 ggplot 的 gtable 中。我想显示 gtable 中最左侧图表的 y 轴,并从后续图表中完全删除 y 轴;但
我在 ggplot2 中有一个三面板显示。这些面板一个接一个地垂直排列。 我正在尝试添加三个横跨面板的垂直线。换句话说,不应将垂直线剪裁到绘图区域。这是我想要的: 但是,当我使用内置的 ggplot2
我手头有一个非常复杂的案例 ggplot2 .我尝试使用 iris 用 MWE 举例说明它数据如下。 我只有方面的箱线图,并且想移动图例以占据空方面的空间。 这一切都很好,我用 lemon::repo
我正在使用 facet_wrap 并且还能够绘制次要 y 轴。然而,标签并没有绘制在轴附近,而是绘制得很远。我意识到如果我了解如何操纵 grobs 的 gtable (t,b,l,r) 的坐标系,这一
我正在尝试使用 grobs 和 gtable 将 4 个(ggplot2)图排列成 2x2 网格。我不知道如何设置宽度,以及非 1xn 或 nx1 排列。 使用此代码: data(iris) a <-
我实际上正在研究 Java 主机集成。实际系统使用Microsoft SNA Server,其中ASCII-EBCDIC 转换是基于本地COMTBLG Gtable 完成的。你知道这个文件的规范吗?有
我是一名优秀的程序员,十分优秀!