在R中的不同Y轴上向条形图添加线条

时间:2013-03-07 17:23:31

标签: r graphics plot

我有以下简单数据。我希望将“V”对比D1,D2,D3值作为并排条形图和累积和,CS1,CS2,CS3作为线,并且在不同的Y尺度上。虽然如First Figure所示绘制并排条形图相对容易,但我发现很难为CS1-CS3列添加线图。最终的情节看起来像Second Figure 谢谢你的帮助

V   D1  D2  D3  CS1 CS2 CS3
10  2038    1806    1643    72.81171847 64.52304394 58.69953555
20  550 709 757 92.46159343 89.85351911 85.7449089
30  142 192 271 97.53483387 96.71311183 95.42693819
40  45  61  80  99.14255091 98.89246159 98.28510182
50  12  20  30  99.57127546 99.6070025  99.35691318
60  5   6   10  99.74991068 99.82136477 99.71418364
70  2   2   3   99.82136477 99.89281886 99.82136477
80  4   1   2   99.96427295 99.92854591 99.89281886
90  1   0   1   100.0000000 99.92854591 99.92854591
100 0   1   0   100.0000000 99.96427295 99.92854591

2 个答案:

答案 0 :(得分:7)

首先,您需要绘制条形图并将其另存为对象。该对象包含条形的x坐标。由于最大值为39.5,我设置了xlim=c(0,40)

mp<-barplot(as.matrix(t(df[,2:4])),beside=TRUE,xlim=c(0,40),ann=FALSE)
mp
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]  1.5  5.5  9.5 13.5 17.5 21.5 25.5 29.5 33.5  37.5
[2,]  2.5  6.5 10.5 14.5 18.5 22.5 26.5 30.5 34.5  38.5
[3,]  3.5  7.5 11.5 15.5 19.5 23.5 27.5 31.5 35.5  39.5

要添加新地块,请使用par(new=TRUE)。然后为第一行添加plot(),为其他行添加lines()。由于新图的x值使用mp对象的第二行(midle bars)。函数axis()用于设置轴刻度。

par(new=TRUE)
plot(mp[2,],df$CS1,xlim=c(0,40),type="l",col="red",axes=FALSE,ylim=c(0,100),ann=FALSE)
lines(mp[2,],df$CS2,col="blue")
lines(mp[2,],df$CS3,col="green")
axis(1,at=mp[2,],labels=df$V)
axis(4,at=seq(0,100,10))
box()

enter image description here

答案 1 :(得分:1)

TeachingDemos包中的updateusr函数允许您更改现有绘图的坐标系,而无需诉诸par(new=TRUE)以及随之而来的潜在问题。

您还可以将plotrix包中的twoord.plot函数视为另一种选择。

在同一图上有2个坐标系统有时会导致混淆,最好创建2个垂直堆叠的对齐图,这样就没有重叠,并且尺度完全独立,可能使顶部图更短。 layout功能可以帮助实现这种安排。