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
相关推荐
步行cgn19 分钟前
GZIPOutputStream 类详解
java·开发语言·intellij-idea
HelloZheQ39 分钟前
Java:从入门到精通,你的编程之旅
java·开发语言
清同趣科研1 小时前
R绘图|3分钟复现瑞士“苏黎世大学”Nature全球地图——基于R包ggplot2+sf等
开发语言·r语言
Cyanto1 小时前
Java使用JDBC操作数据库
java·开发语言·数据库
zxctsclrjjjcph1 小时前
【动态规划】子序列问题
开发语言·c++·算法·动态规划·力扣
forth touch1 小时前
C和指针——预处理
c语言·开发语言
工一木子1 小时前
【Java项目脚手架系列】第二篇:JavaWeb项目脚手架
java·开发语言
字节旅行者1 小时前
如何使用VSCode编写C、C++和Python程序
开发语言·c++·ide·vscode·python·编辑器
Sheep Shaun2 小时前
C++ STL简介:构建高效程序的基石
开发语言·数据结构·c++·算法
翀哥~2 小时前
告别(Python)if elif else错误使用方法
开发语言·python·if elif else