当x和y长度不同时绘制双y轴 我有两个大数据集,我读到R。为了简单起见,考虑如下: ##Data set 1 x = c("2005", "2006", "2007", "2008", "2009", "2010") y = c(1,2,4,6,4,3) ##Data set 2 ##Shorter than D2. Missing 2005 x1 = c( "2006", "2007", "2008", "2009", "2010") y1 = c(20,40,60,50,29)

当x和y长度不同时绘制双y轴 我有两个大数据集,我读到R。为了简单起见,考虑如下: ##Data set 1 x = c("2005", "2006", "2007", "2008", "2009", "2010") y = c(1,2,4,6,4,3) ##Data set 2 ##Shorter than D2. Missing 2005 x1 = c( "2006", "2007", "2008", "2009", "2010") y1 = c(20,40,60,50,29),r,plot,R,Plot,我想用双y轴将两个数据集绘制成直线图。理想情况下,您希望: plot(x, y, type = "o", col = "red") par(new = TRUE) plot(x, y1, type = "o", col = "blue", xaxt = "n", yaxt = "n", xlab = "", ylab = "") axis(4) 但是当然xanyy1的大小不一样,所以我得到了一个错误。我试过了 plot(x1, y1, type = "o", col = "blue

我想用双y轴将两个数据集绘制成直线图。理想情况下,您希望:

plot(x, y, type = "o", col = "red")
par(new = TRUE)
plot(x, y1, type = "o", col = "blue", 
     xaxt = "n", yaxt = "n", xlab = "", ylab = "")
axis(4)
但是当然
x
any
y1
的大小不一样,所以我得到了一个错误。我试过了

plot(x1, y1, type = "o", col = "blue", 
     xaxt = "n", yaxt = "n", xlab = "", ylab = "")
但是,
y1
只是伸展到整个长度

在这个简单的例子中,我可以添加一个空白的
Y1
行来覆盖丢失的2005年数据,但在我的实际数据中,这不是一个实用的解决方案。我是否可以告诉R相应地排列两个数据集

此外,我更喜欢使用gplots,因为我喜欢轻松抵消错误条的功能。代码可能如下所示

SE = c(.20,.40,.60,.50,.29)
SE1 = c(.20,.40,.60,.50,.29)
offset = .08

plotCI(x = x, y = y, uiw = SE, type = "o",col = "red")
par(new = TRUE)
plotCI(x = (x1) + offset, y = y1, type = "o", uiw = SE1, col = "blue",         
       xaxt = "n", yaxt = "n", xlab = "", ylab = "")
axis(4)
您可以使用
points()
向现有绘图添加点或线:

plot(x,y,type="o",col="red")
points(x1,y1,type="o",col="blue")

然后你只需要在第二个轴上加上。好的,如果你在两个数值范围之间有数学关系,你可以这样做。一旦你知道了那是什么,你就可以做情节了。但请记住,在冰盖图中,你提到的两个轴指的是完全相同的数据类型。事实上,使用这两个轴并没有多大帮助。。。应该只有一个。他们混淆了3月和9月的冰量差异。你需要一个很好的理由来做你的计划

也许你对此有很好的理由(尽管我想不出任何理由)。如果你不这样做,那是个糟糕的主意。这就是你要做的

plot(x, y*10, type = 'l', ylim = range(c(y*10,y1)), yaxt = 'n', col = 'red')
axis(2, (1:6)*10, 1:6, col = 'red')
lines(x1, y1, col = 'blue')
axis(4, (1:6)*10, col = 'blue')
grid(nx = NA, ny = NULL)
您可以设置col.axis来设置数字的颜色


(你展示的冰盖示例可能与此相同..减去8而不是乘以10。)

我仍然很乐意听到其他人的意见,但其他人也同意使用

xlim=range(Data1$Year,Data2$Year) 

在第二个plot命令中,这似乎很好地解决了这个问题。谢谢大家的帮助

你试过你的解决方案吗?(蓝点都在绘图区域之外)。非常感谢您的回答。gplots是否有类似的功能?我喜欢使用plotCI,因为它很容易偏移错误条,所以它们不会重叠。@Josh-没有注意到第二组数据的规模要大得多。我在晚餐时想到了这一点,并认为其中一位常驻R大师会发布一个更好的解决方案。也许它就要来了?一张样品图会很方便的。您是否希望这些值通过图形的高度进行缩放,可能只是通过颜色进行区分(与轴匹配)?或者,您希望比例是所有值的范围,低的值向下很远,高的值向上更远?谢谢您的回复!我是一个新用户,所以我不能发布我希望做什么的图片。但是,看看吧。他们有一个双y轴的绘图类似于我希望创建的。除了在我的例子中,我的一条绘图线比另一条绘图线的数据年数少。我仍然很高兴听到其他人的意见,但有人分享了在第二个绘图命令中使用xlim=range(Data1$Year,Data2$Year)的想法,这似乎很好地解决了这个问题。谢谢大家的帮助!我回滚了您的(大量)编辑,因为您实际上创建了一个全新的问题。这是破坏性的,因为它在问题和任何现有答案之间造成了巨大的脱节。我建议将此问题保留原样,并将您的编辑作为新问题发布。谢谢您的回答。冰原链接只是为了展示我希望创建的情节类型的一个示例。我想要绘制这类数据的唯一原因是,我认为这两个因素(y和y1)之间存在某种关系,但它们各自的震级是完全不同的。再次感谢@VincentMoriarty,如果你觉得John回答了你的问题,请检查左侧的灰色勾号(就在答案分数下方)作为正确答案。这将使问题“得到解决”。