今天介紹幾個用R繪製折線圖、點線圖或者在散點圖的基礎上添加擬合趨勢線的方法 (PS:基於base的方法,非ggplot)。
matplot第一個要介紹的是matplot函數,這是一個類似於plot的函數,其繪圖參數也與plot非常類似。
matplot(x, y, type = "p", lty = 1:5, lwd = 1, lend = par("lend"),
pch = NULL,
col = 1:6, cex = NULL, bg = NA,
xlab = NULL, ylab = NULL, xlim = NULL, ylim = NULL,
log = "", ..., add = FALSE, verbose = getOption("verbose"))
各參數意義:
具體個參數的設置可以參考之前的推文《plot和par函數繪圖詳解》。
⚠️x和y兩個向量內元素的數目要一致,如果只提供了一個向量,則默認為y,x以由1開始的連續整數代替。
matplot允許繪圖數據中包含NA。
接下來給幾個繪圖的例子,先做一個最簡單的。
matplot((-4:5)^2, main = "Quadratic")
繪製一個點線圖。
sines <- outer(1:20, 1:4, function(x, y) sin(x / 20 * pi * y))
matplot(sines, pch = 1:4, type = "o", col = rainbow(ncol(sines)))
修改圖中點的形狀並填充顏色。
matplot(sines, type = "b", pch = 21:23, col = 2:5, bg = 2:5,
main = "matplot(...., pch = 21:23, bg = 2:5)")
擬合曲線的後期添加可以使用abline和lines函數完成,首先我們要使用plot函數繪製一個散點圖。
attach(mtcars)
plot(mtcars$wt,mtcars$mpg,
main="Basic Scatter plot of MPG vs.Weight",
xlab="Car Weight(lbs/100)",
ylab="Miles Per Gallon",
pch=19)
abline函數向圖像中添加的是一條直線,例如數據的一元線性回歸擬合結果。
abline(lm(mtcars$mpg~mtcars$wt),col="red",lwd=2,lty=1)
lines函數可以向圖像中添加曲線,例如數據的變化規律擬合曲線。
lines(lowess(mtcars$wt,mtcars$mpg),col="blue",lwd=2,lty=2)
plotmeans最後介紹一下gplots包的plotmeans函數,其特點是可以在繪製點線圖的同時添加散點的誤差棒。
plotmeans(formula, data=NULL, subset, na.action,
bars=TRUE, p=0.95, minsd=0, minbar, maxbar,
xlab=names(mf)[2], ylab=names(mf)[1], mean.labels=FALSE,
ci.label=FALSE, n.label=TRUE, text.n.label="n=",
digits=getOption("digits"), col="black", barwidth=1,
barcol="blue", connect=TRUE, ccol=
col, legends=names(means), xaxt, use.t=TRUE,
lwd=par("lwd"), ...)
各參數意義:
formula為繪圖的表達公式;
data為繪圖數據;
subset定義是否只採用一部分數據進行繪圖;
na.action定義當數據有含有NA時如何處理;
bars是否繪製置信區間;
p置信區間的置信水平,默認為0.95;
minsd允許的每組數據標準偏差最小值;
minbar和maxbar為允許的誤差限的最小值和最大值;
xlab和ylab為x和y軸標籤名稱;
mean.labels定義代表平均數的圓形是否要被特定的文字標籤替換;
ci.label是否在誤差限的兩端顯示準確的數字;
n.label是否顯示每組數據中觀察值的個數;
text.n.label定義觀察值個數的顯示形式;
digits定義有效數字的個數;
col定義代表均值的圓形的顏色;
barwidth為誤差棒的線長;
barcol為誤差棒的顏色;
connect是否不同組的均值用一條線連接;
ccol定義連接線的顏色;
legends定義圖例;
xaxt定義坐標軸的類型;
use.t計算置信區間是否應用t分布;
lwd連接線的線寬。
默認條件下,plotmeans會根據數據的分組計算其組內平均值和95%置信區間,之後以空心原點表示組內平均值,藍色的誤差棒表示置信區間,並顯示組內樣本個數同時用線段連接各組的均值。
library(gplots)
data(state)
plotmeans(state.area ~ state.region)
還可以自定義均值點的形狀和各組間是否使用線段相連。
plotmeans(state.area ~ state.region, connect=list(1:2, 3:4),
ccol="red", pch=7 )
最後還有一個比較複雜的例子。
data(esoph)
par(las=2, # use perpendicular axis labels
mar=c(10.1,4.1,4.1,2.1), # create enough space for long x labels
mgp=c(8,1,0) # move x axis legend down to avoid overlap
)
plotmeans(ncases/ncontrols ~ interaction(agegp , alcgp, sep =" "),
connect=list(1:6,7:12,13:18,19:24),
barwidth=2,
col="dark green",
data=esoph,
xlab="Age Group and Alcohol Consumption",
ylab="# Cases / # Controls",
main=c("Fraction of Cases for by Age and Alcohol Consumption", "Ile-et-Vilaine Esophageal Cancer Study")
)
abline(v=c(6.5, 12.5, 18.5), lty=2)
加群、投稿、轉載、交流、合作等一切事宜!!