#美化ggplot2生成的原始图片至清爽的感觉

news/2024/4/16 2:56:08

美化ggplot2生成的原始图片至清爽可出版的样子

针对于ggplot2的可视化教程网上有很多,展示了很多ggplot2的图示,根据代码照猫画虎我们都可以去复原,但复原出来的图会有一些粗糙感。如何优雅的将这些图形应用到生产实际中呢,网上的资料并没有系统的说明,那今天来演示一下,希望起到抛砖引玉的作用。

在这里插入图片描述

在数据分析领域,数据可视化是数据分析师所需具备的一个很重要的技能,论便捷程度excel作图当属第一,但涉及到图形多样性及可定制性的话,R语言和python 是首当其冲的好工具。由于工作需要,笔者经常需要多个工具切换使用,个人认为在可视化上还是R语言更胜python一筹,本文主要由R语言的ggplot2包说起,当然所碰到的问题也是从ggplot2开始。

背景

咱们还是先假定一个场景。有以下的数据,需要展示出每日各个水果的销量(sold_amount),及购买用户数(customers)。考虑到图形传递信息的丰富度,我们用ggplot2来执行这项任务。

在这里插入图片描述

笔者刚接触ggplot2时也惊叹于他的各种示例图片,但实际工作中,又发现这些示例又有一些华而不实,想象一下借助ggplot2的示例,如果你把图做成这样放到你的汇报或总结里, 可能会有一些尴尬,懂得人知道你确实用到了很多的ggplot知识,不懂得人可能就会说,这图好丑呀?好吧 确实很丑,而且你用到了这些知识但没用好等于不会

library(ggplot2) ##做图
library(reshape2) ##揉数据data <- read.table('clipboard',header = TRUE,stringsAsFactors = FALSE)  #将长条形数据读入,这里直接用剪切板读了。
data$date <- as.Date(data$date,'%m/%d')  #将日期列识别出来
data_melt <- melt(data,id.vars = c("date","goods_type"))  #需要把数据揉成ggplot所需要的长表数据:日期列(date),水果名(goods_type),变量列(销量,顾客数),变量对应的值
head(data_melt)
##ggplot的常规默认作图
p <- ggplot(data_melt,aes(date,value,group = goods_type,color=goods_type)) + ##基本图形元素 geom_line()+  ##加入线形facet_grid(variable~.,scales = 'free_y')+ ##调整分图y轴值范围scale_x_date(date_breaks = "1 day", date_labels =  "%m-%d")+ ##设置x轴lab的样式theme(axis.text.x=element_text(angle=60, hjust=1)) ##设置x轴lab的位置和间距。
p

在这里插入图片描述

解决方案

咱们先来分析一下,这个图为什么会丑。

  1. 首先从整体上来说,ggplot2的默认风格可能各大部分的实际场景都不是那么的搭配。
  2. 由于数据的波动较大(随机生成的数据没办法),线条是很零乱的,仔细去分析的话,线条也能反应出销量和用户数的变化,但是分析师出产的应该是让人容易接受的优美的东西,所以能不能呈现优雅的凌乱?
  3. 整体布局,字体和图形元素位置的调整
  4. 分辨率问题,这个我觉得挺影响观赏效果。

实操

  1. 针对第一个问题:很好解决,ggplot2有很多主题供我们选择,这里我们选择theme_light,看下效果先:

    ###美化后 +theme
    p <- ggplot(data_melt,aes(date,value,group = goods_type,color=goods_type)) + geom_line()facet_grid(variable~.,scales = 'free_y')+scale_x_date(date_breaks = "1 day", date_labels =  "%m-%d")+theme_light()+  ###调用ggplot自带的一些theme theme(axis.text.x=element_text(angle=60, hjust=1))
    p
    

在这里插入图片描述

  1. 针对第二个问题:我们参考excel的点线图去做,也很优雅。看看效果:

    ##+点线
    p <- ggplot(data_melt,aes(date,value,group = goods_type,color=goods_type)) + geom_line(linetype="solid",size=0.8)+  ##更改线型 线粗geom_point(size=2)+   ##加入点 并调整点的大小facet_grid(variable~.,scales = 'free_y')+scale_x_date(date_breaks = "1 day", date_labels =  "%m-%d")+theme_light()+theme(axis.text.x=element_text(angle=60, hjust=1))
    p
    

在这里插入图片描述

  1. 针对第三个问题:就得看自己的审美了。调整布局,字体,图例类型 及摆放位置,再加上一些标题,副标题。

    ##美化后。+修改字体,及图例位置
    p <- ggplot(data_melt,aes(date,value,group = goods_type,color=goods_type)) + geom_line(linetype="solid",size=1.2)+geom_point(size=2)+facet_grid(variable~.,scales = 'free_y')+scale_x_date(date_breaks = "1 day", date_labels =  "%m-%d")+theme_light()+theme(axis.text.x=element_text(angle=60, hjust=1))+ggtitle("Daily data of goods_type\n")+xlab("Date") + ylab("Value")+theme(##图形标题设置 字体和大小plot.title = element_text(family='Times', face='bold.italic',size = 36),##x坐标轴axis.title.x = element_text(family = 'Times',face = 'bold',size =27),##y坐标轴axis.title.y = element_text(family = 'Times',face = 'bold',size=27),##图例标题legend.title = element_text(family = 'Times',face = 'bold',size=26),##图例内的字体legend.text = element_text(family = 'Times',face = 'bold',size=20),##分面或分幅字体strip.text = element_text(family = 'Times',face = 'bold.italic',size=27),##图例位置legend.position="bottom")
    p
    

在这里插入图片描述

  1. 针对第四个问题:Rstudio提供了很好的设置图形大小的工具,也可以直接导出为矢量图的形式,这样更保真。不过我在日常工作中经常会使用先保存为pdf的形式,然后通过pdf工具导出相应的图,大家有空可以试一下,我常用的设置是导出为横向A4纸大小的pdf,然后通过pdf工具导出相应分辨率(最好300dpi以上)的图片,出来的效果如下:

在这里插入图片描述

小结

当然,这个分享主要是针对于对R语言的ggplot2包 或python里的ggplot2包有了解的同学,关于ggplot2有很多有用和好用的东西值得去钻研和分享,希望大家共同努力。


http://www.ppmy.cn/news/521160.html

相关文章

python做图片美化_python图片美化

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; 功能性是开发的第一要务每一个 python 图形界面库都有它自有的功能特性和界面特性。 一般来说&#xff0c;…

美化上传文件框(上传图片框)

传统的表单控件十分简陋&#xff0c;可以说是很难看&#xff0c;那怎么办&#xff1f; 方法:我们自己做一个好看的样式出来&#xff0c;用各种标签啊&#xff0c;css啊&#xff0c;是可以做到的。如图: 做出这样一个样子应该是很简单的&#xff0c;但是怎么让他具有上传的功能的…

第三节 折线图

文章目录 折线图1.1 numpy介绍1.2 预测趋势1.3 折线图流程工具 Pandas1.3.1 读取并生成 CSV1.3.2 输出列数据1.3.3 画折线图1.5 添加横纵坐标,标题 屏幕属性 1.4 画双折线图1.5 扩展:做三线图 折线图 1.1 numpy介绍 上节课我们学了柱状图, 通过柱状图可以了解, numpy主要是科…

MyBatis第六讲:MyBatis缓存

八、MyBatis缓存机制 MyBatis 提供了一级缓存和二级缓存的支持。默认情况下&#xff0c;MyBatis 只开启一级缓存。 8、1MyBatis一级缓存 一级缓存是基于MyBatis自带的 HashMap 本地缓存&#xff0c;作用范围为 SqlSession 域内。当刷新或者关闭之后&#xff0c;该 SqlSessio…

内存不够用,那你的内存去哪了?

一、前言 近几年开发了一些大型的应用程序&#xff0c;在程序性能调优或者解决一些疑难杂症问题的过程中&#xff0c;遇到最多的还是与内存相关的一些问题。例如glibc内存分配器ptmalloc&#xff0c;google的内存分配器tcmalloc都存在“内存泄漏”&#xff0c;即内存不归还操作…

Blender导出模型到maya

1 将模型面朝-Y方向&#xff08;-Y是blender的正方向&#xff09; **增加一个Human1的骨骼层级作为Root&#xff08;视需要&#xff09;。 2 将骨架与mesh的旋转设置为0 CTRLA&#xff0c;选择Rotation & Scale 3 确保骨架的hips的Roll是0度 4 导出设置 5 导入ue 设置强制…

Maya导出当前选择没有Fbx格式

作为一个学习Maya的新手小白&#xff0c;做第一个模型是就遇到了这个问题&#xff0c;经过搜索前辈们的作品找到了解决方法&#xff0c;步骤如下:1.打开Maya→窗口→设置/首选项→插件管理器找到fbxmaya.mll将后方的选项都勾选→关闭 2.选中要导出的部件&#xff0c;按照正规导…

Maya2020安装错误1603

1.找到这个文件夹C\Program Files (x86)\Common Files\Autodesk Shared\ adsklicense 2.以管理员身份运行uninstall.exe(右键单击>以管理员身份运行)删除软件。 3.删除注册表“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\Maya” 4.然后重新开始安装。

Maya中怎么一键清除历史

maya中删除历史的函数操作是: cmds.delete(constructionHistoryTrue) 但这个函数有一个弊端是必须要选择对应的mesh才会删除&#xff0c;否则不起作用 所以必须要选中对应的mesh在进行history的删除 如果想要总体删除有一个小窍门是选择最外层的文件&#xff0c;可以使用cmds…

Maya记

如图是有颜色加有线框 F键是放大选中的物体在窗口中央。 2. 提示正交试图被锁定时&#xff0c;可按照以上步骤。旋转和移动。 3.W左键 shift右键分别有不同的选项 4.P键可以建立父子关系 &#xff0c;controlP解除父子关系 5.controlg分组 可以把两个物体分为一组&#…

maya正交视图锁定与解锁

正交视图锁定&#xff1a;本质是进入不能旋转的固定视图中&#xff0c;退出即可 空格鼠标左键拖动出现视图视角&#xff0c;点空格鼠标左键点击maya&#xff0c;出现视图视角&#xff0c;点击右视图等&#xff0c;处于锁定状态&#xff0c;不能旋转 解锁&#xff1a; 空格面板…

Maya---晶格

搬运&#xff01;Maya绑定教程&#xff08;上&#xff09;&#xff08;火星教程&#xff09;_哔哩哔哩_bilibili

Maya---封口

Maya学习必遇到的31个常用命令&#xff0c;超详细讲解&#xff0c;解决你的所有疑问&#xff01;&#xff01;&#xff01;Maya教程 Maya基础教程 Maya入门教程 Maya人物建模 Maya游戏建模_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Bq4y1z78Y?p10边模式下--->s…

Maya abc 导入 Houdini

maya一般的工作流 houdini中如何从物体坐标切换到世界坐标&#xff1f; 神奇 AI里面的矢量图可以导入maya&#xff0c;线的话就是一根根的curve&#xff0c;可以对curve做倒角&#xff0c;这样就可以把logo变成立体的。 这个好厉害 可以导入黑白图到houdini里面处理&#xf…

Maya Vray 环境光的渐变设置

1&#xff09;先在场景里点开vray的环境光 dome light 2&#xff09;做渐变要在属性里面点开1的勾选处&#xff0c;然后点2。 3&#xff09;给上渐变的节点 4&#xff09;然后滑动滑块就可以实现啦&#xff0c;还可以调整强度&#xff0c;色彩。 5&#xff09;这里做个小实验 …

Maya快速导出fbx脚本

能够快速导出每一个元件的fbx&#xff0c;但是需要点到每一个元件上才能点执行 string $objname[] ls -sl; string $savePath "C:/Users";//替换路径 for ($SObjname in $objname ){file -force -options "v0;" -typ "fbx" -pr -es ($savePath…

sp导出贴图到maya

Substance Painter导出全部贴图MAYA anorld_哔哩哔哩_bilibili 选择对应材质球 粗糙度 SSS Emission OP是透明的 法线 拖进来材质球

Maya---合并顶点

Maya学习必遇到的31个常用命令&#xff0c;超详细讲解&#xff0c;解决你的所有疑问&#xff01;&#xff01;&#xff01;Maya教程 Maya基础教程 Maya入门教程 Maya人物建模 Maya游戏建模_哔哩哔哩_bilibili萌新up&#xff0c;跪求观众姥爷们的一键三连。UP猪给姥爷磕头了大佬…

Maya 2020激活需要连接Internet

问题描述 安装Maya2020后未激活&#xff0c;然后安装了Maya2022&#xff0c;2022正常使用&#xff0c;2020不联网无法破解激活&#xff0c;联网了直接跳到购买页面 未检测到Internet连接。需要提交联机申请&#xff0c;请立即连接到Internet&#xff0c;建立Internet连接后&a…
最新文章