R 在不同的图形上相互叠加绘制不同的变量

R 在不同的图形上相互叠加绘制不同的变量,r,plot,facet-wrap,R,Plot,Facet Wrap,我有3个不同的变量A,B,C,在3张图上相互叠加,因为它们有不同的轴。我的输出在图形之间有很大的空间,我想缩小这个空间,在底部只有一个X轴,在所有图形上有更宽的y轴限制 我也读过,也许facet_wrap是绘制多个图形的更好方法?你能告诉我最好做什么吗?谢谢 我的数据: Location = c(1,2,3,4,5,6,7) A = c(1.16, 0.96, 0.67,0.78, 0.55, 0.3,0.26) B = c(6.51, 4.98, 2.85, 3.19, 3.60, 10.82

我有3个不同的变量A,B,C,在3张图上相互叠加,因为它们有不同的轴。我的输出在图形之间有很大的空间,我想缩小这个空间,在底部只有一个X轴,在所有图形上有更宽的y轴限制

我也读过,也许facet_wrap是绘制多个图形的更好方法?你能告诉我最好做什么吗?谢谢

我的数据:

Location = c(1,2,3,4,5,6,7)
A = c(1.16, 0.96, 0.67,0.78, 0.55, 0.3,0.26)
B = c(6.51, 4.98, 2.85, 3.19, 3.60, 10.82, 8.60)
C = c(75.45, 86.66, 103.36, NA, 107.53, NA, 128.49)

df = data.frame(Location, A, B, C)
我的代码:

par(mfrow=c(3,1))

plot(A, type = "l", col = "red", ylab = "A", main="Title", xlab = NULL)
plot(B, type = "l", col = "Blue", ylab = "B", xlab = NULL)
plot(C, type = "p", pch= 19, col = "Blue", ylab = "C", xlab = Location)

在这里,x标签的位置就在末尾

par(mfrow=c(3,1))

plot(A, type = "l", col = "red", ylab = "A", main="Title", xlab = "")
plot(B, type = "l", col = "Blue", ylab = "B", xlab = "")
plot(C, type = "p", pch= 19, col = "Blue", ylab = "C", xlab = "Location")

在这里,x标签的位置就在末尾

par(mfrow=c(3,1))

plot(A, type = "l", col = "red", ylab = "A", main="Title", xlab = "")
plot(B, type = "l", col = "Blue", ylab = "B", xlab = "")
plot(C, type = "p", pch= 19, col = "Blue", ylab = "C", xlab = "Location")
这里有一个带有facet_wrap的选项。我稍微重组了你的数据

df <- data.frame(Location = rep(Location, 3), y = c(A,B,C), letter = rep(c("A","B","C"), each = 7))

library(ggplot2)

ggplot(df, aes(x = Location, y = y, color = letter)) +
  geom_line() +
  geom_point() +
  scale_x_continuous(breaks = c(1:7), labels = c(1:7)) +
  facet_wrap(~letter, nrow = 3, scales = "free_y") +
  scale_color_manual(values = c("red", "blue", "blue")) + 
  theme(legend.position = "none")
这里有一个带有facet_wrap的选项。我稍微重组了你的数据

df <- data.frame(Location = rep(Location, 3), y = c(A,B,C), letter = rep(c("A","B","C"), each = 7))

library(ggplot2)

ggplot(df, aes(x = Location, y = y, color = letter)) +
  geom_line() +
  geom_point() +
  scale_x_continuous(breaks = c(1:7), labels = c(1:7)) +
  facet_wrap(~letter, nrow = 3, scales = "free_y") +
  scale_color_manual(values = c("red", "blue", "blue")) + 
  theme(legend.position = "none")

这里有一种稍微不同的方法,使用tidyr软件包中的pivot_longer函数重塑数据帧:

图书馆弹琴 图书馆三年 图书馆GGPLOT2 df%>%pivot\u更长、-位置、名称\u to=var、值\u to=val%>% 滤器is.NAVIAL%>% ggplotaesx=位置,y=val,group=var,color=var+ 几何线+ 伊拉布+ 刻面缠绕。~var,strip.position=left,ncol=1,scales=free\u y+ themestrip.background=元素\空白, strip.placement=外部 编辑:仅更改面的比例

若要仅更改B面的比例以使y值在0到40之间变化,不能使用“缩放y连续”,因为它将应用于所有面

但您可以在数据帧中添加两个点,B组的值为0和40,以便强制ggplot在全范围内进行绘图。然后,您可以将此零件的颜色传递到“透明”以从绘图中直观地删除它们:

df%>%pivot\u更长、-位置、名称\u to=var、值\u to=val%>% 滤器is.NAVIAL%>% mutateNewVar=var%>% 添加第行,位置=c1,1, var=cB,B, val=c0,40, NewVar=cOut,Out%>% ggplotaesx=位置,y=val,group=NewVar,color=NewVar+ 几何线+ 伊拉布+ 刻面缠绕。~var,strip.position=left,ncol=1,scales=free\u y+ themestrip.background=元素\空白, strip.placement=外部+ 刻度\u颜色\u手动值=红色、绿色、蓝色、透明、中断=cA、B、C
这里有一种稍微不同的方法,使用tidyr软件包中的pivot_longer函数重塑数据帧:

图书馆弹琴 图书馆三年 图书馆GGPLOT2 df%>%pivot\u更长、-位置、名称\u to=var、值\u to=val%>% 滤器is.NAVIAL%>% ggplotaesx=位置,y=val,group=var,color=var+ 几何线+ 伊拉布+ 刻面缠绕。~var,strip.position=left,ncol=1,scales=free\u y+ themestrip.background=元素\空白, strip.placement=外部 编辑:仅更改面的比例

若要仅更改B面的比例以使y值在0到40之间变化,不能使用“缩放y连续”,因为它将应用于所有面

但您可以在数据帧中添加两个点,B组的值为0和40,以便强制ggplot在全范围内进行绘图。然后,您可以将此零件的颜色传递到“透明”以从绘图中直观地删除它们:

df%>%pivot\u更长、-位置、名称\u to=var、值\u to=val%>% 滤器is.NAVIAL%>% mutateNewVar=var%>% 添加第行,位置=c1,1, var=cB,B, val=c0,40, NewVar=cOut,Out%>% ggplotaesx=位置,y=val,group=NewVar,color=NewVar+ 几何线+ 伊拉布+ 刻面缠绕。~var,strip.position=left,ncol=1,scales=free\u y+ themestrip.background=元素\空白, strip.placement=外部+ 刻度\u颜色\u手动值=红色、绿色、蓝色、透明、中断=cA、B、C
对不起,我的意思是我想减少图形之间的空间,并删除x轴标签,以便图形显示在彼此的顶部,只有x轴在最底部。谢谢,我的意思是我想减少图形之间的空间,并删除x轴标签,这样图形显示在彼此的顶部,只有x轴在最底部。谢谢汉克·乔丹,这很有用。变量C是否可能忽略NA缺失值并链接其余数据点?或者只绘制点而不绘制线?您可以在绘制之前从df中删除NAs:df感谢Jordan,这非常有用。变量C是否可能忽略NA缺失值并链接其余数据点?或者只打印点而不打印线?您可以在打印之前从df中删除NAs:df谢谢。但是,我得到了错误…找不到函数pivot\u更长。我已经更新了librarytidyr,但似乎不起作用。这是库的一个新函数吗?正如我提到的,在使用pivot_函数之前,您需要加载tidyr包。如果您没有安装tidyr,您可以通过执行install、PackageStyDrapologies、重新启动R来安装它,因为已经安装了tidyr。谢谢他们是脱衣舞。text.y,试着
在主题函数中添加:strip.text.y=element\u textangle=180查看gridExtra或ggarrange包;谢谢但是,我得到了错误…找不到函数pivot\u更长。我已经更新了librarytidyr,但似乎不起作用。这是库的一个新函数吗?正如我提到的,在使用pivot_函数之前,您需要加载tidyr包。如果您没有安装tidyr,您可以通过执行install、PackageStyDrapologies、重新启动R来安装它,因为已经安装了tidyr。谢谢它们是strip.text.y,尝试在主题函数中添加这个:strip.text.y=element\u textangle=180查看gridExtra或ggarrange包;