转载于R语言中文论坛R语言中文社区

由于R语言基础作图部分内容简单直接,但参数繁多,因此这里不做系统介绍,只挑出几个点来讲一讲。主要介绍R中的颜色系统。

目录

  1. 一个作图示例

  2. 图片的高清保存

  3. par函数使用技巧

  4. 颜色系统

  5. 作图使用中文乱码

  6. 基础作图和数学公式的演示

一个作图示例

下面我们要画出以上图片,当做一些函数和参数使用的例子,代码中的注释会对一些内容作出解释。

x <- 1:5
y <- 5:1
# 生成25个点的网格数据
xy <- expand.grid(y=y,x=x)
# 画25种pch
plot(xy$x-6,xy$y,pch=1:25,col="red",cex=2,xlim=c(-5.5,6),ylim=c(-7,6), # 指定坐标轴范围ann=F,axes=F) # 这两个参数去掉原有边框
text(3-6,12,"points pch=")
text(xy$x+0.4-6,xy$y,as.character(1:25))
# 画6种lty
for(i in 1:6){lines(1:5-6,rep(i*5/6,5)-7,lty=i,col="red",lwd=2)
}
text(3-6,6-7,"lines lty=")
text(rep(5.35,6)-6,1:6*5/6-7,as.character(1:6))
# 画8种type
a <- 1:3
b <- -(1:3/4)
typen <- c("h","p","l","b","o","S","s","n") # n指不画线
for(i in 1:length(typen)){
points(a,b-0.8*i,type=typen[i],col=i+1)
text(0.5,-0.2-0.8*i,typen[i],col=i+1)
}
# 画通过原点的坐标轴
axis(1,c(-5,0,6),pos=0, # 确定轴的坐标为0col.ticks = "transparent",col="grey",col.axis="grey",hadj=-1,padj=-1.5) # 调整刻度名与轴之间的距离
axis(2,c(-7,0,6),pos=0,col.ticks = "transparent",col="grey",col.axis="grey",hadj=1,padj=1.5)
# 画各种图形
segments(0.5,5,2.5,5,col=2) # 指定首尾坐标
text(6,5,"segments(1,5,3,5)",adj=1) # adj=1则文字最左端对应前面指定的坐标
arrows(0.5,4,2.5,4,col=3)
text(6,4,"arrows(1,5,3,5)",adj=1)
rect(0.5,2.7,2.5,3.3,col="transparent",border=4) # 颜色可以设为无色
text(6,3,"rect(0.5,2.7,2.5,3.3)",adj=1)
polygon(c(0.5,2.5,2.5,0.5),c(1.6,1.6,2.4,2.4), # 自动封闭填充颜色col="grey",border=5) # 画多边形
text(6,2,"polygon",adj=1)
legend("bottomright",c("segments","arrows","rect","polygon"),text.col=2:5,lty=1,pch=16,col=2:5,bg="grey",title="legend")

图片的高清保存

图片保存分为两种,一种是plot之后手动保存,一种是通过代码命令保存。

通过代码保存有如下两个好处

  1. 如果一次要循环画出多张图片,同时保存下来,通过代码保存可以实现自动化,大大减少工作量。

  2. 通过代码保存还可以指定图片清晰度。

代码保存方式

保存图片的命令分为两个系统

  1. png bmp jpeg tiff 函数是一类

  2. pdf 函数是一类

这5个函数保存完的图片都以函数名为后缀名。

函数的使用格式是这样的

png("1.png",width=600,height=600) # 指明接下来要做的图形的格式和长宽
plot(x,y)
dev.off() # 关闭图形设备

这样做完图,不会显示在R语言窗口中,而是当前文件夹中会出现一个 1.png 图片。

清晰度说明

pdf函数保存完是pdf格式,是一张矢量图,放大缩小不影响清晰度,在使用latex时,可以直接将其作为图片导入pdf。

而很多时候导入图片不能使用pdf格式,只能用png等函数,不过这些函数保存出来的图片清晰度往往难以令人满意。

下面我们就来说一说如何用png函数增加保存的图片的清晰度。

我们要画以下这张图

下面是探索过程:

  • 注释1:最开始我们尝试将height和width同比例放大,发现图很大文字很小。

  • 注释2:查看png函数的文档,发现res参数可以改变像素,我们增加res试一试,发现文字很大,图变小了小。而且res不能太大,否则就会报错。

  • 目前代码:我们把height width和res增大同样比例试一试。发现图片正常,而且清晰度提高了

typei <- c("p","l","b","o","c","h","S","s","n")
# png("type.png",width=600,height=600) # 原始代码
# png("type.png",width=600*3,height=3*600) # 注释1
# png("type.png",width=600,height=600,res=72*2) # 注释2
png("type.png",width=600*3,height=3*600,res=72*3)
# pdf("type.pdf",height=14)
opar <- par(mfrow=c(3,3))
for(i in 1:length(typei)){
plot(1:10,1:10,type=typei[i],xlab="",ylab="",main=paste('type="',typei[i],'"'))
}
dev.off()par(opar)

par函数使用技巧

读者看到上面的这两条命令可能会觉得奇怪

opar <- par(mfrow=c(3,3))
par(opar)

本来只要

par(mfrow=c(3,3))

全局设置一下就可以了,但是如果这样的话,以后画图都会分成9宫格。使用上面那种形式是为了画完图还原之前的参数,不影响后面的作图。

除了par函数,还有options函数也是如此

op <- options(digits = 2)
(a <- 1.34556) # 1.3
options(op)
(a <- 1.34556) # 1.34556

颜色系统

一个展示颜色的程序

为了更方便地展示颜色,我们先定义一个展示颜色的函数showcolors,以后我们都会用这个函数来展示颜色。

# 默认输入颜色不超过10个,放在一排排列展示,超过10个使用方格展示
# 如果参数style="line"则放在一排排列展示,style="grid"则用方格显示
showcolors <- function(colors,style="two"){
# 使用函数闭包
funv <- list(
# 少量颜色展示,一排展示
showcol1 = function(color){
l1 <- seq_along(color) # 只要将颜色向量赋值给color,就能用柱状图展示
image(l1,1,as.matrix(l1),col=color,ylab="",xlab="",yaxt="n",xaxt="n",bty="n")
},
# 大量颜色使用方格显示
# 颜色向量的排列顺序为,从上到下,从左到右排列
showcols = function(color){
l <- length(color)
x <- ceiling(sqrt(l))
image(1:x,1:x,matrix(1:(x^2),nrow=x)[,x:1],col=c(color,rep(ifelse(is.character(color),"white",0),x^2-l)),ylab="",xlab="",yaxt="n",xaxt="n",bty="n")
})
l <- length(colors)
# 参数选择
# 使用$或[[]]调用闭包函数
switch(style,"line"=funv$showcol1(colors),"two"=funv[[ifelse(l<=10,"showcol1","showcols")]](colors),"grid"=funv$showcols(colors)
)
}
# 实例
mycolor <- colors()[1:30]
showcolors(mycolor)
showcolors(mycolor,"line")

R语言颜色系统

  1. 调用颜色有一下几种方法

  2. 使用颜色名称

  3. 指定rgb或者用3位十六进制数、或hsv

  4. 使用系统自带颜色集

  5. 自己制作渐变色集

  6. 使用颜色包RColorBrewer包

  7. 使用数字

使用颜色名称

使用字符串代表颜色,如 “red”,”black”等。这样R语言自带的可以使用的字符串共有657个,具体颜色与名称对应见chart of r colors

# 用如下命令看颜色的演示
demo("colors")
# colors()代表一个长为657的颜色字符串向量
length(colors()) # 657
colors()[30:35] # "blue4"      "blueviolet" "brown"      "brown1"     "brown2"     "brown3"
# 当你想得到多种红色,可以用下面代码
colors()[grep("red",colors())]
# 看看有哪些颜色(读者自试)
showcolors(colors()[grep("red",colors())])
指定rgb或者用3位十六进制数、或hsv
如果系统自带的颜色不令人满意,我们可以自己指定颜色的rgb。
rgb函数接的参数分别对应 r-red,g-green,b-blue,生成的颜色是由这三个颜色组成
hsv 是Hue, Saturation, Value色调、饱和度、亮度。是绘图的另外一套系统
# 默认三个数在0-1之间
color <- rgb(1,0.5,0.25)
# 由于我们平常使用的rgb都是0-255,我们可以这样
color <- rgb(35,255,76,maxColorValue=255)
# 三个参数接向量可以做出一个颜色向量
color <-rgb(seq(1,255,len=10),16:25,16:25,maxColorValue=255)
showcolors(color)
# 用rgb生成的函数以3个16进制数的字符串表示
# 我们平时去找颜色的时候,有时也能见到这种格式,其实和rgb是等价的,不过用起来更方便
color[1:4] # "#011010" "#1D1111" "#391212" "#551313"
# hsv
mycolor <- hsv(seq(0,0.5,len=10),1:10/15,1:10/10)
showcolors(mycolor)
# 也是用十六进制表示
mycolor[1:4] # "#1A1818" "#332E2C" "#4D473D" "#66664B"
# 提取颜色rgb数值
col2rgb("yellow")

使用系统自带颜色集

R有以下自带颜色集

  1. rainbow() 彩虹色

  2. heat.colors() 红色至黄色

  3. terrain.colors() 绿色、棕色至白色

  4. topo.colors() 深蓝色至浅棕色

  5. cm.colors() 浅蓝到白色、浅紫色

  6. gay()和grey() 灰色

前5个函数接受单个数值作为参数,生成渐变色,数值越大,相邻颜色差别越小

最后一个函数接受一个数值向量,数值为0-1之间

# 简单示例,作图由读者自试
mycolor <- heat.colors(10)
showcolors(mycolor)
# fss中每一个元素作为fun的参数,执行fun函数的命令
fun <- function(f){showcolors(do.call(f,list(30)),"line")mtext(f,side=3,line=-1)
}
fss <- c('rainbow','heat.colors','terrain.colors','topo.colors','cm.colors')
op <- par(mfrow=c(3,2),mar=rep(0.2,4))
lapply(fss,fun)
# gray函数接受参数的模式和三种不同
showcolors(gray(1:30/30),"line")
mtext("gray",side=3,line=-1)
par(op)
# 作图结果见下方

自己制作渐变色集

自己制作渐变色可以使用rgb和hsv函数,也可以使用下面一个函数,指定颜色的渐变

# 下面函数可以建立从一个颜色到另一个颜色的渐变色
a <- colorRampPalette(c("red", "purple"))
showcolors(a(20),"line")
# 可以接受多个颜色渐变
a <- colorRampPalette(c("green","blue","red", "purple"))
showcolors(a(40),"line")

使用颜色包RColorBrewer包

这个包中有三类颜色,个人认为非常好看

  1. seq类,渐变。适用于从低到高排序明显的数据,浅色数字小,深色数字大

  2. div类,对对极值和中间值比较注重的数据

  3. qual类,适用于分类

library(RColorBrewer)
# 展示所有颜色
display.brewer.all(type = "all") # type可以换为"qual","div","seq"
# 使用颜色
mycolors<-brewer.pal(7,"Set1") # 从这个色板中选择7个颜色
display.brewer.pal(n, "RdGy") # 展示这个调色板中的颜色
brewer.pal.info # 查看有哪些调色板

使用数字

数字来表示颜色应该是我们平时最常用的方法了,但是最后讲,是因为它涉及到调色板,我们可以将前面所有颜色放进这个调色板中,定义自己的数字对应颜色。所以等所有颜色都讲完了才讲这里。

数字对应的颜色在调色板中,我们可以用 palette 调出查看,发现有8种默认颜色,对应数字1-8.

palette() # "black"   "red"     "green3"  "blue"    "cyan"    "magenta" "yellow"  "gray"
op <- par(mfrow=c(1,2),mai=rep(0.2,4))
showcolors(1:8)
showcolors(1:16)
par(op)

调色板的作用是便捷、快速地使用,我们可以对其进行更改,使用我们自己喜欢的颜色。

# 读者自己尝试
palette(rainbow(10))
showcolors(1:10)
mycolor <- colors()[1:30]
palette(mycolor)
showcolors(1:10)
# 将调色板设回默认
palette("default")
showcolors(1:10)

作图使用中文乱码

加载showtext包,详情看 https://cos.name/2014/01/showtext-interesting-fonts-and-graphs

基础作图和数学公式的演示

demo(graphics)
demo(plotmath)

R语言绘图、高清保存、以及颜色系统相关推荐

  1. 如何将ppt中的绘图高清保存

    一般用ppt另存为图片的方式保存的图片会比较模糊,放大后锯齿化比较严重,怎样导出高清的图片呢? 步骤: 1.选中ppt中要保存为图片的内容,右键"另存为图片",保存格式为emf或w ...

  2. R语言绘图——实用篇 ggplot2绘图

    文章目录 R语言绘图--实用篇 ggplot2绘图 绘制等值线图相关 如何绘制等值线图 插值,平滑插值 插值,缺失值插值 色条(色阶)划分 图例的色条(色阶)修改,合理的参数值选用 图例的色条(色阶) ...

  3. R语言绘图:实用脑科学数据可视化包

    文章来源于微信公众号(茗创科技),欢迎有兴趣的朋友搜索关注 导读 本文整理了R语言绘图中使用频率较高的程序包,每个程序包都附载相应的参考来源链接(链接里有实现绘图的脚本)和下载链接.另:茗创科技为大家 ...

  4. R语言绘图:28个实用程序包

    本文转载自" 阿虎定量笔记",作者郑连虎,转载己获授权.其他人转载请联系原作者,点我跳转原文. 全文注释 # 示例参考帮助文档 # 我用Rstudio重现了所有示例 # 初识R语言 ...

  5. R语言绘图设备dev

    R语言绘图设备打开: - 调用绘图函数(默认使用屏幕) => 屏幕设备显示图形 => 进一步修饰图形 - 明确指定图形设备[bmp(),tiff(),jpeg(),png()] => ...

  6. 收藏 | 28个R语言绘图的实用程序包!

    作者:郑连虎 来源:阿虎定量笔记 本文约2500字,建议阅读20+分钟. 本文为大家介绍了关于R语言绘图方面28个实用程序包. cartogram 扭曲的地图,以传达统计信息 开发 Sebastian ...

  7. R语言ggplot2移除图例_读书笔记:R语言绘图—ggplot2

    这次给大家带来的是R语言绘图神器-ggplot2绘图包,根据Hadley的说法,这个包的核心思想,是来源于 Leland Wilkinson<The Grammar of Graphics> ...

  8. R语言绘图、数据处理学习记录持续更新

    目录 20220411--基础知识学习 20220412--读写操作和基本函数 20220415--循环语句学习 20220418--数据框的操作 20220419--可视化练习 20230107-- ...

  9. (生物信息学)R语言绘图初-中-高级——3-10分文章必备——Venn图(韦恩图)(初级)

    生物信息学文章的发表要求除了思路和热点以外,图片绘制是否精美也是十分重要的,本专栏为(生物信息学)R语言绘图初-中-高级--3-10分文章必备,主要通过大量文献,总结3-10分文章中高频出现的各种图片 ...

最新文章

  1. 计算机原理说课教案,《 计算机组成原理 》 说课
  2. SonarQube 代码扫描任务集成
  3. 32位网卡驱动 2008_DPDK之网卡收包流程
  4. 打印系统所有维护了sales area的BP id
  5. JVM Class 类文件结构 (系列号2)
  6. HF-NET环境配置与安装
  7. Hyperledger Fabric blockchain explorer 重启
  8. JVM监控及诊断工具命令行篇之jstat
  9. 附件文件超过了服务器的大小,Exchange 2010修改附件大小限制
  10. EasyAR WebAR 开发微信小程序记录
  11. qlv格式转换成mp4 视频格式转换
  12. Java自定义组合控件
  13. 算法快学笔记(九):红黑二叉树
  14. 【imessage群发苹果推信】[iMessageSuspic](Apple推送服务)使用信息推送服务
  15. 关键词(快排)刷词原理和方法
  16. R语言——read.table;read.csv(读取外部数据)
  17. 简易图书管理系统(主要是jsp+servlet的练习),基于jsp+servlet的图书管理系统
  18. GitFlow 代码管理模型实战
  19. 筹码集中度的判断方法
  20. Linux音频驱动(1)

热门文章

  1. 由《成为乔布斯》联想而来
  2. 如何优雅地追回被骗款项(上篇)
  3. DEFI-区块链应用场景最成功的方向之一
  4. vue实现textarea框,文字高度自适应
  5. 一年三轮融资3亿 深睿医疗领跑AI医疗行业
  6. 气象ts评分_中国气象局--国家气候中心--气候系统监测·诊断·预测·评估
  7. (二)如何识别骗子(酒托、咖啡托、各种托)
  8. MarkDown编辑器 - MarkText使用文档
  9. java1000字节是多少汉字_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...
  10. matlab_医学CT重建 ART,SART算法