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

news/2024/12/4 17:25:41/

美化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;按照正规导…