R中具有相同变量的两个不同x轴的图

时间:2018-08-14 03:08:19

标签: r ggplot2 axis

我试图创建一个显示带有两个x轴的线的图,一个是连续的数字,另一个是离散的。

这是数据示例:

df <-cbind.data.frame("Category"=c("A","A","A","A","A","B","B","B","B","B"), 
                   "Y"=c(5,6,4,8,9,4,5,3,7,8),
                   "X1"=c(0,10,20,30,40,0,10,20,30,40),
                   "X2"=c(0,0,1,1,2,0,1,2,2,3))

我试图添加辅助轴并对其进行缩放,但是由于我的两个变量不成比例,所以我不知道如何重新缩放,因此直线上的相同Y点将同时适合两个x轴。

ggplot(data=df) + 
 geom_path(aes(y=Y,x=X1),color="red")+ 
 geom_path(aes(y=Y,x=X2*10),color="blue")+ 
 facet_wrap(~Category)+ 
 scale_y_continuous("Y")+   
 scale_x_continuous("X1",sec.axis = sec_axis(~ .*1/10, "X2"))

我在两轴上阅读了不同的问题,但是找不到解决我问题的方法。

我正在寻找这样的东西:

Expected output

对此我将不胜感激!

1 个答案:

答案 0 :(得分:1)

您提供的图不能证明明显的代数关系,因此,我将为您提供一个完全任意的第二个x轴的示例。

library(ggplot2)
ggplot(mtcars, aes(mpg, disp)) +
  geom_point() +
  scale_x_continuous(sec.axis=sec_axis(~., breaks=c(15,20,30), labels=c('a','b','c')))

sample ggplot2 axis

第一个参数是转换“ ~.”(本质上是x2=x1),它是必需的,因此在这种情况下,它是1对1转换。另外两个相对清晰,您将'a'放置在x=15处,将'b'放置在x=20处,依此类推。我认为没有办法将两者放在同一根轴上(仅使用ggplot2)。