Cars组件中的多面板散射图

Cars组件中的多面板散射图,r,plot,r-car,R,Plot,R Car,我想在RStudio中制作一个2面板的图形。通常很简单: par(mfrow=c(1,2)) #1*2 plotting window 但是,当我使用car软件包中的scatterplot()函数进行绘图时,它似乎覆盖了绘图窗口的此分区 可复制示例: 我正在寻找的格式可以通过以下方式生成: par(mfrow=c(1,2)) plot(iris$Sepal.Length,iris$Sepal.Width) plot(iris$Petal.Width,iris$Sepal.Width) 但是我

我想在RStudio中制作一个2面板的图形。通常很简单:

par(mfrow=c(1,2)) #1*2 plotting window
但是,当我使用car软件包中的
scatterplot()
函数进行绘图时,它似乎覆盖了绘图窗口的此分区

可复制示例: 我正在寻找的格式可以通过以下方式生成:

par(mfrow=c(1,2))
plot(iris$Sepal.Length,iris$Sepal.Width)
plot(iris$Petal.Width,iris$Sepal.Width)
但是我想使用scatterplot()有几个原因。但当我再次尝试相同的格式化技巧时,它不起作用。尝试此块:

library(car)
par(mfrow=c(1,2))
scatterplot(Sepal.Length~Sepal.Width|Species,data=iris,grid="FALSE", boxplots="", reg.line="FALSE",pch=c(0,1,2))
scatterplot(Petal.Width~Sepal.Width|Species,data=iris,grid="FALSE", boxplots="", reg.line="FALSE",pch=c(0,1,2))
有人知道这方面的解决方法吗

我还尝试了另一种结构:

m<-rbind(c(1,2))
layout(m)

m您可以使用chunk参数
fig.show='hold'
rmarkdown
文档中并排输出图形。另一个选项是使用
ggplot2
创建绘图,而不是使用
cars
scatterplot
功能。我将在下面展示这两种方法

并排
cars::散点图
r标记
文档中绘制 下面是一个PDF输出的示例
out.width='3in'
设置输出文档中每个绘图的实际大小,而不考虑
fig.height
fig.width
。但是您仍然可以调整
fig.height
fig.width
来调整相对于绘图区域的纵横比和文本大小

---
title: "Untitled"
author: "eipi10"
date: "November 23, 2016"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r fig.show='hold', out.width='3in', fig.height=5, fig.width=5}
library(car)

scatterplot(Sepal.Length~Sepal.Width|Species,data=iris,grid="FALSE",
            boxplots="", reg.line="FALSE", pch=c(0,1,2))
scatterplot(Petal.Width~Sepal.Width|Species,data=iris,grid="FALSE", 
            boxplots="", reg.line="FALSE", pch=c(0,1,2))
```

使用
ggplot2
如果您愿意使用
ggplot2
,则可以相对轻松地获得两个绘图布局:

library(ggplot2)
library(gridExtra)
theme_set(theme_bw())

grid.arrange(
  ggplot(iris, aes(Sepal.Width, Sepal.Length, colour=Species)) +
    geom_point() +
    geom_smooth(alpha=0.2) +
    theme(legend.position="top"),
  ggplot(iris, aes(Sepal.Width, Petal.Width, colour=Species)) +
    geom_point() +
    geom_smooth(alpha=0.2) +
    theme(legend.position="top"),
  ncol=2)

自定义
ggplot2
绘图,使其看起来更像
cars::scatterplot
输出 您可以通过其他方式自定义上面的代码。如果不需要置信区间,请将
se=FALSE
添加到
geom_smooth
。如果您希望每个物种具有不同的形状,请将
aes(shape=species)
添加到
geom\u point
。如果您想要在基本图形中使用特定形状,请添加
+缩放形状\u手册(值=0:2)
等。您还可以通过少量额外工作获得单个图例

在下面的代码中,我添加了这些和其他定制,以复制更接近原始基本图形的内容

# Components we'll reuse for both plots
my_theme = list(geom_point(aes(shape=Species)),
                geom_smooth(se=FALSE, show.legend=FALSE, lwd=0.8),
                scale_shape_manual(values=0:2),
                scale_colour_manual(values=c("black", "red","green")),
                theme_bw(),
                theme(panel.grid.major=element_blank(),
                      panel.grid.minor=element_blank(),
                      legend.position="top"))

p1 = ggplot(iris, aes(Sepal.Width, Sepal.Length, colour=Species)) +
  my_theme +
  labs(x="Sepal Width", y="Sepal Length") +
  scale_y_continuous(limits=c(3,8)) +
  scale_x_continuous(limits=c(1,5)) 

p2 = ggplot(iris, aes(Sepal.Width, Petal.Width, colour=Species)) +
  my_theme +
  labs(x="Sepal Width", y="Petal Width")

# Function to extract legend
# https://github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs
g_legend<-function(a.gplot){
  tmp <- ggplot_gtable(ggplot_build(a.gplot))
  leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
  legend <- tmp$grobs[[leg]]
  return(legend)}

leg = g_legend(p1)

grid.arrange(leg,
  arrangeGrob(grobs=lapply(list(p1,p2), function(p) p + guides(colour=FALSE, shape=FALSE)), ncol=2), 
  ncol=1, heights=c(1,10))
#我们将在两个绘图中重复使用的组件
我的主题=列表(几何点(aes(形状=物种)),
几何平滑(se=假,显示图例=假,lwd=0.8),
比例\形状\手动(值=0:2),
比例颜色手册(数值=c(“黑色”、“红色”、“绿色”)),
theme_bw(),
主题(panel.grid.major=element_blank(),
panel.grid.minor=element\u blank(),
图例.position=“top”))
p1=ggplot(鸢尾,aes(萼片宽度,萼片长度,颜色=种))+
我的主题+
花萼(x=“萼片宽度”,y=“萼片长度”)+
连续刻度(限值=c(3,8))+
标度x连续(限值=c(1,5))
p2=ggplot(鸢尾,aes(萼片宽度,花瓣宽度,颜色=种))+
我的主题+
花萼(x=“萼片宽度”,y=“花瓣宽度”)
#用于提取图例的函数
# https://github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs

g_Legend可能是正确的,谢谢你给我指明了方向。然而,该提要没有收到除“是的,就是这样”之外的答案。与创建者响应的链接是相同的。有解决办法吗?我的意思是,犹太人区将所有内容粘贴到powerpoint中并在事实发生后将其分组的方式是可行的,但它非常麻烦,而且没有R所能做到的那么漂亮,这取决于你最终想要什么。只是为了查看,可能是类似于
pdf的东西(tf@lukeA如果我读对了,它会生成所有的绘图,并将它们导出到一个单独的pdf文件中,每个绘图都有自己的页面。对吗?我希望两个绘图位于同一页面上。是的,如果你将pdf阅读器设置为并排显示页面,从视觉角度看,你得到了你想要的。作为汽车软件包的作者已经写了,不可能在一个页面上绘制它;这不是函数应该做的。它是用于分析,而不是用于发布。哇,说一个彻底的答案吧!谢谢@eipi10!我对ggplot不太熟悉,所以我现在正试着根据我的数据调整你的答案。我目前遇到的问题是1)摆脱网格2)设置比例限制和3)重新标记轴。所有这些功能都不像通常的绘图功能那样工作,而且该功能的文档严重不足。我已经更新了上一个示例,以包括新的轴标签和明确的轴比例范围。该示例也已经消除了网格线。就“常用”绘图功能而言:
ggplot2
与基本图形的工作方式不同。首先,它使用
网格
图形引擎,而不是基本图形来绘制所有绘图组件。第二,它有自己的“语法”来构建情节(事实上,“gg”代表“图形语法”)。我想如果我能把它弄得更漂亮的话,这可能最终会奏效。非常感谢。你有语法信息的首选来源吗?我现在需要尝试将其扩展到2*3的图矩阵(3对),并希望抑制冗余轴。我还需要加入错误栏(我删除了“最佳拟合”一行)。你可以看看这本相对较新的书,它是由
ggplot2
的创建者哈德利·威克姆(Hadley Wickham)合著的。这本书由O'Reilly出版,但网络版是开放获取的。该链接直接指向关于使用ggplot2进行可视化的章节。