簡體   English   中英

在R中的同一圖和同一軸上繪制兩個比例不同的數據集

[英]Plot two datasets with different scales on the same graph, same axis in R

我有兩個數據集,我想在具有單個軸的單個散點圖中查看。 一個數據集的Y值介於0到0.0006之間,另一個數據集的介於0和1之間。

每個數據集都有50個條目。

在R中,有一種方法可以更改在0.0006標記處的y軸的比例,以在圖表的兩半中顯示細節,例如0-0.0006和0.0006-1的范圍將在圖表上相同。

我使用對數標度進行了此操作,這是一個示例數據集,並沒有一直達到1,而是挖掘了0.07左右。

我仍然對其他技術持開放態度,因為該技術過分強調了0.0006-0范圍。

在此處輸入圖片說明

您可以縮放數據以進行繪圖,然后調用軸兩次:

y1<-runif(50,0,0.0006)
y2<-runif(50,0.0006,1)
x<-runif(50)

y1.scaled<-y1*(0.5/0.0006)
y2.scaled<-(y2-0.0006)*(1-0.5)/(1-0.0006) + 0.5

plot(c(0,1),c(0,1),col=NA,yaxt='n',ylab="",xlab="")

  points(x,y1.scaled,pch=20,col="red")
  points(x,y2.scaled,pch=21,col="black")

axis(2,at=seq(0,0.5,length.out = 3), labels = c(0,0.0003,0.0006), col="red")
axis(2,at=seq(0.5,1,length.out = 3), labels = seq(0.0006,1,length.out=3))

有關如何將已知最小和最大值的一組數字重新縮放到任何其他最小和最大值的信息,請參見這篇文章:如何按已知最小和最大值將一組數字縮小

假設您有兩個不同的數據源(並且兩個源中的值都可以小於<0.0006),我們可以將它們組合起來,創建一個指示值是否小於<0.0006的指標,然后使用帶有free刻度的facet_wrap 像這樣:

library(ggplot2)
set.seed(1)
y1<-runif(50,0,0.0006)
y2<-runif(50,0,1)
x<-1:50
df<-as.data.frame(rbind(cbind(y1,x),cbind(y2,x))) #Combine data
df$y1 <- as.numeric(as.character(df$y1))
df$x <- as.numeric(as.character(df$x))
df$group <- (df$y1 <= 0.0006) #Create group

#ggplot with facet
ggplot(data=df) + geom_point(aes(y=y1,x=x)) + facet_wrap(~grp,scales="free")

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM