在同一图表上绘制具有不同比例的两个数据集,在R中绘制相同的轴

时间:2016-08-11 13:43:43

标签: r

我有两个数据集,我希望在单个散点图上看到一个单轴。一个数据集的Y值范围为0到0.0006,另一个数据集介于0和1之间。

每个数据集有50个条目。

在R中,是否有一种方法可以在0.0006标记处更改y轴的比例,以显示图形的两半中的细节,例如,0 - 0.0006和0.0006 - 1的范围将是相同的大小图表。

3 个答案:

答案 0 :(得分:0)

我使用对数刻度来做这个,这是一个样本数据集,它不会一直到1但是在0.07左右点击。

我仍然对其他技术持开放态度,因为这个技术过于强调0.0006-0范围。

enter image description here

答案 1 :(得分: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))

请参阅此文章,了解如何使用已知的最小值和最大值将一组数字重新缩放到任何其他最小值和最大值: How to scale down a range of numbers with a known min and max value

答案 2 :(得分:0)

假设您有两个不同的数据源(并且来自任一源的值可以是<0.0006),我们可以将它们组合起来,创建一个指示值,该值是否为<0.0006,然后使用facet_wrap free刻度。像这样:

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")

enter image description here