《R语言与数据挖掘》④R语言数据可视化最全的总结

书籍:《R语言与数据挖掘》

作者:张良均

出版社:机械工业出版社

ISBN:9787111540526

本书由北京华章图文信息有限公司授权杭州云悦读网络有限公司电子版制作与发行

版权所有·侵权必究


图形的元素


plot(iris$Sepal.Length,iris$Sepal.Width,col = 'red')

在这里插入图片描述

colors()[1:20]  # 查看前20种颜色
[1] "white"         "aliceblue"     "antiquewhite"  "antiquewhite1" "antiquewhite2" "antiquewhite3" "antiquewhite4" "aquamarine"   
 [9] "aquamarine1"   "aquamarine2"   "aquamarine3"   "aquamarine4"   "azure"         "azure1"        "azure2"        "azure3"       
[17] "azure4"        "beige"         "bisque"        "bisque1"      

par(mfrow = c(length(colors()) %/% 60 + 1, 1))
par(mar = c(0.1, 0.1, 0.1, 0.1), xaxs = "i",  yaxs = "i")
for (i in 1:(length(colors())%/%60 + 1)) {
  barplot(rep(1, 60), col = colors()[((i - 1) * 60 + 1):(i * 60)], 
          border = colors()[((i - 1) * 60 + 1):(i * 60)], axes = FALSE)
  box() 
}

在这里插入图片描述
一共657种颜色


# # RColorBrewer包展示图
library(RColorBrewer)
par(mar = c(0.1, 3, 0.1, 0.1), mfrow = c(1, 1))
display.brewer.all(type = "seq")

在这里插入图片描述

display.brewer.all(type = "div")

display.brewer.all(type = "qual")

在这里插入图片描述

# 添加点
# 绘制空白画布
plot(1, col = "white", xlim = c(1, 8), ylim = c(1, 7))
symbol <- c("*", "、", ".", "o", "O", "0", " + ", " - ", "|")
# 创建循环添加点
for (i in c(0:34)) {
  x <- (i %/% 5) * 1 + 1
  y <- 6 - (i %% 5)
  if (i > 25) {
    points(x, y, pch = symbol[i - 25], cex = 1.3)
    text(x + 0.5, y + 0.1, labels = paste("pch = ", symbol[i - 25]), cex = 0.8)
  } else {
    if (sum(c(21:25) == i) > 0) { 
      points(x, y, pch = i, bg = "red", cex = 1.3)
    } else {
      points(x, y, pch = i, cex = 1.3)
    }
    text(x + 0.5, y + 0.1, labels = paste("pch = ", i), cex = 0.8)
  }
}


在这里插入图片描述
在这里插入图片描述

# 图形添加标题
x = c(1:20)
y = sin(x)
plot(x,y, col = "white", xlab = "", ylab = "")
title(main = list("主标题", cex = 1.5), sub = list("副标题", cex = 1.2),
      xlab = "x轴标题", ylab = "y轴标题")

在这里插入图片描述

在这里插入图片描述

# 图形添加文本
# 字体
# 绘制空白画布
plot(c(0:5), col = "white")
text(2, 4, labels = "font = 1:正常字体(默认)", font = 1)
text(3, 3, labels = "font = 2:粗体字体", font = 2)
text(4, 2, labels = "font = 3:斜体字体", font = 3)
text(5, 1, labels = "font = 4:粗斜体字体", font = 4)
# 大小
plot(c(0:6), col = "white", xlim = c(1, 8))
text(2, 5, labels = "cex = 0.5:放大0.5倍", cex = 0.5)
text(3, 4, labels = "cex = 0.8:放大0.8倍", cex = 0.8)
text(4, 3, labels = "cex = 1(默认):正常大小", cex = 1)
text(5, 2, labels = "cex = 1.2:放大1.2倍", cex = 1.2)
text(6, 1, labels = "cex = 1.5:放大1.5倍", cex = 1.5)

在这里插入图片描述

#图形周边添加文本
plot(c(0:5), col = "white")
mtext("side = 1:下边", side = 1, line = 2); mtext("side = 2:左边" , side = 2, line = 2)
mtext("side = 3:上边", side = 3); mtext("side = 4:右边" , side = 4) 



在这里插入图片描述

# 添加线
# 线的样式
data <- matrix(rep(rep(1:7), 10), ncol = 10, nrow = 7)
plot(data[1, ], type = "l", lty = 0, ylim = c(1, 8), xlim = c(-1, 10), axes = F)
text(0, 1, labels = "lty = 0")
for (i in c(2:7)) {
  lines(data[i, ], lty = i - 1)
  text(0, i, labels = paste("lty = ", i - 1))
}

在这里插入图片描述

# 线的宽度
data <- matrix(rep(rep(1:6), 10), ncol = 10, nrow = 6)
plot(data[1, ], type = "l", lwd = 0.5, ylim = c(1, 8), xlim = c(-1, 10), axes = F); text(0, 1, labels = "lwd = 0.5")
lines(data[2, ], type = "l", lwd = 0.8);text(0, 2, labels = "lwd = 0.8")
lines(data[3, ], type = "l", lwd = 1);text(0, 3, labels = "lwd = 1")
lines(data[4, ], type = "l", lwd = 1.5);text(0, 4, labels = "lwd = 1.5")
lines(data[5, ], type = "l", lwd = 2);text(0, 5, labels = "lwd = 2")
lines(data[6, ], type = "l", lwd = 4);text(0, 6, labels = "lwd = 4")


在这里插入图片描述
在这里插入图片描述

# 添加参考线
# 绘制空白画布
plot(c(0:10), col = "white")
# 添加水平线
abline(h = c(2, 6, 8))
# 添加垂直线
abline(v = seq(2, 10, 2), lty = 2, col = "blue")
# 添加直线y = 2+x
abline(a = 2, b = 1)

在这里插入图片描述

# 添加线段和箭头
plot(c(0:10), col = "white")
segments(2, 1, 4, 8)
arrows(4, 0, 7, 3, angle = 30)
arrows(4, 2, 7, 5, angle = 60) 

在这里插入图片描述

#添加网格线
plot(c(0:10), col = "white")  # 空白画布
grid(nx = 4, ny = 8, lwd = 1, lty = 2, col = "blue")  # 添加网格线

在这里插入图片描述

#示例代码  :添加坐标轴须
set.seed(123)  # 种子
x <- rnorm(500)  # 生成500个标准正态分布的数据
plot(density(x))  # 绘制核密度曲线
rug(x , col = "blue")  # 添加坐标轴须

在这里插入图片描述

# 	示例:以mtcars数据集为例查看不同的线元素函数的用用法
smpg <- (mpg - min(mpg)) / (max(mpg) - min(mpg))
plot(wt, smpg, ylab = "standardized mpg")
# 添加核密度曲线图
lines(density(wt), col = "red")
# 指向密度曲线的箭头
arrows(1.8, 0.05, 1.5, 0.1, angle = 10, cex = 0.5)
text(2, 0.05, "核密度曲线", cex = 0.6)
# 添加回归线
abline(lm(smpg ~ wt), lty = 2, col = "green")
# 指向回归直线的箭头
arrows(2, 0.5, 2, 0.7, angle = 10, cex = 0.5)
text(2, 0.45, "回归线", cex = 0.6)
# wt与mpg反向线性相关,添加最大最小值线段表现这种关系
segments(min(wt), max(smpg), max(wt), min(smpg), lty = 3, col = "blue")
# 指向最大最小值线段的箭头
arrows(3, 0.8, 2.5, 0.76, angle = 10, cex = 0.5)
text(3.3, 0.8, "最大最小值线段", cex = 0.6)
# 添加网格线作为背景
grid(nx = 4, ny = 5, lty = 2, col = "grey")

在这里插入图片描述

# 使用绘图参数也可也添加线条
par(mfrow = c(1, 3))
plot(density(wt), col = "red")  # 绘制核密度曲线
plot(wt, fitted(lm(smpg ~ wt)), type = "l", lty = 2, col = "green")  # 绘制回归线
plot(seq(min(wt), max(wt), length = 100), seq(max(smpg), min(smpg), length = 100), 
     type = "l", lty = 3, col = "blue")  # 绘制最大、最小值线

在这里插入图片描述

![在这里插入代码片](https://img-blog.csdnimg.cn/7967cd2017e84c2bafda2c7b42ebef8f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA57Sn5Yiw6ZW_5LiN6IOW,size_16,color_FFFFFF,t_70,g_se,x_16)

在这里插入图片描述
legend函数的参数解释
在这里插入图片描述

# 添加坐标轴
plot(c(1:12), col = "white", xaxt = "n", yaxt = "n", ann = FALSE)
axis(1, at = 1:12, col.axis = "red", 
     labels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",  "Aug", 
                "Sep", "Oct", "Nov", "Dec"))
axis(2, at = seq(1, 12, length = 10), col.axis = "red", labels = 1:10, las = 2)
axis(3, at = seq(1, 12, length = 7), col.axis = "blue", cex.axis = 0.7, 
     tck = -.01, labels = c("Mon", "Tues", "Wed", "Thu", "Fri", "Sat", "Sun")) 
axis(4, at = seq(1, 12, length = 10), col.axis = "blue", cex.axis = 0.7, 
     tck = -.01, labels = round(seq(0, 1, length = 10), 1), las = 2)

在这里插入图片描述

图形组合

# 使用par ()展示各图形组合参数用法的示例代码
# 将图形按2行3列摆放
mfrow1 <- par(mfrow = c(2, 3))
for (i in 1:6) {
  plot(c(1:i), main = paste("I'm image:", i))
}
# 改变图形边距
mar1 <- par(mar = c(4, 5, 2, 3))
for (i in 1:6) {
  plot(c(1:i), main = paste("I'm image:", i))
}
par(mar1)  # 去除par()函数mar参数的设置mar1
# 改变外边界宽度
oma1 <- par(oma = c(4, 5, 2, 3))
for (i in 1:6) {
  plot(c(1:i), main = paste("I'm image:", i))
}
par(oma1)  # 去除par()函数oma参数的设置oma1
# 改变坐标轴位置
mgp1 <- par(mgp = c(1, 2, 3))
for (i in 1:6) {
  plot(c(1:i), main = paste("I'm image:", i))
}
par(mgp1)  # 去除par()函数mgp参数的设置mgp1
par(mfrow1)  # 去除par()函数mfrow参数的设置mfrow1

在这里插入图片描述

mat <- matrix(c(1, 1, 2, 3, 3, 4, 4, 5, 5, 6), nrow = 2, byrow = TRUE)
layout(mat)
for (i in 1:6) {
  plot(c(1:i), main = paste("I'm image:", i))
}

在这里插入图片描述

windows()  # 打开图形设备界面
attach(mtcars)
plot(wt, mpg)
X11()  # 打开图形设备界面
plot(wt, mpg)

图像保存

# 使用pdf()函数将图形保存为pdf格式的代码:
pdf("p.pdf")
plot(wt, mpg)    
dev.off()

相似代码可以用于函数win.metafile()、bmp()、tiff()、svg()、postscript()、png()、jpeg()等保存图形。在R中使用菜单命令的方法是选择图形设备界面,点击“文件”菜单下的“另存为”可将图片文件以不同的格式保存。在Rstudio中菜单命令的方法是点击“Export”下的“Save as PDF”将图片保存为pdf格式,点击“Save as Image”选择将图片保存为其他各种格式。

图像函数

在这里插入图片描述

直方图

# 4.4  # 以mtcars为例,生成的直方图
op <- par(mfrow = c(2, 3), mar = c(4, 4, 2, 0.5), mgp = c(2, 0.5, 0))
hist(wt, main = "freq = TRUE")  # 默认的频数直方图,左下,中上,中下,右上,右下
lines(density(wt), col = "blue")
hist(wt, breaks = 5, main = "breaks = 5")  # 减小区间段数的直方图
hist(wt, col = "light blue", main = "colored")  # 给直方图的柱形添加颜色
hist(wt, freq = FALSE, main = "freq = FALSE")  # 概率密度直方图
hist(wt, breaks = 40, main = "breaks = 40")  # 增大区间段数的直方图
# 在直方图上添加密度曲线和正态分布概率密度曲线
hist(wt, freq = FALSE, main = "with density curve and normal curve")   
lines(density(wt), col = "blue")
lines(density(rnorm(1e+6, mean(wt), sd(wt))), lty = 2, col = "red") 
par(op) 

在这里插入图片描述

核密度图

library(sm)  # 加载sm包
par(mfrow = c(1, 1))
sm.density.compare(wt, factor(cyl))  # 绘制核密度图
legend("topright", levels(factor(cyl)), lty = 1:3, col = 2:4, bty = "n")

在这里插入图片描述

绘制的箱线图

set.seed(1234) 
normal <- rnorm(100, mean(wt), sd(wt))  # 生成100个正态分布数据
op <- par(mfrow = c(1, 3))
boxplot(list(wt, normal), xaxt = "n")  # 绘制箱线图
axis(1, at = 1:2, labels = c("wt", "normal"))  # 添加坐标轴
rug(wt, side = 2, col = 2); rug(normal, side = 4, col = 3)  # 添加坐标轴须 
legend("bottomleft", c("wt", "normal"), lty = 1, col = 2:3, bty = "n")  # 添加图例
boxplot(list(wt, normal), xaxt = "n", varwidth = TRUE)
rug(wt, side = 2, col = 2); rug(normal, side = 4, col = 3) 
axis(1, at = 1:2, labels = c("wt", "normal"))
legend("bottomleft", c("wt", "normal"), lty = 1, col = 2:3, bty = "n")
boxplot(wt ~ cyl)
rug(wt[cyl == 4], side = 2, col = 2); rug(wt[cyl == 6], side = 4, col = 3)
rug(wt[cyl == 8], side = 2, col = 4)
legend("topleft", c("4", "6", "8"), lty = 1, col = 2:4, bty = "n")
par(op)

在这里插入图片描述

绘制的小提琴图

# 页面分割掉1/2,为与箱线图和核密度图对比而作,小提琴图只需要第二个语句即可
par(fig = c(0, 1, 0.5, 1), mfrow = c(2, 1))
# 绘制小提琴图
library(vioplot)
vioplot(wt[cyl == 4], wt[cyl == 6], wt[cyl == 8], border = "black", 
        col = "light green", rectCol = "blue", horizontal = TRUE)
# 分割另外1/2页面
par(fig = c(0, 1, 0, .5), mar = c(0, 2, 0, 0.5) , new = TRUE)
# 绘制箱线图
boxplot(wt ~ cyl, horizontal = TRUE, pars = list(boxwex = 0.1), border = "blue")
# 在箱线图上叠加核密度图
par(fig = c(0, 0.53, 0.1, 0.2), new = TRUE)
plot(density(wt[cyl == 4], bw = 0.3), xaxt = "n", yaxt = "n", ann = FALSE, bty = "n")
par(fig = c(0.26, 0.56, 0.25, 0.35), new = TRUE)
plot(density(wt[cyl == 6], bw = 0.3), xaxt = "n", yaxt = "n", ann = FALSE, bty = "n")
par(fig = c(0.33, 1, 0.4, 0.5), new = TRUE)
plot(density(wt[cyl == 8], bw = 0.5), xaxt = "n", yaxt = "n", ann = FALSE, bty = "n")

在这里插入图片描述

绘制的条形图

bardata <- table(cyl, carb)  # 得到表格数据
pal <- RColorBrewer::brewer.pal(3, "Set1")  # 颜色调配
op <- par(mfrow = c(2, 2), mar = c(3, 3, 3, 2), mgp = c(1.5, 0.5, 0))  
barplot(bardata, col = pal, beside = TRUE, xlab = "carb")  # 分组条形图
legend("topright", c("4", "6", "8"), pch = 15, col = pal, bty = "n")
barplot(bardata, col = pal, xlab = "carb")  # 默认堆砌条形图
legend("topright", c("4", "6", "8"), pch = 15, col = pal, bty = "n")
barplot(bardata, col = pal, beside = TRUE, horiz = TRUE, ylab = "carb")  # 水平放置的条形图
legend(5.3, 26, c("4", "6", "8"), pch = 15, col = pal, bty = "n", cex  =  0.6)
barplot(bardata, col = pal, beside = TRUE, ylim = c(0, 7), xlab = "carb")     
legend("topright", c("4", "6", "8"), pch = 15, col = pal, bty = "n")
# 显示数值
text(labels = as.vector(bardata), cex = 0.7, x = c(1.5:23.5)[1:23 %% 4 > 0], 
     y = as.vector(bardata) + 0.5)
par(op)

在这里插入图片描述

绘制点图

dotchart(bardata, bg = pal) 

在这里插入图片描述

## 绘制饼图

```r
percent <- as.vector(table(cyl)) / sum(as.vector(table(cyl))) * 100  # 计算百分比
pie(table(cyl), labels = paste(c("4", "6", "8"), "cylinders:", percent, "%"))  # 画饼图

在这里插入图片描述

用methods()查plot()的作图方法:

methods("plot")

用plot()函数画几种图形

plot(density(wt), type = "l")
class(density(wt))  # 第一个参数density类,画核密度曲线
plot(table(cyl, vs)); class(table(cyl, vs))  # 第一个参数table类,画马赛克图
opr <- par(mfrow = c(2, 3), mar = c(4, 4, 2, 4))    
for (i in 1:6) {
  plot(lm(mpg ~ wt), i)  # 第一个参数lm类,画回归诊断图
}
par(opr); class(lm(mpg ~ wt))
plot(mtcars[, c(1, 3:7)])
class(mtcars[, c(1, 3:7)])  # 第一个参数data.frame类,画散点图矩阵

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

绘制plot()函数的不同图形类型

x <- seq(from = 0, to = 2*pi, length = 10)  # 取10个x值
y <- sin(x)  # 计算相对应的y值
type <- c("p", "l", "b", "o", "c", "h", "s", "S", "n" )  # 图形类型向量
op <- par(mfrow = c(3, 3), mar = c(4, 4, 1, 1))
for (i in 1:9) {
  plot(x, y, type = type[i] , main = paste("type:", type[i]))
}
par(op)  

在这里插入图片描述

绘制散点图矩阵


# 绘图对象为公式
pairs( ~ mpg + disp + drat + wt, data = mtcars, col = as.integer(factor(cyl)) + 1, 
      main = "Scatter Plot Matrix")
# 绘图对象为数据框
pairs(mtcars[, c(1, 3, 5, 6)], col = as.integer(factor(cyl)) + 1, 
      main = "Scatter Plot Matrix")

在这里插入图片描述

以mtcars为例,绘制QQ图

op <- par(mfrow = c(1, 2))
attach(mtcars)
qqnorm(wt)  # 正态分布QQ图
qqline(wt)  # QQ线
qqplot(qt(ppoints(length(wt)), df  =  5), wt, xlab  =  "Theoretical Quantiles", 
       ylab  =  "Sample Quantiles", main  =  "Q-Q plot for t dsn")  # t分布QQ图
qqline(wt)  # QQ线
par(op)

在这里插入图片描述

绘制马赛克图

mosaicdata <- ftable(cyl, vs)  # 二维列联表
par(mfrow = c(1, 1))
mosaicplot(mosaicdata, shade = TRUE, main = "")  # 绘制马赛克图

在这里插入图片描述

绘制星状图

pal <- RColorBrewer::brewer.pal(11, "Set1")
op <- par(mai = c(0.3, 0, 0, 0))
stars(mtcars, len = 1, key.loc = c(16, 1.5), col.segments = pal, 
      ncol = 9, main = "", draw.segments = TRUE)
par(op)

在这里插入图片描述

绘制向日葵散点图

sunflowerplot(mpg, cyl, col = "green", seg.col = "light green")

在这里插入图片描述

绘制等高图

mtcars1 <- data.frame(wt, mpg)  
library(KernSmooth)
est <- bkde2D(mtcars1, apply(mtcars1, 2, dpik))  # 计算二维核密度
contour(est$x1, est$x2, est$fhat, nlevels  = 15, col = "darkgreen", 
        xlab = "wt", ylab = "mpg")  # 画等高图
points(mtcars1)

在这里插入图片描述

绘制热图

heatmap(as.matrix(mtcars), col = pal, scale = "column")

在这里插入图片描述

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wency(王斯-CUEB)

我不是要饭的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值