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。如有错误,还望指出。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 加载出错收集解答

    加载出错收集解答加载user.dll时出错的解决方法杀毒后遗症。病毒已被杀掉,但病毒在启动项里面加上的启动信息还在,所以开机系统仍试图运行病毒但找不到病毒文件,所以出现了你说的这种情况。在开始-运行里输入&#82

    2022年7月1日
    22
  • linux platform driver register

    linux platform driver registerPlatformDevicesandDrivers~~~~~~~~~~~~~~~~~~~~~~~~~~~~Seeforthedrivermodelinterfacetotheplatformbus: platform_device,andplatform_driver. Thispseudo-busisusedtoconnectdevice

    2022年7月26日
    11
  • Maven聚合_maven地址

    Maven聚合_maven地址rt,常用Maven配置整合,不定期更新dependenciesjstl开发环境servlet开发环境mybatismysql驱动包jacksonpagehelperlog4jshi

    2022年8月16日
    7
  • Android 文件夹_安卓文档在哪个文件夹

    Android 文件夹_安卓文档在哪个文件夹【文件夹功能简介】/system/app这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是/data/文件夹中。/system/bin这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件(命令)/system/etc从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。/system/fonts字体文件夹,除了标准字体

    2022年10月16日
    2
  • @SpringBootApplication_springboot启动类作用

    @SpringBootApplication_springboot启动类作用Args作用传递参数的一种方式;例如启动的时候java-jar–spring.profiles.active=prod或者更改自己的自定义配置信息;使用方式是–key=value它的信息优先于项目里面的配置;我们现在大部分项目都是用SpringBoot进行开发的,一般启动类的格式是SpringApplication.run(SpringBootDemoPropertiesApplication.class,args);但是好像平常一直也没有用到args;也没有穿过参数

    2025年9月8日
    5
  • 开始laravel项目+理解

    开始laravel项目+理解一.laravel运行理解Ⅰ.开始,public/index.php此文件有两个作用。①:作为入口的起点,引导构建服务所需要的一切(包括路由,服务容器之类的)。②:作为所有请求的必经之路。请求经过此文件,会被“指派”到合适的路由,中间件等等进行处理。tips:所以用phpstudy的时候,记得设置一下①指定项目的根目录。②指定下路由。我用的nginx,设置的vhost.config文件。画起第一行用以指定项目的根目录,就apache的www文件的意思。第二行是指定所有请求最终会定向

    2022年5月7日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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