- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在 ggplot2 中生成一个轴线中断(轴线上有一个白色段),但遇到了一些问题。
使用信息性帖子 annotate-ggplot-with-an-extra-tick-and-label我能够在给定位置生成自定义grob,同时还关闭面板以在绘图区域外“绘制”。
我也熟悉其他软件包,例如 plotrix并且能够在基础上复制损坏的轴,但最重要的是我有兴趣了解为什么我创建的轴不会覆盖线。下面是一些示例代码:
library(ggplot2) # devtools::install_github("hadley/ggplot2")
library(grid)
library(scales)
data("economics_long")
econ <- economics_long
econ$value01 <- (econ$value01/2)
x <- ggplot(econ, aes(date, value01,group=1)) + scale_y_continuous(labels=c(0.0,0.1,0.2,0.3,0.4,0.5,1.0), breaks=c(0.0,0.1,0.2,0.3,0.4,0.5,0.6),limits = c(0,.6),expand = c(0, 0)) +
geom_smooth(colour="deepskyblue", show.legend = TRUE ) + theme_bw()
theme_white <- theme(panel.background=element_blank(),
panel.border=element_rect(color="white"),
plot.margin = unit(c(.2, 0, .2, .2), "cm"),
panel.grid.major.y=element_blank(),
panel.grid.major.x=element_blank(),
panel.grid.minor.x=element_blank(),
panel.grid.minor.y=element_blank(),
axis.title.y = element_blank(),
axis.line.x=element_line(color="gray", size=1),
axis.line.y=element_line(color="gray", size=1),
axis.text.x=element_text(size=12),
axis.text.y=element_text(size=12),
axis.ticks=element_line(color="gray", size=1),
legend.position="none"
)
x <- x + theme_white
gline = linesGrob(y = c(0, 1.5),x = c(-.015, .015), gp = gpar(col = "black", lwd = 2.5))
gline2 = linesGrob(y = c(-0.25, 0.5),x = c(0, 0), gp = gpar(col = "red", lwd = 5))
p = x + annotation_custom(gline, ymin=.55, ymax=.575, xmin=-Inf, xmax=Inf) +
annotation_custom(gline, ymin=.525, ymax=.55, xmin=-Inf, xmax=Inf) +
annotation_custom(gline2, ymin=.55, ymax=.575, xmin=-Inf, xmax=Inf)
# grobs are placed under the axis lines....
g = ggplotGrob(p)
g$layout$clip[g$layout$name=="panel"] <- "off"
grid.draw(g)
最佳答案
你很接近。布局数据框是您关闭剪辑的。布局数据框中的另一列给出了绘制各种绘图元素的顺序 - z。第二个绘制绘图面板(包括注释)(在背景之后),然后绘制轴。将绘图面板的 z 值更改为大于轴的 z 值。
library(ggplot2) # devtools::install_github("hadley/ggplot2")
library(grid)
library(scales)
data("economics_long")
econ <- economics_long
econ$value01 <- (econ$value01/2)
x <- ggplot(econ, aes(date, value01,group=1)) + scale_y_continuous(labels=c(0.0,0.1,0.2,0.3,0.4,0.5,1.0), breaks=c(0.0,0.1,0.2,0.3,0.4,0.5,0.6),limits = c(0,.6),expand = c(0, 0)) +
geom_smooth(colour="deepskyblue", show.legend = TRUE ) + theme_bw()
theme_white <- theme(panel.background=element_blank(),
panel.border=element_rect(color="transparent"),
plot.margin = unit(c(.2, 0, .2, .2), "cm"),
panel.grid.major.y=element_blank(),
panel.grid.major.x=element_blank(),
panel.grid.minor.x=element_blank(),
panel.grid.minor.y=element_blank(),
axis.title.y = element_blank(),
axis.line.x=element_line(color="gray", size=1),
axis.line.y=element_line(color="gray", size=1),
axis.text.x=element_text(size=12),
axis.text.y=element_text(size=12),
axis.ticks=element_line(color="gray", size=1),
legend.position="none"
)
x <- x + theme_white
gline = linesGrob(y = c(0, 1.5),x = c(-.015, .015), gp = gpar(col = "black", lwd = 2.5))
gline2 = linesGrob(y = c(-0.25, 0.5),x = c(0, 0), gp = gpar(col = "red", lwd = 5))
p = x + annotation_custom(gline, ymin=.55, ymax=.575, xmin=-Inf, xmax=Inf) +
annotation_custom(gline, ymin=.525, ymax=.55, xmin=-Inf, xmax=Inf) +
annotation_custom(gline2, ymin=.55, ymax=.575, xmin=-Inf, xmax=Inf)
# grobs are placed under the axis lines....
g = ggplotGrob(p)
g$layout$clip[g$layout$name=="panel"] <- "off"
g$layout # Note that z for panel is 1. Change it to something bigger.
g$layout$z[g$layout$name=="panel"] = 17
grid.newpage()
grid.draw(g)
关于r - ggplot2 - 在轴线上自定义 grob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39733972/
我很惊讶以下从颜色向量创建的简单 grob 几乎按要求工作。 但是,我想让渐变从左到右,而不是从上到下。 library(ggplot2) library(grid) grad = colorRamp
我需要将 R 基础图转换为 grob,以便它可以叠加在一些 ggplot 上s。 我发现有几个函数可以做到这一点,ggplotify::as.grob和 cowplot::plot_to_gtable
我试图在 ggplot2 中生成一个轴线中断(轴线上有一个白色段),但遇到了一些问题。 使用信息性帖子 annotate-ggplot-with-an-extra-tick-and-label我能够在
这是 this question 的后续问题. OP 要求一种方法以特定距离安排地 block 的一部分。我认为 teunbrand 给出了一个很好的答案。 我自己的建议(用cowplot提取图例,并
披露:我不确定如何为这个问题制作一个可重现的示例。 我正在尝试使用gridExtra包绘制一个GROB列表。 我有一些代码,如下所示: ## Make Graphic Objects for Spec
我正在尝试绘制一个热图以及一行树状图,我对其进行了操作(修剪了分支数量),并使用grid.draw进行了对齐. 这是我的数据: set.seed(10) mat <- matrix(rnorm
我有一个 ggplot 对象: ggplot(plot1,aes(x = c, y = value, colour = variable, linetype = variable,size = var
所以我试图制作一个 grob 列表,然后将它们传递给 grobTree() ,但我的列表项不会被 do.call() 读入. 这是我的代码: library(purrr) library(grid)
我在画几个ggplot2对象并将它们放在 grid.arrange 上在对“pdf”设备的调用中。我发现如果我先对绘图进行光栅化,PDF 的性能会提高大约 10 亿倍(生成速度更快,渲染速度更快)。所
我有一个非常大的两个类别的散点图,其中一个点是“命中”。我想在图的顶部和侧面绘制直方图来表示在以下网站上看到的点击:http://blog.mckuhn.de/2009/09/learning-ggp
我正在尝试使用 ggplot2 重现以下 [base R] 图 我已经解决了大部分问题,但目前让我感到困惑的是将连接位于图右侧的边缘地毯图的线段放置在各自的标签上。标签是通过 anotation_cu
我正在尝试使用 grid.arrange 组合多种类型的图形/表格,其中之一是使用 corrplot 的相关矩阵。有没有办法将 corrplot 转换为 grob 或导出/导入为与 grid.arra
给定一个 ggplot,例如点,您如何找出给定点对应的数据行? 示例图: library(ggplot2) (p 为了回答 kohske 关于我为什么要这样做的问题,我使用 gridSVG 创建交互
我正在尝试使用 grid.arrange 组合多种类型的图形/表格,其中之一是使用 corrplot 的相关矩阵。有没有办法将 corrplot 转换为 grob 或导出/导入为与 grid.arra
如何在不一直使用 annotation_custom 的情况下在 ggplot 图表中包含多个 grobs 对象? 这是我的代码: df <- data.frame(x = 1:10, y = 1:1
如果对象包含我希望在分配时解析的其他变量,那么将 ggplot2 grob 分配给变量的正确方法是什么。 例如: xpos和 ypos是我想要解决的值。 我将 geom_text 分配给 ptext,
更新原来是无法通过远程桌面连接生成光栅图形的问题。 我想将文件中的图像插入到使用 ggplot2 绘制的绘图中。这个问题已经在这里问过(Inserting an image to ggplot2),但
我很难找到对齐 ggplot grob 和 table grob 的解决方案。我试图按照说明here但仍然没有给出我想要的结果。 library(grid) library(gridExtra) li
R 图形具有 grid 包,理论上允许使用 grid.curve 在形状之间创建弯曲箭头(请参阅此处的 grid.curve 描述 https://www.stat.auckland.ac.nz/~p
在对齐网格图形对象时遇到了一些麻烦——我已经阅读了我能找到的所有文档,包括 Murrell 的书,但没有成功。我认为我正在尝试做的事情非常简单,所以希望我缺少简单的东西。 这是一个可重现的示例,它将按
我是一名优秀的程序员,十分优秀!