R语言绘图、高清保存、以及颜色系统
转载于R语言中文论坛R语言中文社区
由于R语言基础作图部分内容简单直接,但参数繁多,因此这里不做系统介绍,只挑出几个点来讲一讲。主要介绍R中的颜色系统。
目录
一个作图示例
图片的高清保存
par函数使用技巧
颜色系统
作图使用中文乱码
基础作图和数学公式的演示
一个作图示例
下面我们要画出以上图片,当做一些函数和参数使用的例子,代码中的注释会对一些内容作出解释。
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之后手动保存,一种是通过代码命令保存。
通过代码保存有如下两个好处
如果一次要循环画出多张图片,同时保存下来,通过代码保存可以实现自动化,大大减少工作量。
通过代码保存还可以指定图片清晰度。
代码保存方式
保存图片的命令分为两个系统
png bmp jpeg tiff 函数是一类
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语言颜色系统
调用颜色有一下几种方法
使用颜色名称
指定rgb或者用3位十六进制数、或hsv
使用系统自带颜色集
自己制作渐变色集
使用颜色包RColorBrewer包
使用数字
使用颜色名称
使用字符串代表颜色,如 “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有以下自带颜色集
rainbow() 彩虹色
heat.colors() 红色至黄色
terrain.colors() 绿色、棕色至白色
topo.colors() 深蓝色至浅棕色
cm.colors() 浅蓝到白色、浅紫色
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包
这个包中有三类颜色,个人认为非常好看
seq类,渐变。适用于从低到高排序明显的数据,浅色数字小,深色数字大
div类,对对极值和中间值比较注重的数据
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语言绘图、高清保存、以及颜色系统相关推荐
- 如何将ppt中的绘图高清保存
一般用ppt另存为图片的方式保存的图片会比较模糊,放大后锯齿化比较严重,怎样导出高清的图片呢? 步骤: 1.选中ppt中要保存为图片的内容,右键"另存为图片",保存格式为emf或w ...
- R语言绘图——实用篇 ggplot2绘图
文章目录 R语言绘图--实用篇 ggplot2绘图 绘制等值线图相关 如何绘制等值线图 插值,平滑插值 插值,缺失值插值 色条(色阶)划分 图例的色条(色阶)修改,合理的参数值选用 图例的色条(色阶) ...
- R语言绘图:实用脑科学数据可视化包
文章来源于微信公众号(茗创科技),欢迎有兴趣的朋友搜索关注 导读 本文整理了R语言绘图中使用频率较高的程序包,每个程序包都附载相应的参考来源链接(链接里有实现绘图的脚本)和下载链接.另:茗创科技为大家 ...
- R语言绘图:28个实用程序包
本文转载自" 阿虎定量笔记",作者郑连虎,转载己获授权.其他人转载请联系原作者,点我跳转原文. 全文注释 # 示例参考帮助文档 # 我用Rstudio重现了所有示例 # 初识R语言 ...
- R语言绘图设备dev
R语言绘图设备打开: - 调用绘图函数(默认使用屏幕) => 屏幕设备显示图形 => 进一步修饰图形 - 明确指定图形设备[bmp(),tiff(),jpeg(),png()] => ...
- 收藏 | 28个R语言绘图的实用程序包!
作者:郑连虎 来源:阿虎定量笔记 本文约2500字,建议阅读20+分钟. 本文为大家介绍了关于R语言绘图方面28个实用程序包. cartogram 扭曲的地图,以传达统计信息 开发 Sebastian ...
- R语言ggplot2移除图例_读书笔记:R语言绘图—ggplot2
这次给大家带来的是R语言绘图神器-ggplot2绘图包,根据Hadley的说法,这个包的核心思想,是来源于 Leland Wilkinson<The Grammar of Graphics> ...
- R语言绘图、数据处理学习记录持续更新
目录 20220411--基础知识学习 20220412--读写操作和基本函数 20220415--循环语句学习 20220418--数据框的操作 20220419--可视化练习 20230107-- ...
- (生物信息学)R语言绘图初-中-高级——3-10分文章必备——Venn图(韦恩图)(初级)
生物信息学文章的发表要求除了思路和热点以外,图片绘制是否精美也是十分重要的,本专栏为(生物信息学)R语言绘图初-中-高级--3-10分文章必备,主要通过大量文献,总结3-10分文章中高频出现的各种图片 ...
最新文章
- 计算机原理说课教案,《 计算机组成原理 》 说课
- SonarQube 代码扫描任务集成
- 32位网卡驱动 2008_DPDK之网卡收包流程
- 打印系统所有维护了sales area的BP id
- JVM Class 类文件结构 (系列号2)
- HF-NET环境配置与安装
- Hyperledger Fabric blockchain explorer 重启
- JVM监控及诊断工具命令行篇之jstat
- 附件文件超过了服务器的大小,Exchange 2010修改附件大小限制
- EasyAR WebAR 开发微信小程序记录
- qlv格式转换成mp4 视频格式转换
- Java自定义组合控件
- 算法快学笔记(九):红黑二叉树
- 【imessage群发苹果推信】[iMessageSuspic](Apple推送服务)使用信息推送服务
- 关键词(快排)刷词原理和方法
- R语言——read.table;read.csv(读取外部数据)
- 简易图书管理系统(主要是jsp+servlet的练习),基于jsp+servlet的图书管理系统
- GitFlow 代码管理模型实战
- 筹码集中度的判断方法
- Linux音频驱动(1)
热门文章
- 由《成为乔布斯》联想而来
- 如何优雅地追回被骗款项(上篇)
- DEFI-区块链应用场景最成功的方向之一
- vue实现textarea框,文字高度自适应
- 一年三轮融资3亿 深睿医疗领跑AI医疗行业
- 气象ts评分_中国气象局--国家气候中心--气候系统监测·诊断·预测·评估
- (二)如何识别骗子(酒托、咖啡托、各种托)
- MarkDown编辑器 - MarkText使用文档
- java1000字节是多少汉字_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...
- matlab_医学CT重建 ART,SART算法