R语言ggplot画图(autocad命令输入方式有几种)

提到R语言,总会想到它强大的绘图包ggplot2,甚至于其他语言中也有它的痕迹(例如,python中的matplotlib模块就有ggplot样式)。以下,总结了一些日常绘图中常用的命令。目录一、基本绘图二、精雕细琢三、ggplot中的数据变换一、基本绘图二、精雕细琢(1)图片标题字体、大小、样式设置(2)坐标轴字体、大小、样式设置(3)颜色设置I.指定颜色scale_fill_manual(value=c())II.使用调色板RColorBrewer::displ

大家好,又见面了,我是你们的朋友全栈君。

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

一、基本绘图

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

I.绘制直方图

data(singer,package="lattice")
library(ggplot2)
ggplot(data=singer,aes(x=height))+
	   geom_hist()
R语言ggplot画图(autocad命令输入方式有几种)

命令解释:
        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需要的是右图排列样式。


R语言ggplot画图(autocad命令输入方式有几种)
R语言ggplot画图(autocad命令输入方式有几种)

        这种差异导致使用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。如有错误,还望指出。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127811.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 运行疑难解答时出错0x8000FFFF_vs2010由于缺少调试目标

    运行疑难解答时出错0x8000FFFF_vs2010由于缺少调试目标发生错误,需要终止调试。有关更多详细信息,请参阅Microsoft帮助和支持网站。HRESULT=0x8000ffff。ErrorCode=0x0。工程目录太深会导致上述错误发生,把整个工程文件往外移即可

  • mysql的longtext

    mysql的longtextvarchar为变长字节,所占空间为字符串实际长度加1,最长为65535个字节而longtext也是变长字符存储,只保存字符数据,最长为4294967295字节,比较适合存储大内容…

  • netstat和netstat -ano

    netstat和netstat -ano(1)在命令行窗口中输入netstat后应该怎能读呢?本机地址为10.1.127.144,本机的52051端口正在和IP地址为183.192.164.67的8864端口进行通信,而且通信使用的是TCP协议(本机使用52021端口,对方使用8864端口)(2)在命令行中输入netstat-ano可以看出多了PID这一列(表示是PID为这个数的程序正在占用某个端口和外部某台机器的某个端口进行通信)所以netstat-ano比netstat能显示更多的信息,是升级版本,plus版本

    2022年10月21日
  • 增强版在线LEFSe分析和可视化鉴定标志性基因或物种

    增强版在线LEFSe分析和可视化鉴定标志性基因或物种LEfSe分析即LDAEffectSize分析,是一种用于发现和解释高维度数据生物标识(基因、通路和分类单元等)的分析工具,可以进行两个或多个分组的比较,它强调统计意义和生物相关性,…

  • java的treemap_java map用法

    java的treemap_java map用法TreeMap简介TreeMap是一个有序的key-value集合,它是通过红黑树实现的。TreeMap继承于AbstractMap,所以它是一个Map,即一个key-value集合。TreeMap实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。TreeMap实现了Cloneable接口,意味着它能被克隆。TreeMap实现了ja…

  • React图片懒加载

    React图片懒加载话不多说了,创建一个LazyLoad.js的React组件,然后将下面的代码复制过去:importReactfrom’react’//import’./lazyload.css’//thresholdconstthreshold=[0.01]classLazyLoadextendsReact.Component{construc…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号