簡體   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