gpt4 book ai didi

r - Cars 包中的多面板散点图

转载 作者:行者123 更新时间:2023-12-01 04:51:36 24 4
gpt4 key购买 nike

我正在尝试在 RStudio 中制作一个 2 面板图。通常足够简单:

par(mfrow=c(1,2)) #1*2 plotting window

但是,当我使用 scatterplot() 进行绘图时car 包中的函数似乎覆盖了绘图窗口的这种划分。

可重现的例子:
我正在寻找的格式可以使用:
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)

没运气。

更新 这个问题在很大程度上与 this one 重复,除了我正在寻找一种解决方法,而不是该页面上留下的响应基本上只是承认 scatterplot() 实际上覆盖了 par(mfrow)

最佳答案

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

并排 cars::scatterplot情节在 rmarkdown文档

下面是一个 PDF 输出示例。 out.width='3in'设置输出文档中每个绘图的实际大小,而不管 fig.heightfig.width .但是你仍然可以调整fig.heightfig.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))
```

enter image description here

使用 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)

enter image description here

定制 ggplot2情节看起来更像 cars::scatterplot输出

您可以通过其他方式自定义上面的代码。如果您不想要置信区间,请添加 se=FALSEgeom_smooth .如果您希望每个物种的形状不同,请添加 aes(shape=Species)geom_point .如果你想在基础图形中使用特定的形状,添加 + scale_shape_manual(values=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))

enter image description here

关于r - Cars 包中的多面板散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40771825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com