ggplot2是一个R包,用于生成统计或数据图形。
与大多数其他图形包不同,ggplot2有一个基于图形语法的底层语法,允许通过组合独立的组件来组成图形。
可以根据特定的问题创建新的图形,而不是局限于预定义的图形集,这就是ggplot2的强大之处。
Ggplot2实际上很容易学习:有一组简单的核心原则,很少有特殊情况。
Ggplot2提供了漂亮的、简便使用的图形,用户不必关心绘制图例等繁琐的细节。
它提供了大量的默认值,这意味着用户可以在短时间内生成并发布高质量的图形。用户不必花费时间使图形看起来更漂亮,而是可以专注于创建最能揭示数据中的信息的图形。
但如果确实有特殊的格式要求,ggplot2也提供了许多可修改的方式。
Ggplot2包迭代地进行工作。从显示原始数据开始,然后添加注释和统计层。
这允许用户使用与设计分析相同的结构化思维来生成图形。这可以缩短你脑海中的图片和书本上的图片之间的距离。这对那些还没有掌握专家使用的结构化分析方法的学生尤其有帮助。
大多数图形包只是一个特殊图形的集合。例如,在R环境下,如果你设计了一个由原始的图形元素(如线和点)组成的图形,很难设计出与现有的图形相结合的新组件。在ggplot2中,用于创建新图形的表达式由更高级的元素组成,比如原始数据和统计转换的表示,这些元素可以很容易地与新数据集和其他图组合。
所有的图都是由数据、你想要可视化的信息和映射(描述数据变量如何映射到属性)组成的。映射组件如下:
层是几何元素和统计变换的集合。几何元素(简写为geoms)代表你在图形中实际看到的东西:点、线、多边形等。统计转换,简称stats,对数据进行总结:例如,对观察结果进行分类和计数以创建一个直方图,或拟合一个线性模型。
比例尺将数据空间中的值映射到空间中的值。这包括颜色、形状和大小的使用。比例尺还绘制图例和轴,这使得从图中读取原始数据值成为可能(反向映射)。
坐标或坐标系描述数据坐标如何映射到图形的平面。它还提供了坐标轴和网格线来帮助阅读图表。我们通常使用笛卡尔坐标系,但也有其他一些可用的坐标系,包括极坐标和地图投影。
主题控制显示的细节,比如字体大小和背景颜色。虽然ggplot2中的默认值已经经过作者的仔细思考选择,但用户可能仍需要参考其他资料来创建一个更加有吸引力的图。
使用捆绑在ggplot2: mpg中的一个数据集。它包括1999年和2008年流行车型的燃油经济性信息,由美国环境保护署(http://fueleconomy.gov)收集。你可以通过加载ggplot2来访问数据:
> library(ggplot2)
> mpg
# A tibble: 234 x 11
manufacturer model displ year cyl trans drv cty hwy fl class
1 audi a4 1.8 1999 4 auto~ f 18 29 p comp~
2 audi a4 1.8 1999 4 manu~ f 21 29 p comp~
3 audi a4 2 2008 4 manu~ f 20 31 p comp~
4 audi a4 2 2008 4 auto~ f 21 30 p comp~
5 audi a4 2.8 1999 6 auto~ f 16 26 p comp~
6 audi a4 2.8 1999 6 manu~ f 18 26 p comp~
7 audi a4 3.1 2008 6 auto~ f 18 27 p comp~
8 audi a4 quattro 1.8 1999 4 manu~ 4 18 26 p comp~
9 audi a4 quattro 1.8 1999 4 auto~ 4 16 25 p comp~
10 audi a4 quattro 2 2008 4 manu~ 4 20 28 p comp~
# ... with 224 more rows
这些变量大多是不言自明的:
组成部分:
比如:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point()
注意观察上述代码的形式:
数据和映射在ggplot()中传入,然后用+添加层。
得到绘图结果如下:
此案例中的组成部分:
这幅图显示了一种很强的相关性:随着发动机尺寸(displ)的增大,燃油经济性(hwy)就会变差。
与数据x,y相同 这些参数也在aes()中调用,如这样的方式
aes(displ, hwy, colour = class)
aes(displ, hwy, shape = drv)
aes(displ, hwy, size = cyl)
colour = class给每一个点一个独特的颜色对应它的类别。这个图例允许我们从颜色中读取数据值。
如果您想修改图片的美观性参数,而不缩放它的尺寸,请在aes()之外的单个层中这样做,如下方式:
ggplot(mpg, aes(displ, hwy)) + geom_point(aes(colour = "blue"))
ggplot(mpg, aes(displ, hwy)) + geom_point(colour = "blue")
同样是使用"blue"蓝色作为输入,但前一图被调整为粉红色并添加了图例,后一图则正确显示了蓝色。
当在图形中使用美学属性时,少即是多。我们很难同时看到颜色、形状和大小之间的关系,所以在使用美学时要克制。不要试图制作一个非常复杂的图形,同时展示一切,去创造一系列简单的图形,讲述一个故事,引导读者从无知到知识。
在图形上显示附加类别变量的另一种技术是子图。Faceting通过将数据划分为子集并为每个子集显示相同的图形来创建图形表。
存在两种类型的子图技术 grid 与 wrapped
在末尾进行追加即可
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
facet_wrap(~class)
Geom_point()将数据散点描绘在坐标轴中,表示数据的分布状况。
Geom_smooth()为数据提供平滑器并显示平滑器及其标准误差。
Geom_boxplot()生成一个箱线图来总结一组点的分布。
Geom_histogram()和geom_freqpoly()表示连续变量的分布。
Geom_bar()显示类别变量的分布。
Geom_path()和geom_line()在数据点之间绘制直线。线状图被限制为从左到右移动的线,而路径可以向任何方向移动。线条通常用于探索事物随时间的变化。
可以单独或是联合使用 例如:
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
geom_smooth()
这用平滑的曲线覆盖了散点图,包括以灰色显示的点的置信区间形式对不确定性的评估。如果您对置信区间不感兴趣,可以使用geom_smooth(se = FALSE)关闭它。
参数:
geom_smooth()的一个重要参数是method,它允许您选择使用哪种类型的模型来拟合光滑曲线.
可选值如 “loess” " lm" “gam” “rlm”
span控制线条摆动程度 0~1逐渐平稳
最基础的箱线图代码:
ggplot(mpg, aes(drv, hwy)) + geom_boxplot()
ggplot(mpg, aes(drv, hwy)) + geom_violin()
它们可以很简单地调整样式 通过size colour shape fill等属性,例如此处我们增加填充色
ggplot(mpg, aes(drv, hwy)) + geom_violin(fill = "blue")
一行代码:
ggplot(数据, aes(数值变量)) + geom_histogram()/ geom_freqpoly()
示例:
ggplot(mpg, aes(hwy)) + geom_histogram()
ggplot(mpg, aes(hwy)) + geom_freqpoly()
直方图和密度曲线的工作原理是一样的:它们将数据归类,然后计算每个归类中的观察次数。唯一的区别是显示:直方图使用柱状图,密度曲线使用折线。
参数:
你可以用binwidth参数来控制箱子的宽度
如果你不想要均匀间隔的箱子,使用breaks参数。
ggplot(mpg, aes(hwy)) + geom_histogram(binwidth = 10.5)
能够观察到分组减少了许多。
进行计数或是展示数值。
ggplot(mpg, aes(manufacturer)) +
geom_bar()
在x轴上有时间,显示单个变量随时间的变化,通常以折线图的方式进行时间序列数据的展示。
代码方式与之前类似
ggplot(economics, aes(date, unemploy / pop)) +
geom_line()
ggplot(economics, aes(date, uempmed)) +
geom_line()
为了更详细地研究这种关系,我们想在同一个图上绘制两个时间序列。我们可以画出失业率与失业时间长短的散点图,但这样我们就无法看到随着时间的演变。解决方法是将时间上与线段相邻的点连接起来,形成路径图,并进行颜色深浅度的区分。
更加直观观察双变量在时间推移下的变化。
ggplot(mpg, aes(displ, hwy)) + geom_point(colour = "blue")
拥有数据集,从中选择X轴与Y轴数据,并加入geom_point层,即可绘制散点图。