【DV】6个技巧,让你的可视化看起来更专业
笔者邀请您,先思考:
1 如何做出专业的可视化?
当我开始使用R时,像任何初学者一样,我想要一个真正能够工作的代码和一个最低限度可理解的图像,并且很长一段时间这是我的主要目标,但是一旦这一点完成后,我意识到我的可视化看起来很糟糕,特别是在比较和审查其他博客和网站之后,我开始搜索如何改进我的可视化。
下面,创建一个简单且专业的图像的一些技巧,以吸引读者的注意力。
1 创建可视化
让我们开始一个简单的可视化,来自diamonds数据集的直方图。
1library(ggplot2)
2visualization <- ggplot(diamonds, aes(carat, fill = cut)) +
3 geom_histogram(bins = 30)
4

1.1 包括上下文信息:标题、副标题和脚注
我们为什么要添加这些信息?因为这是一个快速和简单的方式来给图形上下文,并让读者理解我们在谈论什么。
添加这些信息的第二个原因是对我们所看到的内容有一个共同的理解。所有的文本都允许我们与读者“交谈”,并说:
-
你看到的图形显示的是“砖石数据集直方图”
-
这张图“让我们看到”克拉的分布。
-
该数据的来源是gglopt2包,该图形的作者是博客thinkingondata.com
另一个需要考虑的问题是,如果您包含了源代码,那么您就为您的工作添加了一个可信度层,因为读者知道您的数据来自哪里。
1visualization <- visualization +
2labs(
3title ="Histogram for Diamond dataset",
4subtitle = "This is a general example in order to show the distribution of carats.",
5caption = "source: gglopt2 packagenauthor: thinkingondata.com")

1.2 包括一个专业的调色板的颜色
我爱上了Viridis调色板,所以我把它包含在我的所有图形中,使用相同的调色板一直使得选择颜色的过程非常容易,同时,作为次要的好处统一了所有的可视化 我的工作。
1visualization <- visualization +
2scale_fill_viridis(discrete = TRUE)
3

1.3 包括主题
包含主题允许我们为可视化提供预定义的格式,让我们将其视为Times New Roman中编写的文档或Helvetica中的同一文档之间的区别。
我们可以在同一个演示文稿中的所有可视化中使用相同的主题,以创建一致感,例如在此博客中,所有可视化都使用相同的主题:theme_minimal。 有很多预定义的主题,如果你觉得你想要一些特别的东西,总有机会创建自己的主题。
1visualization <- visualization +
2theme_minimal()

1.4 删除变量
很多时候,太多的信息会影响读者的注意,从可视化中删除隐含信息是一个好主意,在这种情况下,我认为我们不需要在轴中包含变量的名称。
尽管你可以删除x轴标签,但这并不总是一个好主意:取决于很多可视化的标题和表示格式。 在某些情况下,如果您在标题中包含相同的信息,删除标签可能是一个不错的选择。
1visualization <- visualization +
2theme(axis.title.x=element_blank(),
3axis.title.y=element_blank())
4

2 统一感
为什么我们要为我们的图像集创造一种统一感?因为如果一切都很和谐,就更容易阅读我们正在接收的信息:颜色,图像,风格,来源……我们可以考虑像流动一样的信息,在这种情况下我们想要一个柔和的流动,某些东西读者几乎察觉不到。
在创建演示文稿时 – 将其命名为报表,项目,文章 – 可能我们正在使用一组可视化,并且在编辑结束之前重要的是创建类似的样式以便于吸引读者:使用相同类型的字母,保持标题和副标题的使用不变,引用源,使用相同的调色板,我们正在创建一种通用格式,一种通用语言。
理解可视化是一种努力,一种注意力的努力。如果有人做了一次努力,我们不会每次为每个新图像重新创建相同的工作量。
一些例子:
-
flowingdata.com,当所有可视化都保持相似的特征时,即使大多数时候每个帖子的主题都完全不同。
-
theeconomist.com,所有的可视化都有类似的风格,如果我们是常规读者,我们知道他们的可视化,标题,字幕和非常相似的颜色选择的相同位置,当我们检查新的可视化时,我们将重点放在消息是什么,而不是试图重新解释一切(再次!)。
2.1 使用GRIDEXTRA库将多个图形混合在一起
使用gridExtra库我们可以把多个可视化中创建一个可视化。 所有图像一起帮助我们更好地了解所选颜色以及它们如何相互作用。 这并不意味着我们必须在我们的演示中一起使用这些图像,这是为了方便决策者了解什么是最适合所有人的风格。
让我们用两个可视化实现一个例子。
1## Initial
2vis_a <- ggplot(diamonds, aes(x = price, fill = cut)) +
3 geom_bar(stat = "bin")
4vis_b <- ggplot(diamonds, aes(x=clarity,fill=clarity)) +
5 geom_bar()
6grid.arrange(vis_a, vis_b)
7

包含的格式:
1## Testing format
2vis_a <- ggplot(diamonds, aes(x = price, fill = cut)) +
3 geom_bar(stat = "bin") +
4 theme_minimal() +
5 vis_text
6
7vis_b <- ggplot(diamonds) +
8 geom_bar(mapping = aes(x = cut)) +
9 theme_minimal() +
10 vis_text
11

我们已经有两种具有正确格式的可视化,指示它们来自哪里,但少了调色板是不好的。
2.2 包括专业的PALETTE
我选择了两种不同的方式来包含Viridis调色板中的颜色,以创造一种统一感。
1## Final
2vis_a <- ggplot(diamonds, aes(x = price, fill = cut)) +
3 geom_bar(stat = "bin") +
4 theme_minimal() +
5 scale_fill_viridis(discrete = TRUE) +
6 vis_text
7
8## Picking manually 8 colors from Viridis Palette
9
10library(scales)
11q_colors <- 8
12v_colors <- viridis(q_colors, option = "D")
13
14vis_b <- ggplot(diamonds, aes(x=clarity,fill=clarity)) +
15 geom_bar()+
16 scale_fill_manual(values=v_colors) +
17 theme_minimal()+
18 vis_text
19
20library(gridExtra)
21grid.arrange(vis_a, vis_b)
22

2.3 从多个图形中创建独特的可视化
有时,使用多个图表创建一个独特的可视化可能是一个好主意,在这种情况下,我们可以使用以下库之一:
GRIDEXTRA库
提供许多用户级函数来处理“网格”图形,特别是在页面上排列多个基于网格的图,并绘制表格。
COWPLOT库
这个软件包可以很容易地将多个’ggplot2’图组合成一个图并用字母标记它们,例如 A,B,C等,这是科学出版物经常需要的。
PATCHWORK库
PATCHWORK包使得在ggplot中创建具有多个面板的布局变得非常容易。 PATCHWORK的目标是使单独的ggplots组合到同一图形中变得简单。 因此,它尝试解决与gridExtra :: grid.arrange()和cowplot :: plot_grid相同的问题,但使用的是引发探索和迭代的API。
最好的结果
对于我们的示例,我们使用cowplot库或PATCHWORK库(最终结果几乎相同)获得了最好的结果,而不是gridExtra库,但是因为我们正在使用一组非常有限的示例(只有一个!),所以最好的结果 可能会根据您想要加入的图表类型而有所不同。
两个图的代码
1vis_text <- labs( title ="Exploring Diamond dataset", caption = "source: gglopt2 package")
2q_colors <- 8
3v_colors <- viridis(q_colors, option = "D")
4avg.y <- mean(as.double(diamonds$clarity))*10
5
6vis_a <- ggplot(diamonds, aes(x = price, fill = cut)) +
7 geom_bar(stat = "bin") +
8 theme_bw() +
9 scale_fill_viridis(discrete = TRUE) +
10 vis_text
11
12vis_b <- ggplot(diamonds, aes(x=clarity,fill=clarity)) +
13 geom_bar()+
14 geom_segment(aes(x=0, xend=.01, y=avg.y, yend=avg.y)) +
15 scale_x_discrete(breaks = 1:8)+
16 scale_fill_manual(values=v_colors) +
17 theme_bw()+
18 vis_text
19
使用COWPLOT库
1plot_grid(vis_a, vis_b, labels = c("A", "B"), nrow = 2, align = "v")

使用PATCHWORK库
1library(patchwork)
2vis_a + vis_b + plot_layout(ncol = 1) & theme_bw()

使用GRIDEXTRA库
结果非常相似,但是两个图的沿x轴的尺寸是不同的。
1grid.arrange(vis_a, vis_b)

结论
本文的目的是描述如何改进我们的图像,以及如何用很少的努力帮助读者继续阅读并保持关注。
我希望第一个和最后一个图像之间的差异足够大,能够形成动力并从变化开始。
致谢和阅读
ggplot2是一个用于编程语言R的数据可视化包。您可以通过官方文档了解更多信息,并通过使用ggplot2进行可视化。
特别感谢Nathan Yu的书“Visualize this”,它在最初的章节中提出了关于专业可视化应该是什么样子。
原文链接:
http://www.thinkingondata.com/6-tips-to-make-your-visualizations-look-professional/
内容推荐
公众号推荐:
数据思践,数据的思考与践行。
数据人网:数据人学习,交流和分享的平台,诚邀您创造和分享数据知识,共建和共享数据智库。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!