查看原文
其他

使用ggplot2绘制心形

林筱越 R语言中文社区 2019-04-22


作者简介Introduction

林筱越:华东政法大学 社会学专业 R语言爱好者 

由于最近在学习Hadley大神的《R for data science》和Winston Chang的《R graphics cookbook》,并且受到傅兴[R图秀:情人节快乐]的启发并且想检验一下自己学习的成果,所以就打算给gf用ggplot2包画了爱心(因为忘记买礼物了!


绘制思路:

总体而言思路还是比较简单的,主要为以下部分:

  • 绘制心形:主要通过函数来构建(本人文科生……所以只能寻求google和百度帮助了);当然最后还是参考了统计之都一篇文章的步骤: (https://cosx.org/2012/02/valentines-gift-by-using-r)

  • 心形上色并添加想要说的话的文本

  • 删除多余的图像元素:网格线、背景、边框等

准备工作

#加载包

library(tidyverse) # 或者使用'ggplot2'包也是可以的

#设定数据集

t = seq(0, 2 * pi, by = 0.1)

x = 16 * sin(t)^3

y = 13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t)

a = (x - min(x))/(max(x) - min(x))

b = (y - min(y))/(max(y) - min(y))

绘图

 #绘图构造:

 ##用线图`geom_line`来画出大致轮廓

 ##用`geom_polygon`来进行填充

 ggplot(data=NULL, aes(x=x, y=y)) +

 geom_line(aes(color=I('white'))) + #手动设置心形边框线颜色

 geom_polygon(aes(fill='red'), show.legend = F) + #填充心形并隐藏图例

 

 #隐藏坐标轴:这里使用标度系统来调整x和y轴

 scale_x_continuous(labels = NULL) +

 scale_y_continuous(labels = NULL) +


 #设定主题:主题主要用来控制图像的整体布局

 theme_bw() + #设定白色主题

 theme(panel.grid.major = element_blank(), #删除网格线

       panel.grid.minor = element_blank(), #删除网格线

       panel.border = element_blank(), #删除边框线

       axis.ticks = element_blank(), #删除刻度线

       axis.title = element_blank()) + #去除x和y的标签名


 #添加注释

 #使用label来添加想要说的话

 #` `函数表示换行,#`'`表示将分号作为文本处理

 annotate('text', x=median(a), y=median(b),

          label=' To Kyt: Happy Valentine's Day your pig',

          size=5)

 #保存为png格式(也可以存为jpg或者pdf格式都行)

 #保存完后使用`getwd()`函数来查看存储路径就可以找到啦~

 #dpi表示图像保存的质量,dpi越大图片质量越好

 ggsave('heart.png', plot = last_plot(), dpi = 300)

注:

系统一般都在「文档」下,如果没有则通过复制路径来查找即可

如果是手动敲入代码注意不要漏掉“+”号,源代码中的函数最后都会有“+”号来连接

最终呈现效果

总结

1. 绘图最重要的就是要先有一个大概的思路,然后再慢慢去优化修改;

2. 即使出错了也不要畏惧,通过百度或google(还有stackoverflow)来寻找是否有能为你提供解决当前问题的方案,这对于个人掌握ggplot2或是启发绘图思路、甚至是以后的学习都是有着极大的帮助。 (Hadley在《R for data science》 说自己即使已经用R好多年了也经常会出错)

3. “不择手段”地去实现自己想要的效果。当然这里并不是鼓励大家copy别人的代码拿来修改,而是说不一定别人的代码就是唯一方法;方法是多种多样的,无论代码简洁或者复杂,对于新手而言,能实现自己的预期效果的代码,就是合理的代码(就类比于for循环和apply族函数的应用,数据量不大的时候for速度也挺快的),即「不管黑猫白猫,能捉老鼠的就是好猫」


以上就是个人实现“爱心”的全部过程,总体而言只要是对ggplot2函数有了基本的理解,应该都可以读懂以上代码;当然可能还有更简单的代码表示方法,这些步骤都只用于我个人自己对复习自己所学和掌握情况进行了解,仅供参考~  




 往期精彩内容整理合集 

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)


公众号后台回复关键字即可学习

回复 R                  R语言快速入门及数据挖掘 
回复 Kaggle案例  Kaggle十大案例精讲(连载中)
回复 文本挖掘      手把手教你做文本挖掘
回复 可视化          R语言可视化在商务场景中的应用 
回复 大数据         大数据系列免费视频教程 
回复 量化投资      张丹教你如何用R语言量化投资 
回复 用户画像      京东大数据,揭秘用户画像
回复 数据挖掘     常用数据挖掘算法原理解释与应用
回复 机器学习     人工智能系列之机器学习与实践
回复 爬虫            R语言爬虫实战案例分享

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存