随着grid.arrange
我可以安排多个ggplot
在网格中人物使用类似,实现了多屏图:
library(ggplot2)
library(grid)
library(gridExtra)
Run Code Online (Sandbox Code Playgroud)
然后生成一些ggplot2图
plot5 <- grid.arrange(plot4, plot1, heights=c(3/4, 1/4), ncol=1, nrow=2)
Run Code Online (Sandbox Code Playgroud)
如何获得"不平衡"2 col布局,其中第一个col中有一个绘图,第二个col中有三个绘图?我玩弄了一个'网格网格'方法,试图用grid.arrange
一个网格(例如plot5
,上面)绘制另一个图,但得到了:
在ArrangeGrob中出错(...,as.table = as.table,clip = clip,main = main,:输入必须是grobs!
更新:
感谢您的建议.我会考虑viewports
和grid
.与此同时,感谢@DWin,layOut
'wq'包中的函数非常适合我Sweave
文档中的编译图:
更新2:
该arrangeGrob
命令(由@baptiste建议)也运行良好,看起来非常直观 - 至少很容易改变两列的宽度.它还具有不需要`wq'包的好处.
这是我的Sweave文件中的代码:
<<label=fig5plot, echo=F, results=hide>>=
plot5<-grid.arrange(plot4, arrangeGrob(plot1, plot2, plot3, ncol=1),
ncol=2, widths=c(1,1.2))
@
\begin{figure}[]
\begin{center}
<<label=fig5,fig=TRUE,echo=T, width=10,height=12>>=
<<fig5plot>>
@
\end{center}
\caption{Combined plots using the `arrangeGrob' command.}
\label{fig:five}
\end{figure}
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
顺便说一下,有人告诉我为什么出现'> NA'?
我刚刚在Mac上更新了R,R Studio和一些软件包,包括ggplot2和gridExtras.现在gridExtras在基本绘图失败时出现错误:
"在'gList"中只允许'grobs'"
这里有一些应该有效的代码,但不是:
library(ggplot2)
p1 = qplot(1:10,rnorm(10))
p2 = qplot(1:10,rnorm(10))
library(gridExtra)
grid.arrange(p1, p2, ncol=2, main = "Main title")
Run Code Online (Sandbox Code Playgroud)
这会转储出以下错误:
Error in gList(list(grobs = list(list(x = 0.5, y = 0.5, width = 1, height = 1, :
only 'grobs' allowed in "gList"
In addition: Warning message:
In grob$wrapvp <- vp : Coercing LHS to a list
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
我想在我在R中制作的3面小平面网格图中添加一个脚注引用.这是一个信用数据源的脚注.理想情况下,我希望它位于所有三个轴的下方和外部 - 最好是在左下方.
我使用的ggplot2
也是ggsave()
.这意味着我不能使用grid.text()
基于x11()
-based 的解决方案,因为它只能在窗口上绘制,而不能添加到ggplot对象中.
使用相反png() ...code... dev.off()
似乎不是一个选项,因为我需要ggsave
调整参数大小,并找到这个命令产生更好,更清晰的打印(这也更快,因为我不打印到屏幕).
这是我的基本代码:
p1 <- ggplot(data, aes(date, value))
facet_grid(variable ~ .) + geom_point(aes(y =value), size=1) +
theme_bw() +
opts(title=mytitle)
print(p1)
ggsave("FILE.png",width=mywidth, height=myheight, p1, dpi=90)
Run Code Online (Sandbox Code Playgroud)
我试过了:
p1 <- ggplot(data, aes(date, value))
facet_grid(variable ~ .) + geom_point(aes(y =value), size=1) +
theme_bw() +
opts(title=mytitle)
print(p1)
grid.text(unit(0.1,"npc"),0.025,label = "Data courtesy of Me")
grid.gedit("GRID.text", gp=gpar(fontsize=7))
ggsave("FILE.png",width=mywidth, height=myheight, p1, dpi=90)
Run Code Online (Sandbox Code Playgroud)
这适当地将脚注放在x11()显示的左下角,在图的外部,但不幸的是,因为它没有应用于p1对象,所以它不会被ggsave命令保存.
我也尝试过:
p1 <- ggplot(data, aes(date, value))
facet_grid(variable …
Run Code Online (Sandbox Code Playgroud) 作为一个新的ggplot2用户,我有点失去了可能性,并努力在网上找到一个简单的答案,我认为是一个简单的问题.
我想在同一张纸上显示来自ggplot2的多个图,但是知道这些图来自for循环.
下面的例子没有编译,只是为了说明:
for(i in c(1:n)){
for(j in c(1:m)){
.......... # some data production
p <- ggplot(df.all) + geom_bar(aes_string(x=class.names[i],fill=var.names[j])
}}
Run Code Online (Sandbox Code Playgroud)
在这里,p被覆盖了,但是我希望有一个矩阵或一个列表,我可以将所有p放在它们生成的位置,然后像一个简单的函数,如
display_in_a_grid(list_of_ggplot_plots)
Run Code Online (Sandbox Code Playgroud)
但据我所知,我无法制作一个绘图矩阵列表,也无法找到只接受一个参数输入的函数.
关于我看过的事情:
包gridExtra中的"arrangeGrob"不起作用,因为它需要每个绘图的显式名称(例如:p1,p2,p3,...),如http://code.google.com/p/gridextra/wiki/ arrangeGrob
ggplot2的"facet"方法不适合我的数据集的组织(或相反:p)
你有一个简单的方法来管理这个吗?
谢谢,
弗朗索瓦
R的基本图形系统中的几个函数,包括rect()
和polygon()
,通过它们angle=
和density=
参数支持交叉影线:
x = c(0, 0.5, 1, 0.5)
y = c(0.5, 1, 0.5, 0)
par(mar=c(0,0,0,0))
plot.new()
polygon(x, y, angle=45, density=10)
Run Code Online (Sandbox Code Playgroud)
如何将类似的交叉影线应用于由网格图形系统的grid.polygon()
函数绘制的多边形:
library(grid)
grid.newpage()
grid.polygon(x,y)
Run Code Online (Sandbox Code Playgroud)
我看了说明文档中?grid.polygon
和?gpar
,并通过保罗具有Murrel的书在R图形有脱脂和迄今拿出空.我错过了一些明显的东西吗 如果没有,是否有一些简单的黑客可以使这成为可能?
我试图用两个表示形状和颜色的图例来制作地图(下面的例子中为"Type"和"Org"),并且有图例插图.我可以放置传说,但我希望它们左对齐,以便它们的左边缘对齐.除了相互集中之外,我无法做出任何其他事情:
require(ggplot2)
require(ggmap)
require(grid)
require(mapproj)
data <- data.frame(Org=rep(c("ABCDEFG","HIJKLMNOP","QRSTUVWX"),4)
, Type=rep(c("Y","Z"),6), Lat=runif(12,48,54.5)
, Long=runif(12,-133.5,-122.5))
osmMap <- get_map(location=c(-134,47.5,-122,55), source = 'osm')
points <- geom_jitter(data=data, aes(Long, Lat, shape=Type
, colour=Org))
legend <- theme(legend.justification=c(0,0), legend.position=c(0,0)
, legend.margin=unit(0,"lines"), legend.box="vertical"
, legend.key.size=unit(1,"lines"), legend.text.align=0
, legend.title.align=0)
ggmap(osmMap) + points + legend
Run Code Online (Sandbox Code Playgroud)
有时,使用向图像添加灰色半透明层然后将键孔切割到该层以突出显示下面图像的某个部分的技术是有帮助的.以下是来自youtube vide的示例:
我有时使用绘图,但使用Inkscape添加半透明层,然后使用橡皮擦在该层中切出一个洞.这(a)看起来不够专业(b)需要额外的时间和单独的程序和(c)可能的质量损失.
我想在R中做.我问的是ggplot2,因为这是我选择的工具,但我认为任何网格答案都会很好(我知道基础可能有一个非常不同的方法).
所以这是一个MWE,我添加了一个geom_rect
显示我们想要切割锁孔/窗口的位置:
ggplot(mtcars, aes(mpg, wt)) +
geom_point(size=3) +
geom_rect(mapping=aes(xmin=20, xmax=25,
ymin=3, ymax=3.3), color="black", alpha=.01)
Run Code Online (Sandbox Code Playgroud)
我如何使用R来制作看起来像这样的图:
我正在使用这个函数来快速轻松地sparklines
使用R但是我似乎无法弄清楚如何更改字体大小以避免y轴刻度标签的丑陋重叠.这是我的代码(请参阅下面的可重现示例):
sparklines(gamma.df, sub=c(1:23),outer.margin = unit(c(2, 2, 2, 2), "cm"))
以及由此产生的情节:
我似乎能够完全抑制y轴
sparklines(gamma.df, sub=c(1:23),yaxis=FALSE,outer.margin = unit(c(2, 2, 2, 2), "cm"))
但我真正想要的只是缩小刻度线上的数字(并在线下添加灰色填充,但看起来我必须在屏幕上绘制多边形,这可能足以让一个单独的问题麻烦...和一个不同的包).
该文件表明,gpar可能是相关的:"在需要的图形参数列表中的所有情况下,有效的参数名称是通过在适当的调用gpar当作为将是有效的一样." 但是我需要一些帮助来理解这一点,因为我的尝试似乎都没有到达任何地方(同样适用于cex.axis和axis()).有关R的grid
图形专家吗?还提供了一个记录良好的完全不同的方法(ggplot2?)的链接,它提供了更好的质量火花线式输出.
这是一些复制我的问题的示例数据和代码:
x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000), Y = rnorm(1000), Z = rnorm(10))
sparklines(x,outer.margin = unit(c(2, 2, 2, 2), "cm"))
Run Code Online (Sandbox Code Playgroud)
这里是最终的示例数据图,在y轴刻度线上有重叠的数字:
更新:使用来自@ geek-on-acid 的非常有用的plot
代码和来自Tufte论坛的一些代码(见下文)我想出了一个替代的迷你方法,它不使用YaleToolkit
包,看起来没问题......这是一个可重复的例子(实际上只有两行,但在这里注释为我的教育):
x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000), Y = rnorm(1000), …
Run Code Online (Sandbox Code Playgroud) 我有大量的小块地块需要放在一个更大的地块画布上,并将小块地块安排进去并用线条连接起来.一个小例子如下所示:
A到L是独立的图.给出了他们的位置的坐标.
绘图网格坐标:PlotgridX和plotgridY可以决定小图需要居中的时间
plotcord <- data.frame (
plotname = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"),
plotgridX = c( 1.5, 2, 5, 5.5, 1.75, 5.25, 8 , 1 , 2, 3.5, 6, 7.5),
plotgridY = c( 3, 3, 3, 3, 2 , 2, 2, 2 , 1, 1, 1, 1))
plotname plotgridX plotgridY
1 A 1.50 3
2 B 2.00 3
3 C 5.00 3
4 D 5.50 3
5 E 1.75 2
6 F …
Run Code Online (Sandbox Code Playgroud) 我有一个ggplot,我将填充和alpha映射因子,如下所示:
set.seed(47)
the_data <- data.frame(value = rpois(6, lambda=20),
cat1 = rep(c("A", "B"), each = 3),
cat2 = rep(c("X", "Y", "Z"), 2))
ggplot(the_data, aes(y = value, x = cat2, alpha = cat1, fill = cat2)) +
geom_bar(stat = "identity", position = "dodge") +
scale_alpha_discrete(range = c(0.5, 1)) +
theme_bw()
Run Code Online (Sandbox Code Playgroud)
我正在制作它的人没有找到alpha的传说非常清楚.我认为一个很好的选择将是这样的(我在基础图形中一起入侵):
我知道我不能使用高级ggplot命令生成这样的图例,但是我可以grid
将它放在我的情节之上吗?