R語言畫圖小結


本文以1950年到2010年期間我國的火災統計數據為例,數據如下所示:

(0)加載數據

data<-read.csv("E:\\MyDocument\\p\\Data\\1950~2010火災情況.csv") 

x=t(data[1]) 

y=t(data[2]) 

z=t(data[3])

w=t(data[4])

maxy=max(y) 

maxz=max(z) 

maxw=max(w) 

(1)將火災數、直接損失、死傷人數,分別按年份作圖

 

plot(x,y,type="o",xlab="年份",ylab="火災(起)",ylim=c(0,maxy),col="red",main="1950年到2010年火災年度統計",pch=c(15))

plot(x,z,type="o",xlab="年份",ylab="經濟損失(萬元)",ylim=c(0,maxz),col="blue",main="1950年到2010年火災經濟損失年度統計",pch=c(16)) 

 

plot(x,w,type="o",xlab="年份",ylab="死傷人數",ylim=c(0,maxw),col="green",main="1950年到2010年火災死傷人數年度統計",pch=c(17))

 

注:x,y為圖中的x軸和y軸,type設置圖形中數據的顯示類型,常見的有:

      type="p " 在圖形中數據顯示為點;

      type="l " 在圖形中數據顯示為線;

      type="b" 在圖形中數據顯示為點和連接線;

      type="o" 在圖形中數據點覆蓋在線上;

      type="h" 在圖形中數據顯示為從點到x軸的垂直線;

      type="s" 在圖形中數據顯示為階梯圖;

      type="n"在圖形中數據不顯示;

   xlab和ylab分別表示x軸和y軸的說明,ylim為控制y軸的范圍,col為線條的顏色,main為圖的主標題,pch為數據點的顯示符號,可取1到25的整數以及“”中的符號:

 

(2)將火災數、直接損失、死傷人數畫在一個圖里

> plot(x,y,type="o",xlab="年份",ylab="",ylim=c(0,maxy),col="red",main="1950年到2010年火災年度統計",pch=c(15)) #畫火災數曲線

 

> lines(x,z,type="o",col="blue",pch=c(16)) #追加經濟損失曲線
> lines(x,w,type="o",col="green",pch=c(17)) #追加死傷人數曲線

 

(3)增加加圖列 

 

legend("topleft",c("火災(起)","經濟損失(萬元)","死傷人數"),col=c("red","blue","green"),pch=15:17)

 

## 對圖添加柵格 使用grid()函數 ##

grid(nx=6,ny=6,lwd=2)

如何用R畫折線圖,散點圖,平滑曲線圖

如果只需橫軸上有柵格,則ny=NA

 

## 如何在圖中添加一條直線 用abline() 函數##

> abline(h=18,col="black",lty=1,lwd=2)

如何用R畫折線圖,散點圖,平滑曲線圖

## 如何添加圖例 用legend() 函數##

>legend("topright",legend=c("x","y"),pch=c(22,16),col=c("red","green"),lwd=2,lty=c(1,2))

  

如何用R畫折線圖,散點圖,平滑曲線圖

當然topright 還可以用坐標位置代替(x,y)

 

(4) 平滑曲線圖

## 使用函數 spline(x,y,n=?) ##

> sp=spline(week,x,n=1000)

> sp1=spline(week,y,n=1000)

#n值表示平滑程度

> plot(sp,col="red",type="l",xlim=c(0,6),ylim=c(0,30),lwd=2,xlab="WEEK",ylab="STUDENT",main="lesson",sub="class",col.main="green",font.main=2)

> lines(sp1,col="green",type="l",xlim=c(0,6),ylim=c(0,30),lwd=2,xlab="WEEK",ylab="STUDENT",main="lesson",sub="class",col.main="green",font.main=2)

> legend("topright",legend=c("x","y"),col=c("red","green"),lwd=2,lty=c(1,2))

  

如何用R畫折線圖,散點圖,平滑曲線圖

 

案例01-基本繪圖

cars <- c(1, 3, 6, 4, 9)

plot(cars)

  

clip_image002[6]

案例 1-基本繪圖

 

 

案例02-增添標題

 

cars <- c(1, 3, 6, 4, 9)

plot(cars, type="o", col="blue") # 繪制藍色折線圖,

title(main="Autos", col.main="red", font.main=4) # 增添標題,紅色,粗斜體

 

  

 

clip_image004[6]

案例 2-增添標題

注1:其中type設置畫圖的類型,有九種可能的取值,分別代表不同的樣式:

(1)'p')畫點;

(2)'l'畫線5;

(3)'b'同時畫點和線,但點線不相交;

(4)'c'將type= 'b'中的點去掉,只剩下相應的線條部分;

(5)'o'同時畫點和線,且相互重疊,這是它與type = 'b'的區別;

(6)'h'畫鉛垂線;

(7)'s'畫階梯線,從一點到下一點時,先畫水平線,再畫垂直線;

(8)'S'也是畫階梯線,但從一點到下一點是先畫垂直線,再畫水平線;

(9)'n'作一幅空圖,沒有任何內容,但坐標軸、標題等其它元素都照樣顯示。

注2:font.main用於控制字體,分別為1: 正常,2: 斜體,3: 粗體,4: 粗斜體

 

 

案例03-增添新曲線

cars <- c(1, 3, 6, 4, 9)

trucks <- c(2, 5, 4, 5, 12)

plot(cars, type="o", col="blue", ylim=c(0,12)) # ylim控制y軸的范圍

lines(trucks, type="o", pch=22, lty=2, col="red") #添加折線,lty=2表示虛線

title(main="Autos", col.main="red", font.main=4)

  

clip_image006[6]

案例 3-增添新曲線

注1:pch控制點的符號;pch = 19)實圓點、pch = 20)小實圓點、pch = 21)圓圈、pch = 22)正方形、pch = 23)菱形、pch = 24)正三角尖、pch= 25)倒三角尖,其中,21-25可以填充顏色(用bg參數)

注2:lty控制連線的線型,可以是整數(1: 實線,2: 虛線,3: 點線,4: 點虛線,5: 長虛線,6: 雙虛線),或者是不超過8個字符的字符串(字符為從"0"到"9"之間的數字)交替地指定線和空白的長度,單位為磅(points)或象素,例如lty="44"和lty=2效果相同。線條虛實樣式:0 )不畫線,1 )實線,2 )虛線,3 )點線,4 )點划線,5 )長划線,6 )點長划線;或者相應設置如下字符串(分別對應前面的數字):'blank', 'solid', 'dashed', 'dotted', 'dot dash', 'longdash', 'twodash';還可以用由十六進制的數字組成 的字符串表示線上實線和空白的相應長度,如'F624'

 

 

案例04-添加圖例

cars <- c(1, 3, 6, 4, 9)

trucks <- c(2, 5, 4, 5, 12)

g_range <- range(0, cars, trucks)

plot(cars, type="o", col="blue", ylim=g_range, axes=FALSE, ann=FALSE) #axes=FALSE, ann=FALSE表示不繪制坐標軸與標題

axis(1, at=1:5, lab=c("Mon","Tue","Wed","Thu","Fri"))

axis(2, las=1, at=4*0:g_range[2])

# axis(),2表示坐標軸在左側,at=4*0:g_range[2]表示刻度范圍為(0:g_range[2]),#每4個單位顯示一個刻度

box()

lines(trucks, type="o", pch=22, lty=2, col="red")

title(main="Autos", col.main="red", font.main=4) #添加總標題

title(xlab="Days", col.lab=rgb(0,0.5,0)) # 添加x軸標題

title(ylab="Total", col.lab=rgb(0,0.5,0)) # 添加y軸標題

legend(1, g_range[2], c("cars","trucks"), cex=0.8, col=c("blue","red"), pch=21:22, lty=1:2);

# legend(),1,g_range[2]表示圖例左上角的坐標;c("cars","trucks")標簽,cex=0.8字體的放大倍數

  

clip_image008[6]

案例 4-添加圖例

 

 

案例5-從文本讀取數據繪圖

將下列數據復制到一個txt文件中,命名為data.txt,放至C盤目錄下

cars trucks suvs

1 2 4

3 5 4

6 4 6

4 5 6

9 12 16

autos_data <- read.table("C:/data.txt", header=TRUE, sep=" ") #sep=” “綽號中間為一空格,如果不輸入空格,則會出現數據讀取錯誤

max_y <- max(autos_data)

plot_colors <- c("blue","red","forestgreen")

png(filename="C:/figure.png", height=346, width=460, bg="white") # 將圖片輸出到C目錄,名字為figure.png,大小為346*460,背景色為白色

plot(autos_data$cars, type="o", col=plot_colors[1], ylim=c(0,max_y), axes=FALSE, ann=FALSE)

axis(1, at=1:5, lab=c("Mon", "Tue", "Wed", "Thu", "Fri"))

axis(2, las=1, at=4*0:max_y)

box()

lines(autos_data$trucks, type="o", pch=22, lty=2, col=plot_colors[2])

lines(autos_data$suvs, type="o", pch=23, lty=3, col=plot_colors[3])

title(main="Autos", col.main="red", font.main=4)

title(xlab= "Days", col.lab=rgb(0,0.5,0))

title(ylab= "Total", col.lab=rgb(0,0.5,0))

legend(1, max_y, names(autos_data), cex=0.8, col=plot_colors, pch=21:23, lty=1:3);

dev.off()

  

clip_image009[6]

案例 5-從文本讀取數據繪圖

案例06-輸出圖片到PDF以及坐標軸的控制

autos_data <- read.table("C:/data.txt", header=T, sep=" ")

plot_colors <- c(rgb(r=0.0,g=0.0,b=0.9), "red", "forestgreen")

pdf(file="C:/figure.pdf", height=3.5, width=5)

par(mar=c(4.2, 3.8, 0.2, 0.2)) #mar控制繪圖區別的大小,4個數字代表繪圖區域距離下,左,上,右邊界的行數,類似的mai則是英寸數

plot(autos_data$cars, type="l", col=plot_colors[1], ylim=range(autos_data), axes=F, ann=T, xlab="Days",ylab="Total", cex.lab=0.8, lwd=4)

axis(1, lab=F)

text(axTicks(3), -0.8, srt=45, adj=0.5,labels=c("Mon", "Tue", "Wed", "Thu", "Fri"),xpd=T, cex=0.8)

# axTicks()函數的功能是計算坐標軸,取值分別為1,2,3,4。1是計算下方坐標軸,2是左,3是上,4是右。

# text()函數的前兩個數字是說明坐標軸標簽的位置,str=標簽傾斜的角度,adj取值為0到1,精細調整坐標軸的左右位置,0是最左邊,1是最右邊,0.5居中

axis(2, las=1, cex.axis=0.8)

box()

lines(autos_data$trucks, type="l", lty=2, lwd=2, col=plot_colors[2])

lines(autos_data$suvs, type="l", lty=3, lwd=2, col=plot_colors[3])

legend("topleft", names(autos_data), cex=0.8, col=plot_colors, lty=1:3, lwd=2, bty="n");

# bty控制圖形邊框形狀,可用的值為: "o", "l", "7", "c", "u" 和"]" (邊框和字符 的外表相像);這些字符本身的形狀對應着邊框樣式,比如(默認值)o表示四條邊都顯示,而c表示不顯示右側邊如果bty="n"則不繪制邊框

dev.off()

par(mar=c(5, 4, 4, 2) + 0.1) #恢復邊界默認值

  

clip_image011[6]

案例 6-輸出圖片到PDF以及坐標軸的控制

案例07-簡單條形圖

Bar Charts

cars <- c(1, 3, 6, 4, 9)

barplot(cars)

  

clip_image013[6]

案例 7-簡單條形圖

案例08-條形圖加標簽

autos_data <- read.table("C:/data.txt", header=T, sep=" ")

barplot(autos_data$cars, main="Cars", xlab="Days",ylab="Total", names.arg=c("Mon","Tue","Wed","Thu","Fri"),border="blue", density=c(10,20,30,40,50))

# density控制條形圖中斜線的密度

  

clip_image014[6]

案例 8-條形圖加標簽

 

 

案例09-分組條形圖

autos_data <- read.table("C:/data.txt", header=T, sep=" ")

data <- as.matrix(autos_data) #轉化為矩陣

barplot(data, main="Autos", ylab= "Total",beside=TRUE, col=rainbow(5))
legend("topleft",c("Mon","Tue","Wed","Thu","Fri"),cex=0.6,bty="n", fill=rainbow(5));

  

 

 

clip_image015[6]

案例 9-分組條形圖

 

 

案例10-條形圖的堆疊

autos_data <- read.table("C:/data.txt", header=T, sep=" ")

par(xpd=T, mar=par()$mar+c(0,0,0,4))

# xpd對超出邊界的圖形的處理方式;取值FALSE把圖形限制在作圖區域內,出界的圖形截去;取值TRUE出界的圖形不截去

barplot(t(autos_data), main="Autos", ylab="Total", col=heat.colors(3), space=0.2, cex.axis=0.8, las=1,names.arg=c("Mon","Tue","Wed","Thu","Fri"), cex=0.8)

# space為條形間隔,las 坐標軸標簽樣式;取0、1、2、3四個整數之一,分別表示“總是平行於坐標軸”、“總是水平”、“總是垂直於坐標軸”和“總是豎直”。

legend(6.2, 30, names(autos_data), cex=0.8, fill=heat.colors(3));

par(mar=c(5, 4, 4, 2) + 0.1)

  

clip_image016[6]

案例 10-條形圖的堆疊

 

 

案例11-直方圖

suvs <- c(4,4,6,6,16)

hist(suvs)

  

clip_image017[6]

案例 11-直方圖

 

 

案例12-直方圖2

autos_data <- read.table("C:/data.txt", header=T, sep=" ")

autos <- c(autos_data$cars, autos_data$trucks, autos_data$suvs)

hist(autos, col="lightblue", ylim=c(0,10))

  

clip_image018[6]

案例 12-直方圖2

 

 

案例13-直方圖3

autos_data <- read.table("C:/data.txt", header=T, sep=" " )

autos <- c(autos_data$cars, autos_data$trucks, autos_data$suvs)

max_num <- max(autos)

hist(autos, col=heat.colors(max_num), breaks=max_num, xlim=c(0,max_num), right=T, main="Autos Histogram", las=1)

# right = TRUE (默認)直方圖的范圍是(a, b]左開右閉,right = FALSE區間為[a, b)

  

clip_image019[6]

案例 13-直方圖3

 

 

案例14-不均勻間隔直方圖

autos_data <- read.table("C:/data.txt", header=T, sep=" ")

autos <- c(autos_data$cars, autos_data$trucks, autos_data$suvs)

max_num <- max(autos)

brk <- c(0,3,4,5,6,10,16) # 建立不均勻的區間

hist(autos, col=heat.colors(length(brk)), breaks=brk,

xlim=c(0,max_num), right=F, main="Probability Density",

las=1, cex.axis=0.8, freq=F)

  

clip_image020[6]

案例 14-不均勻間隔直方圖

 

 

案例15-對數正態分布

r <- rlnorm(1000)

hist(r)

  

clip_image021[6]

案例 15-對數正態分布

 

 

案例16-餅圖

cars <- c(1, 3, 6, 4, 9)

pie(cars)

  

clip_image023[6]

案例 16-餅圖

 

 

案例17-餅圖2

cars <- c(1, 3, 6, 4, 9)

pie(cars,main="Cars",col=rainbow(length(cars)),labels=c("Mon","Tue","Wed","Thu","Fri"))

  

clip_image025[6]

案例 17-餅圖2

 

 

案例18-餅圖3

cars <- c(1, 3, 6, 4, 9)

colors <- c("white","grey70","grey90","grey50","black")

car_labels <- round(cars/sum(cars) * 100, 1)

car_labels <- paste(car_labels, "%", sep="")

pie(cars, main="Cars", col=colors, labels=car_labels,cex=0.8)

legend(1.5, 0.5, c("Mon","Tue","Wed","Thu","Fri"), cex=0.8,

fill=colors)

  

clip_image027[6]

案例 18-餅圖3

 

 

案例19-點圖

autos_data <- read.table("C:/data.txt", header=T, sep=" ")

dotchart(t(autos_data))

  

clip_image029[6]

案例 19-點圖

 

 

案例20-點圖上色

autos_data <- read.table("C:/data.txt", header=T, sep=" ")

dotchart(t(autos_data), color=c("red","blue","darkgreen"),

main="Dotchart for Autos", cex=0.8)

  

clip_image030[6]

案例 20-點圖上色

 

 

案例21-Misc

plot(1, 1, xlim=c(1,5.5), ylim=c(0,7), type="n", ann=FALSE)

text(1:5, rep(6,5), labels=c(0:4), cex=1:5, col=1:5)

# text(1:5, rep(6,5))表示其坐標,分別為(1,6),(2,6),(3,6),(4,6),(5,6)

points(1:5, rep(5,5), cex=1:5, col=1:5, pch=0:4) # 添加點,倍數逐步放大

text((1:5)+0.4, rep(5,5), cex=0.6, (0:4)) # 添加文字0到4

points(1:5, rep(4,5), cex=2, pch=(5:9)) #添加點,類型為pch=5到9

text((1:5)+0.4, rep(4,5), cex=0.6, (5:9)) # 添加文字5到9,(5:9)表示添加的文字

points(1:5, rep(3,5), cex=2, pch=(10:14))

text((1:5)+0.4, rep(3,5), cex=0.6, (10:14))

points(1:5, rep(2,5), cex=2, pch=(15:19))

text((1:5)+0.4, rep(2,5), cex=0.6, (15:19))

points((1:6)*0.8+0.2, rep(1,6), cex=2, pch=(20:25))

text((1:6)*0.8+0.5, rep(1,6), cex=0.6, (20:25))

  

clip_image032[6]

案例 21-Misc

 

參考鏈接:

1. R語言畫曲線圖

2. R語言繪圖漸進

3. 如何用R畫折線圖,散點圖,平滑曲線圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM