如何一步步提高图形 B 格?以 ggplot 绘图为例

简介: 如何一步步提高图形 B 格?以 ggplot 绘图为例

简介

最近有读者问:为什么类似的代码,别人能画的简洁明了,上档次。使用 ggplot 绘制有什么套路吗?

这是一个很不错的问题,市面很多书籍或者推文都是从某个图形出发,直接给出所有代码,读者只要学会复制粘贴即可使用。但是了解绘图套路所在,才是关键!

根据这个动机,小编总结个人经验并学习他人技巧,在五一期间写了这篇推文,供大家参考!

本文框架

  • 简介
  • 数据介绍
  • 基础图形
  • 细节调整方案
  • 调整线宽度
  • 调整 x 轴尺度
  • 调整坐标轴标签并添加标题
  • 调整颜色配色
  • 修改主题
  • 添加其他几何对象
  • 小编有话说

数据介绍

这里以 ggplot2 绘制的折线图为例,从最基础的图形到添加细节内容。主要参考书籍《THE HITCHHIKER’S GUIDE TO GGPLOT2[1]》并结合小编个人科研经验。

数据来源于上述书籍,具体数据如下所示:


library(ggplot2) 
library(ggthemes) 
library(dplyr) 
library(readr)
chilean.exports = "year,product,export,percentage
                  2006,copper,4335009500,81 
                  2006,others,1016726518,19 
                  2007,copper,9005361914,86 
                  2007,others,1523085299,14 
                  2008,copper,6907056354,80 
                  2008,others,1762684216,20 
                  2009,copper,10529811075,81 
                  2009,others,2464094241,19 
                  2010,copper,14828284450,85 
                  2010,others,2543015596,15 
                  2011,copper,15291679086,82 
                  2011,others,3447972354,18 
                  2012,copper,14630686732,80 
                  2012,others,3583968218,20 
                  2013,copper,15244038840,79 
                  2013,others,4051281128,21 
                  2014,copper,14703374241,78 
                  2014,others,4251484600,22 
                  2015,copper,13155922363,78 
                  2015,others,3667286912,22
"
charts.data = read_csv(chilean.exports)



基础图形

首先根据读者目的,将数据转化成所需形式。之后,确定好 x,y 轴的变量和几何对象(geom_line()geom_point()等)。等绘制出基础图形后,再在此基础上添加细节修改。

p1 = ggplot(aes(y = export, x = year, colour = product), data = charts.data) + 
  geom_line() 
p1



细节调整方案

下面给出几种细节修改的方案:

调整线宽度

geom_line() 中加入 linewidth = 1.5 来调整线宽。

p1 = ggplot(aes(y = export, x = year, colour = product), data = charts.data) + 
  geom_line(linewidth = 1.5) 
p1



调整 x 轴尺度

由于 x 轴为年份,原图基础上通过修改 scale_x_continuous() 中的 breaks = seq(2006,2015,1) 调整 x 轴尺度。

p1 = p1 + scale_x_continuous(breaks = seq(2006,2015,1))
p1



调整坐标轴标签并添加标题

使用 labs() 添加标题(title),坐标轴标签(x = "Year", y = "USD million")。

标题的添加不一定适用于科研论文发表,因为会在 LaTeX 或者 Word 中单独添加。这里仅供参考。

p1 = p1 +
  labs(title = "Composition of Exports to China ($)", subtitle = "Source: The Observatory of Economic Complexity") +
  labs(x = "Year", y = "USD million")
p1



调整颜色配色

前面的图形是基于 ggplot[2] 默认配色绘制的,如果你想使得图形更加上档次,可以使用其他配色方案。可以使用其他 R 包提供的配色方案,例如:ggsci[3]viridis[4]等。当然也可以使用 scale_colour_manual() 手动添加颜色。

注意:配色方案的选择,小编写了好多相关推文:grafify包|一键搞定统计绘图!paletteer包:拥有2100多个调色板!推荐几个R数据可视化用的配色网站我把莫奈的配色用到了科研绘图中。都可以拿来使用的~

# 方案一:手动添加颜色
colour = c("#5F9EA0", "#E1B378") 
p1 = p1 + scale_colour_manual(values = colour) 
p1



# 方案二:使用viridis添加颜色
library(viridis)
p1 = p1 + scale_color_viridis(discrete=T) 
p1


修改主题

修改主题也是提高图形档次的重要环节,可以使用 ggplot 中自带的主题,例如:theme_bw(),theme_classic() 等,也可以使用其他 R 包的主题,例如:ggsci[5]ggthemes[6] 等。

主题修改相关推文,小编写了一些,可供参考:ggThemeAssist包:交互式修改图形主题R可视乎|ggplot常用主题风格汇总

# 方案一:theme_bw()
p1 + theme_bw() + 
  theme(panel.grid = element_blank(),
        legend.position = "bottom",
        legend.direction = "horizontal")


# 方案二:ggthemes包
library(ggthemes)
p1 + theme_economist() + 
  scale_colour_economist() +
  theme(panel.grid = element_blank(),
        legend.position = "bottom",
        legend.direction = "horizontal")


添加其他几何对象

p1 + geom_point(size = 3) +
  theme_economist() + 
  scale_colour_economist() +
  theme(panel.grid = element_blank(),
        legend.position = "bottom",
        legend.direction = "horizontal")


小编有话说

  • 本文主要以简单的折线图为例,介绍图形从“丑陋”到“美观”的变化技巧。当然还可以通过修改字体,添加更多几何对象等出发。但是对于科研论文而言,看上去可能比较多余。
  • 主题内的设置有很多技巧,这篇推文没有做过多介绍。以后在慢慢总结吧。
  • 绘制完一幅图后,可能需要将不同图形合并到一幅大图中,此时需要借助 cowplot[7] 包或 patchwork[8] 等包实现。

注意:合并图形相关 R 包介绍可见:用R来拼图和排版,告别AI和PS(二)用R来拼图和排版,告别AI和PS合并多幅图形

参考资料

[1]

THE HITCHHIKER’S GUIDE TO GGPLOT2: https://leanpub.com/ggplot-guide

[2]

ggplot: https://ggplot2.tidyverse.org/reference/ggplot.html

[3]

ggsci: https://github.com/nanxstats/ggsci

[4]

viridis: https://github.com/sjmgarnier/viridis

[5]

ggsci: https://github.com/nanxstats/ggsci

[6]

ggthemes: https://github.com/jrnold/ggthemes

[7]

cowplot: https://github.com/wilkelab/cowplot

[8]

patchwork: https://github.com/thomasp85/patchwork

目录
相关文章
python-matplotlib库绘制饼形图专题(从一般饼状图到内嵌环形图)
python-matplotlib库绘制饼形图专题(从一般饼状图到内嵌环形图)
975 0
python-matplotlib库绘制饼形图专题(从一般饼状图到内嵌环形图)
|
3月前
|
JSON JavaScript Linux
绘图框架 plotly 知识点补充(绘制子图,图表保存)
绘图框架 plotly 知识点补充(绘制子图,图表保存)
78 13
|
6月前
cavans绘图步骤
cavans绘图步骤
|
数据可视化 关系型数据库 Python
【100天精通Python】Day66:Python可视化_Matplotlib 3D绘图,绘制3D曲面图、3D填充图,3D极坐标图,示例+代码
【100天精通Python】Day66:Python可视化_Matplotlib 3D绘图,绘制3D曲面图、3D填充图,3D极坐标图,示例+代码
223 0
|
C# 图形学
C# GDI+绘图(一)GDI+介绍及基础
最近,项目中,有一块比较发杂的网格,并在网格上绘有各种颜色和文本,在Dev库中并未找到能实现这种功能的现有或可以二次开发的控件,因此,涉及到GDI+绘图这块陌生的领域。下面即时我在本次学习过程中的笔记,本次内容一共分为4篇,分别都有各自的代码或工程文件提供,有需要的朋友可以下载。
|
存储 Go
速绘丨GO富集气泡图绘制方法,利用R语言ggplot2包快速绘制,完整脚本可重复绘图
速绘丨GO富集气泡图绘制方法,利用R语言ggplot2包快速绘制,完整脚本可重复绘图
如何用ggplot2绘制基因功能富集气泡图?
如何用ggplot2绘制基因功能富集气泡图?
|
API 计算机视觉
【OpenCV图像处理3】绘制基本图形
【OpenCV图像处理3】绘制基本图形
108 0
|
数据可视化 数据挖掘
绘图系列|R-corrplot相关图
绘图系列|R-corrplot相关图
148 0
|
XML 前端开发 数据可视化
【图形基础篇】03 # 声明式图形系统:如何用SVG图形元素绘制可视化图表?
【图形基础篇】03 # 声明式图形系统:如何用SVG图形元素绘制可视化图表?
129 0
【图形基础篇】03 # 声明式图形系统:如何用SVG图形元素绘制可视化图表?