BTW,开始尝试用Markdown。
下面的例子实现之前,需要在R中首先输入一些数据。本例采用最简单的散点数据,输入如下代码后,得到散点的x与y坐标值。
x <- c(0,1,2,3,5,7)
y <- c(-50,-80,-70,5,8,7)
基本绘图
绘图的基本命令为plot
。如果不带任何参数使用plot
命令,输入如下代码:
plot(x,y)
得到的结果为下图:
可以发现R会自动调整坐标轴。
如果你发现有不同,比如出来的图形是包含边框的。那也许是我或者你调整了原始参数,可以用如下命令来处理。
par(bty = "o")
此处的o为(环境)参数,可调整为1,7,c,u,]等。之后所加边框就如参数的形状。
给散点增加连线,可用如下命令:
lines(x,y)
得到的结果为下图:
进一步,还可以用abline
命令,添加其他辅助线。
abline(h=-40)
得到的结果如下图:
调整坐标轴
利用yaxt
参数,可实现plot
同时,不显示坐标轴。
plot(x,y,yaxt="n",xaxt="n")
得到的结果如下图:
如下命令可以得到更复杂的效果。
plot(x,y,yaxt="n",xlim=c(0,20),ylim=c(-20,20),mgp=c(3,1,0),pos=0,cex.axis=0.5)
得到的结果如下图:
在这条plot命令中,xlim
和ylim
分别定义x轴与y轴的范围;mgp
是控制坐标轴标题、刻度数值及轴线相对距离的参数;pos
参数控制横轴在图形中的相对位置(此例为垂直居中);cex.axis
控制图形中刻度字体的大小。
有时我们需要对坐标轴做复杂处理,比如横纵轴刻度不成比例,甚至同一轴的正负区域的刻度也不成比例。对于这种情况需要在隐藏坐标轴后,再自定义出需要的轴。
比如如下命令:
axis(2,at=seq(-20,0),labels=seq(-40,0,2),cex.axis=0.5,mgp=c(3,1,-1))
axis(2,at=seq(0,20),labels=seq(0,20,1),cex.axis=0.5,mgp=c(3,1,-1))
得到的结果如下图:
可以看到x轴及y轴的正负象限的刻度都不同。这一点是通过axis
命令得到的。在这里,参数2
控制所绘制的坐标轴位置(可设置为1-4,分别位于不同方向)。at
和labels
参数分别设置新添加的轴上的点及其刻度。这里要注意的是,这里的点和刻度的值,也受到plot
的约束。比如在我们的例子中,plot
用ylim
设定了y轴负象限的范围为-20
,那么如果设置的at
参数超过了20
的范围,图像会超出显示范围。那么这几个值之间的关系是如何的?
这里有几个值需要理清:
ylim
设定的-20
;
at
设定的-20
;
labels
设定的-40;
首先,ylim
设定了此次plot
的图像中,y轴的刻度范围。在此例中,y轴负象限只能有-20
值域范围,否则会超过图像范围。
其次,at
设定了此次绘制的轴的取值范围,这个范围不该超过ylim
的范围,否则也会超过图像显示范围。
最后,注意到上述两个参数只是设定了轴的范围,并非为轴上的刻度显示。这实际上给调整坐标轴留下了余地。观察label
设定和最后的结果可以发现,实际的刻度值超过了ylim
和at
的范围。也就是说,虽然实际坐标轴的值域并未发生变化,但却可以通过调整刻度达到调整轴比例的效果。
接下来,cex.axis
参数调整的是所绘制的轴上字体的大小,由于刻度可能会变密,所以会用到。
小结
plot
、par
和axis
组合使用,能达到的绘图效果比较丰富。将来会花时间完全整理,有需要也可以参考如下页面获得帮助。