R语言(一) ggplot2常用绘图命令总结

提到R语言,总会想到它强大的绘图包ggplot2,甚至于其他语言中也有它的痕迹(例如,python中的matplotlib模块就有ggplot样式)。以下,总结了一些日常绘图中常用的命令。

目录

    • 一、基本绘图
    • 二、精雕细琢
        • (1) 添加标题、横纵轴标签
        • (2) 图片标题字体、大小、样式设置
        • (3) 坐标轴标题及标签字体、大小及样式设置
        • (4) 颜色设置
        • (5) 图例样式设置
        • (6) 多图汇总
    • 三、ggplot2中的数据变换

一、基本绘图

        ggplot2绘图是逐步叠加式的,由+号进行连接,每个函数控制着自己的部分。以下将以lattice包下的singer数据集为例进行说明,其共包含两个变量身高(height)和音域(voice.part)

I.绘制直方图

data(singer,package="lattice")
library(ggplot2)
ggplot(data=singer,aes(x=height))+geom_hist()

命令解释:
        ggplot()初始化图形时,首先需要指定数据集来源data以及绘制的变量。aes函数(全称aesthetics,指用视觉的方式呈递信息)中则是指定每个变量所扮演的角色。绘制的变量以height身高作为x轴,geom_hist()则是指定绘制的图形类型为直方图。

II.绘制箱线图

ggplot(data=singer,aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+geom_boxplot(alpha=0.7)

在这里插入图片描述

命令解释:
        相比I中,aes函数中多了fill及color的设置,fill则是指以voice.part的值进行区别,color则是以voice.part的值进行赋值颜色。alpha表示透明度的设置,范围为0到1。

III.更多绘图类型及参数设置

函数绘图类型参数设置
geom_bar()条形图Color、fill、alpha
geom_density()密度图Color、fill、alpha、 linetype
geom_rug地毯图Color、side
geom_point()散点图Color、shape、alpha、size
geom_violin()小提琴图Color、fill、alpha、linetype

二、精雕细琢

以上做出来的图还是比较粗糙的,接下来将逐步对其进行微调

(1) 添加标题、横纵轴标签

ggplot(data=singer,aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+geom_boxplot(alpha=0.7)+labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")

在这里插入图片描述
添加标题及横纵轴标签后,不难看出,还是有很多小问题的。比如图片标题没有居中,横纵轴标题较小,字体样式不统一等。以下,将通过element_text函数继续进行调整。

(2) 图片标题字体、大小、样式设置

#plot.title表示图片标题
#face表示字体样式,共四种类型:plain,"italic"(斜体), "bold"(粗体), "bold.italic" (或者使用family指定其他字体样式)
#size指定字体大小
#hjust标题水平位置(0.5则表示水平居中)
#R里面的说明虽是0-1,实际上可以取到超过这个范围的值,还可以取负值!
ggplot(data=singer,aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+geom_boxplot(alpha=0.7)+labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")+theme(plot.title=element_text(face="plain",size=15,hjust=0.5))

在这里插入图片描述

(3) 坐标轴标题及标签字体、大小及样式设置

I.坐标轴标题样式调整

#axis.title.x:对x轴标题进行调整
#axis.title.y:对y轴标题进行调整
#axis.title: 对整体坐标轴标题统一调整
#vjust的设置是为了将x轴标题离绘图区远一点
windowsFonts(myFont = windowsFont("宋体"))  #读取电脑自带字体
ggplot(data=singer,aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+geom_boxplot(alpha=0.7)+labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")+theme(plot.title = element_text(face="plain",size=15,hjust=0.5),axis.title.x = element_text(family="myFont",size=15,vjust=-0.5), axis.title.y = element_text(family="myFont",size=15))         

在这里插入图片描述
这样调整后的图和第一张图相比,整体协调性是不是好多了?

II.坐标轴标签样式调整

#axis.text.x对x轴标签调整
#axis.text.y对y轴标签调整
#axis.text 统一对坐标轴标签调整
#angle旋转的角度
windowsFonts(myFont = windowsFont("宋体"))  
windowsFonts(myFont1 = windowsFont("微软雅黑"))  #横纵轴标签样式
ggplot(data=singer,aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+geom_boxplot(alpha=0.7)+labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")+theme(plot.title = element_text(face="plain",size=15,hjust=0.5),axis.title.x = element_text(family="myFont",size=15,vjust=-0.5),axis.title.y = element_text(family="myFont",size=15),axis.text.x = element_text(family="myFont1",angle = 90,size=12),axis.text.y = element_text(family="myFont1",size=12))

在这里插入图片描述
调整后,横纵轴标签变大了一些,且横轴标签通过旋转了90度,显得不是很拥挤。当然,如果希望对纵轴的数值从0开始且紧贴坐标原点,可以加上scale_y_continuous(limits=c(0,80),expand=c(0,0)),得到的图如下(个人感觉不美观且丧失了很多信息
在这里插入图片描述

(4) 颜色设置

一般软件里自带的颜色都挺花里胡哨的,以下三种方法可以自定义设置颜色。

I. 指定颜色

这里推荐一个配色网站LOL Colors,对比色和渐变色都挺不错的,日常绘图基本够用了。
命令:scale_fill_manual(values=c(""))

colors=c("#34314c","#47b8e0","#ffc952","#ff7473","#79bd9a","#79a8a9","#EC7357","#FFEEE4")	 ggplot(data=singer,aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+geom_boxplot(alpha=0.7)+labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")+theme(plot.title = element_text(face="plain",size=15,hjust=0.5),axis.title.x = element_text(family="myFont",size=15,vjust=-0.5),axis.title.y = element_text(family="myFont",size=15),axis.text.x = element_text(family="myFont1",angle = 90,size=12),axis.text.y = element_text(family="myFont1",size=12))+scale_fill_manual(values=colors)

在这里插入图片描述

II. 使用调色板

如果不想自己去取颜色,还可以调用R中自带的调色板
命令:scale_fill_brewer(palette='xxx')
在这里插入图片描述

RColorBrewer::display.brewer.all()  #查看调色板样式
ggplot(data=singer,aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+geom_boxplot(alpha=0.7)+labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")+theme(plot.title = element_text(face="plain",size=15,hjust=0.5),axis.title.x = element_text(family="myFont",size=15,vjust=-0.5),axis.title.y = element_text(family="myFont",size=15),axis.text.x = element_text(family="myFont1",angle = 90,size=12),axis.text.y = element_text(family="myFont1",size=12))+scale_fill_brewer(palette='Set2')

在这里插入图片描述

(5) 图例样式设置

I.取消图例标题+调整图例位置

命令theme(legend.title=element_blank())
           theme(legend.position="top/bottom/right/left")

ggplot(data=singer,aes(x=voice.part,y=height,fill=voice.part,color=voice.part))+geom_boxplot(alpha=0.7)+labs(x="音域",y="身高",title="不同音域的歌手身高分布箱线图")+theme(plot.title = element_text(face="plain",size=15,hjust=0.5),axis.title.x = element_text(family="myFont",size=15,vjust=-0.5),axis.title.y = element_text(family="myFont",size=15),axis.text.x = element_text(family="myFont1",angle = 90,size=12),axis.text.y = element_text(family="myFont1",size=12),legend.title=element_blank(),legend.position="top")+scale_fill_brewer(palette='Set2')

在这里插入图片描述
当然legend.position也可以传入具体位置向量,如legend.position=c(0.5,0.6)

II.更改图例顺序

主要修改数据框中变量的因子顺序

singer$voice.part=factor(singer$voice.part,level=rev(levels(singer$voice.part))) #逆序排列

在这里插入图片描述
此外,修改图例的顺序还可以通过scale_fill_discrete(breaks=c())等命令(但是它是将原图例和新的图例一起呈现的

(6) 多图汇总

当需要结合多组图片进行说明时,就需要将其放置一张画布上呈现。而普通设置画布的方式par(mfrow=c(n,m)),在ggplot中是不起作用的。以下,介绍两种多图呈现的方式。使用的数据集为鸢尾花

I. Rmisc包下的multiplot函数

library(Rmisc)
p1 <- ggplot(data=iris,aes(x=Sepal.Length,y=Sepal.Width))+geom_point()
p2 <-ggplot(data=iris,aes(x=Species,y=Petal.Width,color=Species))+geom_boxplot()
p3 <- ggplot(data=iris,aes(x=Sepal.Width))+geom_density()
p4 <- ggplot(data=iris,aes(x=Petal.Length))+geom_histogram()
multiplot(p1,p2,p3,p4,cols=2)

在这里插入图片描述
这种方式虽然快捷,但它是默认按列进行排列的,无法指定各个图片放置的位置,当然也无法指定某个图片占一排的情况。

II. grid包下的layout函数

library(grid)
pushViewport(viewport(layout = grid.layout(2,2)))   #指定画图大小vplayout <- function(x,y){viewport(layout.pos.row = x,layout.pos.col = y)
}
p1 <- ggplot(data=iris,aes(x=Sepal.Length,y=Sepal.Width))+geom_point()
p2 <-ggplot(data=iris,aes(x=Species,y=Petal.Width,color=Species))+geom_boxplot()
p3 <- ggplot(data=iris,aes(x=Sepal.Width))+geom_density()print(p1,vp=vplayout(1,1:2))   #图片p1占画布的第一行print(p2,vp=vplayout(2,1))  #图片p2占画布第二行的第一个位置print(p3,vp=vplayout(2,2))  #图片p3占画布第二行的第二个位置

在这里插入图片描述
通过编写自定义函数,可以实现对图片指定位置摆放

三、ggplot2中的数据变换

        通过上述的介绍,我们可以知道,其实ggplot中图例的出现是由于aes中fill(或者color、shape)的设置。它们均需要指定为一个类别型变量,而实际中数据排列方式通常如左图所示,ggplot2需要的是右图排列样式。

        这种差异导致使用ggplot直接作图十分不便,因此,需要对原数据集进行转变。转变方式在之前博客中有介绍过五分钟学会四种宽数据转长数据的方法,这里再介绍一种新的方法:melt

library(reshape2)
data <- read.table("clipboard",header=T)
new_data <- melt(data,id='date',measure=c("Anhui","Chongqing"))
new_data

在这里插入图片描述
此时,再用ggplot绘图就十分方便啦

windowsFonts(myFont = windowsFont("宋体"))  
windowsFonts(myFont1 = windowsFont("微软雅黑"))  #横纵轴标签样式
ggplot(data=new_data,aes(x=date,y=value,color=variable,group=variable))+geom_point()+geom_line()+labs(x="日期",y="确诊人数",title="2020/1/30-2020/2/2日确诊人数(安徽、重庆)")+theme(plot.title = element_text(family = "myFont",size=15,hjust=0.5),axis.title.x = element_text(family="myFont",size=15,vjust=-0.5),axis.title.y = element_text(family="myFont",size=15),axis.text.x = element_text(family="myFont1",angle = 90,size=12),axis.text.y = element_text(family="myFont1",size=12),legend.title=element_blank())

在这里插入图片描述

当然,关于ggplot的学习远不止这些,还有很多细节控制命令,因篇幅限制尚未涉及。有兴趣的朋友可参考R-cookbook。如有错误,还望指出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/46562.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言-ggplot2图形语法

简介 在R里&#xff0c;主要有两大底层图层系统&#xff0c;一是base图形系统&#xff0c;二是gird图形系统。lattice包与ggplot2包正是基于gird图形系统构建的&#xff0c;他们都有自己独特的图形语法。 ggplot2有着自己独特的图形语法&#xff0c;这套语法归纳起来包括&…

R语言 tidyr包的三个重要函数:gather,spread,separate的用法和举例

tidyr是Hadley&#xff08;Tidy Data的作者Hadley Wickham&#xff09;写的非常有用、并且经常会使用到的包&#xff0c;常与dplyr包结合使用&#xff08;这个包也是他写的&#xff09; 准备工作&#xff1a; 首先安装tidyr包&#xff08;一定要加引号&#xff0c;不然报错&a…

生产力飙升!皮卡智能新产品上线,带你进入AIGC新纪元

最近以ChatGPT为首掀起的AIGC浪潮可谓席卷到了各行各业&#xff0c;算力和技术的提高终于到达了一个“质变”点。于是&#xff0c;皮卡智能最近也整出一个新活儿&#xff0c;以一种全新的面貌与大家见面——「神采PromeAI」 与去年上线的「AI艺术创作」不同&#xff0c;这款新产…

chatgpt赋能python:用Python画出栩栩如生的动画人物

用Python画出栩栩如生的动画人物 对于许多人来说&#xff0c;动画是一种风靡全球的艺术形式。随着技术的进步&#xff0c;动画制作变得越来越容易&#xff0c;并且有许多软件可以协助画家完成它们的工作。然而&#xff0c;像 Python 这样的编程语言不仅可以编写动画&#xff0…

数据架构中的数据问题

识别假设对于打破假设至关重要ーー而打破假设是创造力和技术创新。 近来&#xff0c;chatGPT再一次激发了人们对通用人工智能的热情&#xff0c;甚至到了人人都在谈AIGC的地步。然而&#xff0c;大模型对数据丰富性的依赖更加严重&#xff0c;面向机器学习以及深度学习的数据架…

【STR文字识别项目】之 最新SOTA项目PARSeq(一)训练自己的数据集,并转成onnx用C++调用

目录 前言 准备环境 准备数据集 训练 验证效果 导出ONNX模型 C调用 前言 首先先解释下STR和OCR的区别&#xff0c;很多人可能听说过OCR比较多&#xff0c;这两种任务有相似也有不同&#xff0c;以下是来自ChatGPT的解释。 Optical Character Recognition (OCR)和Scene …

基于Qt的酒店管理系统(毕业设计)

开发工具集&#xff1a; Qt5.12.4、VS2017、Sqlite3轻量级数据库&#xff08;免除安装数据库的烦恼&#xff09; 百度网盘链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rNt6EI8uAAIuHCQeGXKinA 提取码&#xff1a;0mcn效果图 1、加载数据库部分 void Datab…

【计算机毕业设计】251毕业论文管理系统设计与实现

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本毕业论文管理系统就是在这样的大环境下诞生&a…

java毕业设计——基于java+mysql+socket的即时通讯软件设计与实现(毕业论文+程序源码)——即时通讯软件

基于javamysqlsocket的即时通讯软件设计与实现&#xff08;毕业论文程序源码&#xff09; 大家好&#xff0c;今天给大家介绍基于javamysqlsocket的即时通讯软件设计与实现&#xff0c;文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模…

毕业设计-基于微信小程序的图书推荐前台系统

目录 前言 课题背景与简介 实现设计思路 一、图书推荐微信小程序前台模块设计与实现 二、前台设计关键代码 三、总结 实现效果样例 更多帮助 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费…

基于大数据平台的毕业设计

前言 2022年最新大数据毕设文章&#xff1a; 基于大数据平台的毕业设计01&#xff1a;基于Docker的HDP集群搭建 最近有很多人问我&#xff0c;大数据专业有什么好的毕设项目&#xff0c;我就简单的回复了一下。也有直接问我要源码的… 所以就抽空写一写自己毕业设计的一个思…

博网即时通讯软件的设计与实现毕业设计(论文+PPT+源码)

幻灯片1 选题背景及意义 研究技术与方法 设计内容与模块 设计的环境、方法及措施 幻灯片2 选题背景及意义 1 即时通讯软件使人与人的沟通突破时空极限&#xff0c;突破环境极限&#xff0c;使自我突破心理极限。 1 背景 2 作为使用频率最高的网络软件&#xff0c;即时通…

数据可视化方向的毕业设计详细思路

距离我本科答辩顺利通过已经过去十几天了&#xff0c;我决定把本科阶段最后的小成果做个总结分享给想做此方向项目的小伙伴们&#xff0c;希望能让你们想在动手实操时有项目可供参考&#xff0c;有实现思路可供学习&#xff0c;演示视频先呈现给大家。 一、研究目的及意义 &a…

毕业设计-后台管理系统

关于代做毕业设计的历程&#xff1a; 关于毕设算是大学最重要和最能锻炼自己的课程设计之一了&#xff0c;但是相对于一部分大学生来说&#xff0c;要想自己凭空想出一个系统&#xff0c;而且是使用大学所学的技术是比较难做出一个像样的毕业设计&#xff0c;这是发自我个人的观…

毕业设计- 基于Android的教务管理系统(带流程图)

—— 等风来不如追风去&#xff0c;追逐的过程就是人生的意义。 项目介绍 系统用来管理班级的日常班务信息&#xff0c;系统角色分为三种管理员、班委和学生。 管理员&#xff1a;拥有最高权限&#xff0c;可以管理即增加、查询、修改和删除所有数据。 班委&#xff1a;不能申批…

本科毕业论文-软件开发类-《基于Android端开关控制系统的设计与实现》-论文模板

目 录 前言 一、任务书 二、目录 三、论文正文 摘要 ABSTRACT 1.引言 2.系统开发环境 2.1可行性分析 2.2 开发工具介绍 3.需求分析 3.1 功能需求分析 3.2 数据流程图 4.总体设计 4.1 系统整体模块设计 4.2 红外编码设计与蓝牙通信设计 4.3 系统功能结构设计 …

计算机毕业设计源码——基于Android的真人社交游戏辅助应用开发

编号 本科生毕业设计&#xff08;论文&#xff09; 题目&#xff1a; 真人社交游戏辅助应用开发 专业 学 号 学生姓名 指导教师 摘 要 时至今日&#xff0c;社交已成为人们生活中必不可少的一部分&#xff0c;社交网络的盛行已经成为一种必然趋势&#xff0e;与此同时&a…

Mixlab Insight:不同职业对GPT-4的看法

shadow LLM 、生成式人工智能&#xff0c;大量企业需要升级改造内部的岗位和工作流&#xff0c;至少包括&#xff1a;商业模式改造升级、团队岗位的职业要求和人才、虚拟/仿真的生产线。 MixGPT&#xff1a;在GPT4上线当天&#xff0c;我们开启了激烈的讨论&#xff0c;关于职业…

Android 大作业之个人博客新闻App

用到的技术&#xff1a; 网络编程、多线程编程、listview、数据库、等等 效果图 **注&#xff1a;**新闻数据来源“聚合数据”API接口&#xff0c;如果没显示出来&#xff0c;是调用次数超过了&#xff0c;最好自己申请API接口&#xff08;免费&#xff09; 本设计代码已上…

Android 优秀文章收集整理集合

转载 自 https://github.com/jiang111/awesome-android-tips 记录自己遇到的比较有价值的Android相关的blog MaHua是online md编辑器&#xff0c;挺好用。 本是自己记录一些有价值的blog&#xff0c;没成想有不少star的&#xff0c;为了方便查看&#xff0c;等有时间就会进行…