繁体   English   中英

一个 y 轴与 R 中的共享 x 轴

[英]one y-axis with shared x-axis in R

我正在尝试从数据框的几列中绘制数据。 每列代表 y 值,对于每一列,x 值范围从 0 到 100。当尝试绘制这些数据时,它们的 y 轴看起来像一个巨大的混乱(有 12 列)。 如果我可以将最小 y 值设置为 0,最大设置为 1700 左右,那么事情应该会锻炼。 我该怎么做呢? 另外我如何扩展x轴以便我可以在它旁边添加一个图例(我该怎么做?)我的Rstudio无法识别ggplot所以我使用了这个代码

plot(x-axis, y1)
par(new=T)
plot(x-axis, y2, col="darkcyan")
par(new=T)
plot(x-axis, y3, col="green")
par(new=T)
plot(x-axis, y4, col="orange")
par(new=T)
...
plot(x-axis, y12, col="blue")
par(new=T)

这是这样的: 在此处输入图像描述

我还编写了其他代码来做同样的事情。

matplot(x-axis, 
cbind(aaaa,aaab,aaac,aaad,aaae,aaaf,aaag,aaah, 
aaai,aaaj, aaak,aaal),type="l",col=c("red", "blue", 
"green", "cyan", "darkcyan", "azure", 
"darkkhaki","aquamarine", "brown1","deeppink", 
"deepskyblue1", "blueviolet"), xlab="Return Period 
(Years)", ylab="Return Years (mm)" )
legend("topright", colnames(dfreturnplot2), col=12, 
cex=0.8, fill=seq_len(12))

在这里,y 轴看起来不错,但图例干扰了图形的可见性。 我不能通过延长 x 轴来制作更长的 x 维度,所以我应该怎么做?

这就是它的样子在此处输入图像描述

听从杰的建议后,我现在得到在此处输入图像描述

有没有办法让屏幕变大,让看到这个的人可以看到发生了什么? 是否有像 python 中的 alpha 值,以便我们可以看到位于其他几个曲线之上的曲线?

使用杰的第二个建议后,我得到了(我仍然需要阅读他提供的链接) 在此处输入图像描述

我还研究了使用 ggplot2。 使用此代码: 在此处输入图像描述

我得到这张图片: 在此处输入图像描述

如何为此添加图例。 我觉得这应该很容易,但我错过了一些东西,埃文斯的回答现在让我有点困惑。 有没有办法在颜色之后添加标签?

ylim扩展一个因子,比如*1.1并制作一个无框horiz图例。

matplot(m, type='l', lty=1, ylim=c(min(m), max(m)*1.1))
legend("topleft", colnames(m), col=12, cex=0.8, fill=seq_len(12), horiz=TRUE, bty='n')

在此处输入图像描述

如果您有更多的项目,还有一个ncol=legend中的参数以将它们呈现在一个多列矩阵中,请参阅?legend

matplot(m, type='l', lty=1, ylim=c(min(m), max(m)*1.1))
legend("topleft", LETTERS[1:20], col=12, cex=0.8, fill=seq_len(20), ncol=10, bty='n')

在此处输入图像描述

您也可以扩展xlim并保留框架,这真的非常灵活。

matplot(m, type='l', lty=1, xlim=c(0, nrow(m)*1.25))
legend("right", LETTERS[1:26], col=12, cex=0.8, fill=seq_len(20), ncol=2)

在此处输入图像描述


数据:

m <- sapply(1:10, \(x) plogis(seq(0, 10, .1)/x)) |> `colnames<-`(LETTERS[1:10])

我强烈建议在这里尝试使用ggplot2 :它很好地完成了图例,并自动转移事物以使一切都适合。

ggplot 没有被我的 Rstudio 识别,所以我使用了这段代码

尝试install.packages("ggplot2") 如果它失败了,一些快速的研究应该会告诉你如何安装它。

使用@jay.sf 的样本数据,我们只需要将它melt ,剩下的就ggplot2

library(ggplot2)
transform(m, x = seq_len(nrow(m))) |>
  reshape2::melt("x", variable.name = "grp", value.name = "y") |>
  ggplot(aes(x, y, color = grp)) +
  geom_line() +
  guides(color = guide_legend(ncol = 2))

基本的ggplot2

ggplot2允许您自定义很多,包括多列图例(如图所示,默认为 1)、删除图例标题、清理背景/主题(添加+ theme_bw() )、改变颜色/大小/线型/...按组/线/...等学习它的语义一次,你将永远受益于它控制漂亮情节的能力(相对于你必须手动控制大型图例的基本图形)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM