- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力构建基于 ggplot 对象的双轴图。根据巴蒂斯特的建议,我已将问题分解为更小的部分。目前的问题是:
grobs
中删除所有数据,同时保留轴、轴标签、轴刻度线和网格线?我的意思是与 geom_line()
和 geom_points()
关联的数据。想要这样做的原因是,在构建双轴图的过程中,我遇到了以下问题:一个 grob 的网格线会覆盖另一个 grob 的数据。通过删除数据线和点,就不会发生覆盖。
让我说清楚:我确实有解决方法,包括将线型添加到 aes() 并设置scale_linetype_manual(values = c("solid", "blank"),或者将数据“从网格中发送” ',但我想对尚未出于当前目的进行过多“修饰”的绘图对象进行后处理。
下面是一些代码和数字。
# 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)
p <- ggplot(data = df, aes(x = Year, y = value, group = variable, colour = variable, shape = variable)) +
geom_line(size = 2) +
geom_point(size = 4) +
theme(panel.grid.major = element_line(size = 1, colour = "darkgreen"),
panel.grid.minor = element_line(size = 1, colour = "darkgreen", linetype = "dotted"))
# Manipulate grobs with gtable
library(gtable)
g <- ggplot_gtable(ggplot_build(p))
## Here remove the geom_line() and geom_point()
## g <- stripdata(g) # pseudo-code!
grid.newpage()
grid.draw(g)
在下面的图中,我希望线条消失!
编辑:按照 baptiste 的建议,我尝试删除数据层。然而,正如 BondedDust 在评论部分指出的那样,这会破坏 ggplot 对象:
# Remove the two layers of data
p$layers[[1]] <- NULL
p$layers[[1]] <- NULL
g <- ggplot_gtable(ggplot_build(p))
## Error: No layers in plot
从 ggplot 对象中删除数据会破坏它。我在应用程序中使用的一种解决方法是“将数据发送到网格外”,例如将每个单元格乘以 -999999 并用 +scale_y_continuous(limits = c(1, 10)) 切断显示,但如果可行的话,我想避免这种丑陋的黑客行为。我希望如果我用 NA 或 NULL 替换每个数据点,关联的 gtable 不会被破坏,所以这就是为什么我正在寻找一种方法从 g 对象而不是 p 对象内部删除数据。
对 grobs 进行操作(而不是直接破解 ggplot 对象)后,grid.draw(g)
的结果将是:
仅供引用,第二个图是通过以下解决方法获得的。
p <- ggplot(data = within(df, value <- -999999), aes(x = Year, y = value, group = variable, colour = variable, shape = variable)) +
geom_line() +
geom_point() +
theme(panel.grid.major = element_line(size = 1, colour = "darkgreen"),
panel.grid.minor = element_line(size = 1, colour = "darkgreen", linetype = "dotted")) +
scale_y_continuous(limits = c(1, 10))
最佳答案
更自然的策略是使用不可见的geom_blank
层,以便ggplot2仍然训练比例等来构建绘图,但不显示数据。然而,由于您想要处理已经格式化的绘图,因此您可能必须从绘图 gTree 中手动删除这些 grobs。这是一次尝试,
library(gtable)
g <- ggplotGrob(p)
stripdata <- function(g){
keep <- grepl("border|grill",
names(g[["grobs"]][[4]][["children"]]))
g[["grobs"]][[4]][["children"]][!keep] <- NULL
g
}
grid.newpage()
grid.draw(stripdata(g))
关于r - 用 grid 和 gtable 拆解 ggplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27750737/
我最低限度地使用 pytest 作为针对工作中各种 API 产品的大型自动化集成测试的通用测试运行器,并且我一直在尝试寻找一个同样通用的拆卸函数示例,该函数在任何测试完成时运行,无论成功或失败。 我的
我不需要编码器,我已经有了 XML 文件。所以我在关注this guide查看如何解码 CDATA 中的内容。但是,我发现,如果我跳过 main 中的编码部分而只执行解码部分,它似乎不起作用。所以我的
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How do I stop name-mangling of my DLL's exported funct
产品岗在很多公司就是螺丝钉样的存在。不仅JAVA、UI、Axure得手到擒来,文案、手册、幻灯片还要充满情怀,连运营活动都似乎是产品的分内工作了 T_T 那么作为初级产品要怎么运营好一
我是 Python 新手。我有一个单例装饰器定义为: def singleton(cls): instances = {} def getinstance(): if
我正在努力构建基于 ggplot 对象的双轴图。根据巴蒂斯特的建议,我已将问题分解为更小的部分。目前的问题是: 如何从grobs中删除所有数据,同时保留轴、轴标签、轴刻度线和网格线?我的意思是与 ge
我有一个数据集,我在其中存储不同类/子类型的副本(不确定如何调用它),然后存储每个类/子类型的属性。本质上,有 5 个子类型/类,每个子类型/类有 4 个重复,以及测量的 100 个属性。 是否有像
我是一名优秀的程序员,十分优秀!