3

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

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
4

2 回答 2

8

首先,您需要绘制条形图并将其保存为对象。该对象包含条形的 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对象(中间条)。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()

在此处输入图像描述

于 2013-03-07T17:51:57.380 回答
1

TeachingDemos 包中的updateusr功能允许您更改现有绘图的坐标系,而无需求助于par(new=TRUE)它带来的潜在问题。

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

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

于 2013-03-07T19:02:47.237 回答