散點(diǎn)圖是將所有的數(shù)據(jù)以點(diǎn)的形式展現(xiàn)在直角坐標(biāo)系上,以顯示變量之間的相互影響程度,點(diǎn)的位置由變量的數(shù)值決定,每個(gè)點(diǎn)對(duì)應(yīng)一個(gè) X 和 Y 軸點(diǎn)坐標(biāo)。散點(diǎn)圖可以用R自帶的plot()函數(shù)繪制,也可以用ggplot2包的geom_point()和 geom_dotplot()函數(shù)來(lái)繪制,當(dāng)使用geom_dotplot()繪圖時(shí),point的形狀是dot,不能改變點(diǎn)的形狀,因此,geom_dotplot 叫做散點(diǎn)圖(Scatter Plot),通過(guò)繪制點(diǎn)來(lái)呈現(xiàn)數(shù)據(jù)的分布,對(duì)點(diǎn)分箱的方法有兩種:點(diǎn)密度(dot-density )和直方點(diǎn)(histodot)。當(dāng)使用點(diǎn)密度分箱(bin)方式時(shí),分箱的位置是由數(shù)據(jù)和binwidth決定的,會(huì)根據(jù)數(shù)據(jù)進(jìn)行變化,但不會(huì)大于binwidth指定的寬度;當(dāng)使用直方點(diǎn)分箱方式時(shí),分箱有固定的位置和固定的寬度,就像由點(diǎn)構(gòu)成的直方圖(histogram)。
plot()函數(shù)繪制
基本語(yǔ)法:
plot(x, y, type="p", main, xlab, ylab, xlim, ylim, axes)
具體參數(shù)如下:
x 橫坐標(biāo) x 軸的數(shù)據(jù)集合;
y 縱坐標(biāo) y 軸的數(shù)據(jù)集合;
type:繪圖的類(lèi)型,p 為點(diǎn)、l 為直線(xiàn), o 同時(shí)繪制點(diǎn)和線(xiàn),且線(xiàn)穿過(guò)點(diǎn);
main:圖表標(biāo)題;
xlab、ylab x 軸和 y 軸的標(biāo)簽名稱(chēng);
xlim、ylim x 軸和 y 軸的范圍;
axes 布爾值,是否繪制兩個(gè) x 軸。
type 參數(shù)可選擇值:
p:點(diǎn)圖;
l:線(xiàn)圖;
b:同時(shí)繪制點(diǎn)和線(xiàn);
c:僅繪制參數(shù) b 所示的線(xiàn);
o:同時(shí)繪制點(diǎn)和線(xiàn),且線(xiàn)穿過(guò)點(diǎn);
h:繪制出點(diǎn)到橫坐標(biāo)軸的垂直線(xiàn);
s:階梯圖,先橫后縱;
S:階梯圖,先縱后豎;
n: 空?qǐng)D。
案例
# 創(chuàng)建數(shù)據(jù)
data = data.frame(
x=seq(1:100) + 0.1*seq(1:100)*sample(c(1:10) , 100 , replace=T),
y=seq(1:100) + 0.2*seq(1:100)*sample(c(1:10) , 100 , replace=T)
)
# 基本散點(diǎn)圖
plot(x=data$x, y=data$y)
美化后的散點(diǎn)圖
plot(x=data$x, y=data$y, type="p",
xlab="地下生物量 (g/m^2)",
ylab="地上生物量(g/m^2)",
main="地上生物量與地下生物量間關(guān)系",
xlim=c(0, 200),
ylim=c(0, 300))
散點(diǎn)圖矩陣
散點(diǎn)圖矩陣是借助兩變量散點(diǎn)圖的作圖方法,它可以看作是一個(gè)大的圖形方陣,其每一個(gè)非主對(duì)角元素的位置上是對(duì)應(yīng)行的變量與對(duì)應(yīng)列的變量的散點(diǎn)圖。而主對(duì)角元素位置上是各變量名,這樣,借助散點(diǎn)圖矩陣可以清晰地看到所研究多個(gè)變量?jī)蓛芍g的相關(guān)關(guān)系。散點(diǎn)圖矩陣就是把數(shù)據(jù)集中的每個(gè)數(shù)值變量?jī)蓛衫L制散點(diǎn)圖,這里我們用pairs()函數(shù)繪制。
pairs(iris[1:4], main = "Anderson's Iris Data -- 3 species",
pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])
把直方圖放在對(duì)角線(xiàn)上
panel.hist <- function(x, ...)
{
usr <- par("usr"); on.exit(par(usr))
par(usr = c(usr[1:2], 0, 1.5) )
h <- hist(x, plot = FALSE)
breaks <- h$breaks; nB <- length(breaks)
y <- h$counts; y <- y/max(y)
rect(breaks[-nB], 0, breaks[-1], y, col = "cyan", ...)
}
pairs(USJudgeRatings[1:5], panel = panel.smooth,
cex = 1.5, pch = 24, bg = "light blue", horOdd=TRUE,
diag.panel = panel.hist, cex.labels = 2, font.labels = 2)
geom_point()函數(shù)繪制
geom_point()函數(shù)用于創(chuàng)建散點(diǎn)圖。散點(diǎn)圖對(duì)于顯示兩個(gè)連續(xù)變量之間的關(guān)系最有用。它可以用于比較一個(gè)連續(xù)變量和一個(gè)類(lèi)別變量,或者兩個(gè)類(lèi)別變量,但是像geom_jitter()、geom_count()或geom_bin2d()這樣的變體通常更合適。氣泡圖是一個(gè)散點(diǎn)圖,第三個(gè)變量映射到點(diǎn)的大小。
#安裝ggplot2包
install.packages("ggplot2")
#調(diào)用ggplot2包
library(ggplot2)
#繪制散點(diǎn)圖
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point()
為散點(diǎn)圖形添加不同顏色和性狀的映射
p + geom_point(aes(colour = factor(cyl)))
p + geom_point(aes(shape = factor(cyl)))
繪制氣泡形式的散點(diǎn)圖
p + geom_point(aes(size = qsec))
#繪制一個(gè)根據(jù)物種設(shè)置顏色的散點(diǎn)圖
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, color=Species)) +
geom_point(size=6) +
theme_bw()
#散點(diǎn)圖的美化
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, color=Species)) +
geom_point(size=6) +#設(shè)置點(diǎn)大小
theme_bw()+#去除灰色背景
xlab("Sepal.Length") + #設(shè)置x軸標(biāo)題
ylab("Sepal.Width")+#設(shè)置y軸標(biāo)題
theme(axis.text.x = element_text(size = 12, color = "black"))+##設(shè)置x軸字體大小
theme(axis.text.y = element_text(size = 12, color = "black"))+##設(shè)置y軸字體大小
theme(title=element_text(size=14))##設(shè)置x軸和y軸標(biāo)簽字體大小