举一个非常简单的例子,mfrow=c(1,3)
;每个图都是不同的直方图;我怎么会画一条水平线(类似于abline(h=10)
)那全是 3个数字? (即便是它们之间的差距)。显然,我可以为每个数字添加一个abline,但这不是我想要的。我可以想到一个非常复杂的方式,通过真的只有1个数字,并使用polygon
等绘制其中的每个'图',这将是荒谬的。有没有一种简单的方法来做到这一点?如何在R中的多图环境中绘制一条线?
回答
由于@joran指出的那样,电网图形化系统提供了更灵活控制单个设备上多个图的排列。
在这里,我首先使用grconvertY()
查询的50上的y轴的高度的位置中的“归一化设备坐标”单位。 (即作为绘图装置总高度的一部分,其中0 =底部,1 =顶部)。然后我使用grid函数来:(1)推动填充设备的viewport
;和(2)在由grconvertY()
返回的高度绘制一条线。
## Create three example plots
par(mfrow=c(1,3))
barplot(VADeaths, border = "dark blue")
barplot(VADeaths, border = "yellow")
barplot(VADeaths, border = "green")
## From third plot, get the "normalized device coordinates" of
## a point at a height of 50 on the y-axis.
(Y <- grconvertY(50, "user", "ndc"))
# [1] 0.314248
## Add the horizontal line using grid
library(grid)
pushViewport(viewport())
grid.lines(x = c(0,1), y = Y, gp = gpar(col = "red"))
popViewport()
编辑:@joran问到如何绘制,从第1情节在第三情节的最后一棒的边缘的y轴延伸的线。这里有几个选择:
library(grid)
library(gridBase)
par(mfrow=c(1,3))
# barplot #1
barplot(VADeaths, border = "dark blue")
X1 <- grconvertX(0, "user", "ndc")
# barplot #2
barplot(VADeaths, border = "yellow")
# barplot #3
m <- barplot(VADeaths, border = "green")
X2 <- grconvertX(tail(m, 1) + 0.5, "user", "ndc") # default width of bars = 1
Y <- grconvertY(50, "user", "ndc")
## Horizontal line
pushViewport(viewport())
grid.lines(x = c(X1, X2), y = Y, gp = gpar(col = "red"))
popViewport()
最后,这里是一个几乎相当于,一般多用的方法。它采用了功能grid.move.to()
和grid.line.to()
由保罗·马雷尔在@ mdsumner的答案链接到文章中demo'd:
library(grid)
library(gridBase)
par(mfrow=c(1,3))
barplot(VADeaths); vps1 <- do.call(vpStack, baseViewports())
barplot(VADeaths)
barplot(VADeaths); vps3 <- do.call(vpStack, baseViewports())
pushViewport(vps1)
Y <- convertY(unit(50,"native"), "npc")
popViewport(3)
grid.move.to(x = unit(0, "npc"), y = Y, vp = vps1)
grid.line.to(x = unit(1, "npc"), y = Y, vp = vps3,
gp = gpar(col = "red"))
这是不困难想着它,我能做的最好的:
par(mfrow = c(1,3),xpd = NA)
for (i in 1:3){
x <- rnorm(200,i)
hist(x)
if (i == 1) segments(par("usr")[1],10,30,10)
}
我不知道如何确保行结束在正确的位置,而不修修补补。绘制每个区域的细分将解决这个问题,但会引入高度正确排列的问题。但这至少是一个很好的起点。
我想这在grid图形更容易,但我不得不做一些研究来验证。
感谢您的帮助。 – gung 2012-04-03 02:39:24
本文由保罗的Murrell示出了使用的grid
图形到两个不同的坐标系之间画线,在具有两个分离的子图的天然空间中指定的端点这种情况下的行:
保罗的Murrell 。网格图形包。 [R新闻,2(2):14-19,2002年6月
它的PDF文章的第17页:
谢谢,我正在阅读文章。 – gung 2012-04-03 02:39:02
是的,感谢那个伟大的链接。我刚刚在我的答案中添加了第三个代码块,它使用了Murrell文章中演示的几个函数('grid.move.to()'和'grid.line.to()')。 – 2012-04-03 05:00:26
- 1. 如何在R中的同一图上绘制多条线?
- 2. 如何在R中绘制线条?
- 3. R在同一图中绘制多条生存曲线
- 4. R:如何在ggplot中使用一个循环绘制一条阴影中的多条线
- 5. 如何使用绘图或ggplot2在R中快速绘制多条线
- 6. 如何在chart.js中绘制多条线
- 7. 如何绘制R中的折线图?
- 8. 在R中,如何用ggvis绘制多条曲线?
- 9. 在多线程环境中重绘
- 10. 如何在R中制作线条图?
- 11. 在Qt中绘制一条多色线
- 12. 如何在android中绘制一条线?
- 13. 如何在UICollectionView中绘制一条线?
- 14. 我如何绘制多条线路中的R
- 15. An R Shiny问题 - 在一张图上绘制多条线
- 16. 如何在R中的相同散点图上绘制多条回归线?
- 17. 绘制线图与R中
- 18. 无法在同一个图中绘制多条线图
- 19. 如何在R的corrplot包中绘制重要值的线条
- 20. D3在循环中绘制线条
- 21. 如何绘制R中的一维图?
- 22. 在flex中绘制多个图表中的多条线4.5
- 23. 在R中使用rsm之后在persp中绘制一条线
- 24. 如何在单图python中绘制多条线
- 25. 如何高效地在Google地图中绘制多条折线?
- 26. 如何在bb中的编码图像上绘制一条线?
- 27. 如何仅在MATLAB的pcolor图中绘制一些线条?
- 28. 绘制多边形,但它在中心绘制一条线
- 29. 如何绘制在三维图中的线中的R
- 30. 在R中绘制多重曲线
+1不错!你知道一种按摩单位/坐标/剪裁的方法,这条线从最左边的y轴延伸到绿色条的右边缘吗? – joran 2012-04-03 01:55:49
我确实有一个想法,如果能解决问题,我会添加它。现在,我在太阳下山前剪草坪... – 2012-04-03 02:03:08
谢谢,这真的很有帮助!我很欣赏你愿意推迟我的帐户上的割草;-) – gung 2012-04-03 02:38:27