前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >53-R可视化-二-基础包绘图的入门功夫

53-R可视化-二-基础包绘图的入门功夫

作者头像
北野茶缸子
发布2021-12-17 10:48:55
1.3K0
发布2021-12-17 10:48:55
举报
文章被收录于专栏:北野茶缸子的专栏

虽然现在ggplot 的优雅的图像语法已经非常多了。可还是偶有base 绘图的使用场景:

  • 简单了解数据分布,几个字母搞定;
  • 前人的绘图代码是base 跑的。

技多不压身~~

开始前

我们直接使用R 中自带的数据框 mtcars 进行处理:

代码语言:javascript
复制
Format:

     A data frame with 32 observations on 11 (numeric) variables.

       [, 1]  mpg   Miles/(US) gallon                        
       [, 2]  cyl   Number of cylinders                      
       [, 3]  disp  Displacement (cu.in.)                    
       [, 4]  hp    Gross horsepower                         
       [, 5]  drat  Rear axle ratio                          
       [, 6]  wt    Weight (1000 lbs)                        
       [, 7]  qsec  1/4 mile time                            
       [, 8]  vs    Engine (0 = V-shaped, 1 = straight)      
       [, 9]  am    Transmission (0 = automatic, 1 = manual) 
       [,10]  gear  Number of forward gears                  
       [,11]  carb  Number of carburetors         

> str(mtcars)
'data.frame': 32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

使用attach 方便对该数据框的调用,结束处理后不要忘记detach一下。

代码语言:javascript
复制
attach(mtcars)
> length(wt)
[1] 32

让我们初次尝试一下吧~

代码语言:javascript
复制
> plot(wt, mpg) # 散点图,wt~mpg 作图
> abline(lm(mpg~wt)) # 添加直线,为两个变量拟合结果
> title("Our first plot") # 添加标题

image.png

1)图形对象类型

代码语言:javascript
复制
plot() # 散点图
hist() # 直方图
barplot() # 条形图
boxplot() # 箱线图

2)图形参数

通过type,我们可以让散点图中的点连接起来:

代码语言:javascript
复制
> plot(1:5, 1:5, type = 'b')

image.png

par

我们可以通过图形参数par 统一修改一幅图形的多个特征(字体、颜色、坐标、标签等)。文档中的介绍:

代码语言:javascript
复制
?par

Description:

     ‘par’ can be used to set or query graphical parameters.
     Parameters can be set by specifying them as arguments to ‘par’
     in ‘tag = value’ form, or by passing them as a list of tagged
     values.

在每一句的开头我们可以保存默认的图形参数设置,这样以便于还原初始的图形参数:

代码语言:javascript
复制
opar = par(no.readonly = TRUE)

# 结束绘图后再恢复
par(opar)

我们可以修改par 中的参数来对图形进行修改:

代码语言:javascript
复制
cex # 图形属性的缩放倍数,默认为1,如1.5 为原来的1.5倍。

# 1.符号和线条
lty # 线条类型,如2 为虚线
lwd # 线条的宽度,如1 为最粗
pch # 点符号类型,如17 为实心三角

# 2. 颜色
col # 默认绘图颜色,如 col = c('red', 'blue')
col.axis # 坐标轴刻度的颜色
col.lab # 坐标轴的名字颜色
col.main # 标题的名字颜色
col.sub # 副标题的名字颜色
fg # 图形的前景色
bg # 图形的后景色

# 3. 文本属性
cex.axis # 同cex,只是控制坐标轴刻度文字的缩放倍数。
cex.lab # 坐标轴名称缩放。
cex.main # 标题的缩放。
cex.sub # 副标题的缩放。
font # 整数。指定绘图使用的字体样式。1=常规,2=粗体,3=斜体,5=符号字体 Adobe 编码。
font.axis # 坐标轴刻度字体
font.lab # 坐标轴名称..
font.main
font.sub
ps # 字体磅值,一磅约1/72英寸,文本最终大小为ps*cex。
family # 绘制文本时使用的字体族。
# 标准取值为serif,sans,momo。

# 4. 图形尺寸和边界
pin # 以英寸表示的图形尺寸(宽和高)
mai # 以数值向量表示的边界大小,顺序为下、左、上、右,单位为英寸;如c(1,1,1,1)。
mar # 同上,单位为英分。(十二分之一英寸)

颜色

在R 中,对于颜色,我们还可以通过颜色下标、十六进制的颜色值、RGB值及HSV值来设定。如 col = 1, col = 'white', col = '#FFFFFF', col = (1, 1, 1),col = hsv(0,0,1) 都是表示白色。

我们可以通过如函数colors() 获得所有可用的颜色,如果想要了解更多有关颜色的信息,可以参考:https://www.yuque.com/mugpeng/rr/tuien8/

字体族

对于字体族来说,三种标准取值的映射和设备有关,即Windows 和mac 中结果可能会有不同。mac os 中的serif 字体:

另外我们也可以使用自定义的映射创建,如mac 中,使用函数quartzFonts() 创建:

代码语言:javascript
复制
quartzFonts(
    A=quartzFonts("Arial Black"),
    B=quartzFonts("Bookman Old Style"),
    C=quartzFonts("Comic Sans MS")
) 

在windows中则使用函数windowsFonts(),之后就可以给famliy 赋值使用ABC中的字体了。

如果是生成图片时自定义字体,可以在保存时添加参数,如pdf:

代码语言:javascript
复制
pdf(file = "name.pdf", family = "Bookman Old Style")

就可以保存为指定格式字体,而无需创建映射了。

需要注意的是,在绘图画板上修改,必须创建映射,否则无法对family 进行赋值,出现字体无法显示情况。

3)文本、坐标轴和图例

通过图形参数部分的内容,我们不难发现,除了通过图形函数par 外,许多绘图函数本身也可以设置图形参数:

代码语言:javascript
复制
plot(1:5,2:6, col = c('red'), type = 'b', lty = 6)

image.png

同样的,对于文本、坐标轴、图例这些选项,也可以自行在绘图函数中设定参数。

坐标

title(),有以下参数:

代码语言:javascript
复制
main # 标题
col.main # 标题颜色
sub # 副标题
col.sub # 副标题颜色
xlab # x轴
ylab # y轴
col.lab # 坐标轴名字颜色

# 颜色部分可以在图形参数中记忆,方便记忆

坐标轴

axis(),有以下参数:

代码语言:javascript
复制
side # 整数,表示图形哪边绘制坐标轴,1下,2左,3上,4右。
at # 数值向量,自定义坐标轴的刻度。
labels # 字符型向量,指定刻度线上的文字标签,默认下使用at 的数字直接注释。
pos # 坐标轴线绘制位置的坐标(即与另一条坐标轴相交位置的值)。
las # 标签是否平行,0;或者垂直,2,于坐标轴。
tck # 刻度线的长度,相对于绘图区域的大小分数表示(负值表示在图形外,正表示在图形内,0为禁用,1 为绘制网格线)

范例:

代码语言:javascript
复制
> plot(1:5, ann = F, las = 2)
> axis(side = 1, tck = 1, las = 2)

image.png

参考线

abline(),可以在指定的x或y 轴位置添加参考线,其中h 添加水平实线,v 添加竖直实线:

代码语言:javascript
复制
> plot(1:5)
> abline(h=seq(1,10,2))

image.png

另外,我们可以添加自定义的线段,如开始前中举例的拟合的线段:

代码语言:javascript
复制
> abline(lm(mpg~wt)) # 添加直线,为两个变量拟合结果

图例

legend(),常用选项包括:

代码语言:javascript
复制
x,y # 指定图例所在的坐标位置,坐标可以通过locator 函数获取。
# 也可以直接指定位置,有bottom, bottomleft, top, topleft, center 等。
title # 图例标题的字符串
legend # 图例的名字
horiz # 默认F,T则会水平放置图例

文本标注

text() 或mtext() 可以添加文本到图形上,其中text() 会将文本添加到图形上,而mtext() 则是向图形的四个边界添加文本。

获取位置坐标

如果你是在具有图形界面的系统中使用R,则可以通过下面的函数,在图形界面上选择某个点,获取其坐标:

代码语言:javascript
复制
> locator(1)
# 点一下你的绘图Quartz界面
$x
[1] 1.634064

$y
[1] 4.05972

重置默认设置

一般来说,绘图函数如barplot等,都已经包含了默认的标题和标签,我们可以重置它们:

代码语言:javascript
复制
par(ann = FALSE)

看看哪里不同了~

这么做的主要一个目的就是,如果我们按照默认设置,它可能会给图像画一些我们不想要的东西,比如坐标轴的名称,这时候如果我们不注意,再添加一个名字,则会造成图形堆叠,这个还需要额外的处理,比较麻烦:

代码语言:javascript
复制
> plot(1:5)
> title(xlab = 'ruok')

image.png

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开始前
  • 1)图形对象类型
  • 2)图形参数
    • par
      • 颜色
        • 字体族
        • 3)文本、坐标轴和图例
          • 坐标
            • 坐标轴
              • 参考线
                • 图例
                  • 文本标注
                  • 获取位置坐标
                  • 重置默认设置
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档