R语言——散点图

参考资料:学习R

1、base绘图法

base中用于绘制散点图的函数就是plot函数。plot函数会简单地忽略缺失值。如果要调用一个数据框的不同列,需要把它们包括在with函数中进行调用。

R 复制代码
data("obama_vs_mccain",package="learningr")
head(obama_vs_mccain)
obama_vs_mccain<-obama_vs_mccain[!is.na(obama_vs_mccain$Turnout),]
with(obama_vs_mccain,plot(Income,Turnout))

plot函数有很多参数用于自定义输出格式。col能改变点的颜色,它可以接受任何通过colors返回的已命名颜色,或者向"#123456"的HTML风格的十六进制值。我们可以使用pch(即plot character绘制字符的缩写)来改变点的形状。

R 复制代码
with(obama_vs_mccain,plot(Income,Turnout,col="violet",pch=20))
R 复制代码
plot(1:25,pch=1:25,bg="blue")

我们可以通过设置log参数来设置对数坐标。log="x"表示使用x轴为对数坐标,log="y"表示使用y轴为对数坐标,而log="xy"则表示同时使用x和y轴作为对数坐标。

R 复制代码
with(obama_vs_mccain,plot(Income,Turnout,log="xy"))

通过散点图,我们还可以查看数据的相关关系。layout函数可以用来控制矩阵中多个绘图区的布局。

R 复制代码
par(mar=c(3,3,0.5,0.5),oma=rep.int(0,4),mgp=c(2,1,0))
regions<-levels(obama_vs_mccain$Region)
plot_numbers<-seq_along(regions)
layout(matrix(plot_numbers,ncol=5,byrow=TRUE))
for(region in regions){
  regional_data<-subset(obama_vs_mccain,Region==region)
  with(obama_vs_mccain,plot(Income,Turnout))
}

2、lattice图形系统

lattice版本中plot是xyplot。它使用了一个公式接口来指定x和y坐标变量。xyplot函数需要一个data参数,用这个参数告诉函数要从那个数据框中寻找变量。

R 复制代码
library(lattice)
xyplot(Turnout~Income,obama_vs_mccain)

lattice很多用于改变绘图功能的选项与base系统基本相同。如下:

R 复制代码
xyplot(Turnout~Income,obama_vs_mccain,pch=20,col="violet")

轴的尺度需要以不同的方式指定。lattice绘图接受一个scales参数,而且它必须是一个列表。 这个列表里的内容必须是 name = value 对,例如,log = TRUE 为 x 和 y 轴设置了对数坐标。 scales 列表还可以接受其他命名为 x 和 y 的(子) 列表参数来指定其中所需的轴的设置。如下:

R 复制代码
xyplot(
  Turnout~Income,
  obama_vs_mccain,
  scales=list(log=TRUE)  # x和y轴都是对数坐标
)
xyplot(
  Turnout~Income,
  obama_vs_mccain,
  scales=list(y=list(log=TRUE))  # y轴对数坐标
)

公式接口可以使按区域拆分数据变得更容易。我们只需要追加一个|符号和我们希望拆分的变量,这里是region。使用参数relation="same"意味着每个面板都将使用相同的轴。当参数alternating为TRUE(默认)时,每个面板上轴的刻度将在绘图区的两侧交替出现,否则只出现在左侧和底部:

R 复制代码
xyplot(
  Turnout~Income | Region,
  obama_vs_mccain,
  scales=list(
    log=TRUE,
    relation="same",
    alternating=FALSE
  ),
  layout=c(5,2)
)

lattice系统的另一个好处是它能把绘图存储在变量中(base只能把绘图绘制在窗口),因而可在之后更改它们。

R 复制代码
lat1<-xyplot(
  Turnout~Income | Region,
  obama_vs_mccain
)
lat1

lat2<-update(lat1,col="violet",pch=20)
lat2

3、ggplot2图形系统

每个绘图由ggplot函数创建,它的第一个参数是一个数据框,第二参数是aesthetic。其实就是把x和y列变量传递个aes函数。然后我们再添加一个geom让图形系统显示一些点:

R 复制代码
library(ggplot2)
ggplot(obama_vs_mccain,aes(Income,Turnout))+
  geom_point()

ggplot2不仅能识别来自base图形系统的命令来改变点的颜色和形状,而且也有自己的一套更加可读的名称。用shape取代了pch,color取代了col

R 复制代码
ggplot(obama_vs_mccain,aes(Income,Turnout))+
  geom_point(col="violet",pch=20)

# 或用
ggplot(obama_vs_mccain,aes(Income,Turnout))+
  geom_point(color="violet",shape=20)

为了设置一个对数坐标,我们需要为每个轴添加一个标度。break参数指定了轴刻度值得位置。它是可选的:

R 复制代码
ggplot(obama_vs_mccain,aes(Income,Turnout))+
  geom_point()+
  scale_x_log10(breaks=seq(2e4,4e4,1e4))+
  scale_y_log10(breaks=seq(50,75,5))

为了把绘图分割成不同的面板,我们添加一个切面(facet)。与lattice中的绘图类似,切面带有一个公式参数。

R 复制代码
ggplot(obama_vs_mccain,aes(Income,Turnout))+
  geom_point()+
  scale_x_log10(breaks=seq(2e4,4e4,1e4))+
  scale_y_log10(breaks=seq(50,75,5))+
  facet_wrap(~Region,ncol=5)

为了将多个变量分开,我们把公式指定为类似~var1+var2+var3的形式。对于只有两个变量的特殊情况,facet_grid提供了另一种方法来分开它们,一个置于行中,而另一个置于列中。

与lattice类似,ggplot函数也可以把图形存储到变量中,然后继续在它上面添加东西。:

R 复制代码
gg1<-ggplot(obama_vs_mccain,aes(Income,Turnout))+
  geom_point()
gg1
gg2<-gg1+
  facet_wrap(~Region,ncol=5)+
  theme(axis.text.x=element_text(angle=30,hjust=1))
gg2
相关推荐
她说人狗殊途5 分钟前
java.net.InetAddress
java·开发语言
天使day9 分钟前
Cursor的使用
java·开发语言·ai
Dxy123931021635 分钟前
Python ExcelWriter详解:从基础到高级的完整指南
开发语言·python
源代码•宸2 小时前
C++高频知识点(十三)
开发语言·c++·经验分享·面经
wa的一声哭了3 小时前
python基础知识pip配置pip.conf文件
java·服务器·开发语言·python·pip·risc-v·os
Kay_Liang3 小时前
MySQL SQL语句精要:DDL、DML与DCL的深度探究
开发语言·数据库·sql·mysql·database
流形填表3 小时前
AI 助力:如何批量提取 Word 表格字段并导出至 Excel
开发语言·人工智能·word·excel·办公自动化
每天吃饭的羊3 小时前
箭头函数(Arrow Functions)和普通函数(Regular Functions)
开发语言·javascript·ecmascript
寻觅~流光4 小时前
封装---统一封装处理页面标题
开发语言·前端·javascript·vue.js·typescript·前端框架·vue
geovindu4 小时前
Java: OracleHelper
java·开发语言·oracle