ggplot2图形艺术

ggplot2图形艺术: 1. 绘图基础

2022-06-26  本文已影响0人  Jason数据分析生信教室

Hadley Wickham大神的ggplot2. Elegant Graphics for Data Analysis原版已经推到了第三版,https://ggplot2-book.org/index.html
决定温故而知新。再来整理一遍。
在这一章节的内容里会学习到以下内容。

0624

1. 知识要点

ggplot2图像三要素:

下面举一个最简单的例子。

ggplot(mpg,aes(x=displ,y=hwy)) + geom_point()

1.数据:mpg
2.图形属性映射: 发动机尺寸对应x轴,耗油量对应y轴
3.几何对象: 散点图
这是一个最典型的范例,随着学习的深入,到时候可以添加更多的组件来使图形更加丰富形象。

2.颜色,大小,形状和其他图形属性

这些图形属性的设置方法与x和y相同,而其同样需要写入aes()函数中。

比方说举个例子,把class映射成颜色。

ggplot(mpg, aes(displ, hwy, colour = class)) + 
  geom_point()

可以看出,ggplot2通过colour scale把数据class自动转换成了不同种类的颜色。在之后的章节里会详细介绍colour scale的设置方法。
如果这里你想把颜色设置成一种,可以观察一下下面的代码。
ggplot(mpg, aes(displ, hwy)) + geom_point(aes(colour = "blue"))
ggplot(mpg, aes(displ, hwy)) + geom_point(colour = "blue")

把"blue"设置在aes里的时候,"blue"被scale转换成了默认的粉红色,并自动生成了图标。
当不设置属性也就是aes的时候,blue就变成了他本来应该的样子,也就是第二张图里的蓝色。
不同类别的变量会对应不同类型的图形属性。比如分类变量映射为颜色和形状,连续变量会映射为大小。其实也并不是属性用的越多越好,要记住simple is the best,与其画出一副信息冗杂的图像,还不如绘制一组简单易懂的。

3. 分面

分面分为两种,网格型和封装型。由于网格型最为常用,所以在此简单介绍一下网格型的用法,以后会讨论到封装型。只需要对图像进行分面处理facet_wrap(),括号中输入~和分类变量。

ggplot(mpg,aes(displ,hwy)) + geom_point() + facet_wrap(~class)

4. 几何对象

几何对象就是geom_point()里的内容。你想要展示的图形。这里会介绍最常用的几款。

4.1 添加平滑曲线

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  geom_smooth()

图中的灰色部分是se也就是置信区间。如果不想显示置信区间,可以用geom_smooth(se=FALSE)来去掉。
在数据量比较小时,默认的method是lowess平滑曲线,可以通过span设置平滑程度。
ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  geom_smooth(span=0.2)

当然也可以改变曲线的种类,比方说用直线lm
ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  geom_smooth(method="lm")

4.2 箱图和扰动点图

ggplot(mpg, aes(drv, hwy)) + 
  geom_jitter()
ggplot(mpg, aes(drv, hwy)) + 
  geom_boxplot()
ggplot(mpg, aes(drv, hwy)) + 
  geom_violin()
扰动点图 箱图 小提琴图
ggplot(mpg, aes(reorder(class, hwy), hwy)) + geom_boxplot()

4.3 直方图和频数图

ggplot(mpg, aes(hwy)) + geom_histogram()
ggplot(mpg, aes(hwy)) + geom_freqpoly()
直方图 频数图

当然也可以添加颜色映射或者分面展示。

ggplot(mpg, aes(displ, colour = drv)) + geom_freqpoly(binwidth = 0.5) ggplot(mpg, aes(displ, fill = drv)) + geom_histogram(binwidth = 0.5) + facet_wrap(~drv, ncol = 1)

4.4 棒状图

离散变量情况下,条形图和直方图类似,通过geom_bar()绘制。

ggplot(mpg,aes(manufacturer)) + geom_bar()

如果是连续变量,可以指定stat="identity"。假设有三种药物,每种药物有对应的效果数值,用棒状图来展现一下。

drugs <- data.frame(
  drug = c("a", "b", "c"),
  effect = c(4.2, 9.7, 6.1)
)
ggplot(drugs, aes(drug, effect)) + geom_bar(stat = "identity")

4.5 折线图

折线图经常被用来展现时间序列的数据。比如说美国过去40年的经济数据economics
左图展示的是失业数字/总人口数也就是失业率。右图展示的是事业总人口。

ggplot(economics, aes(date, unemploy / pop)) + geom_line() ggplot(economics, aes(date, uempmed))+geom_line()

为了观察更多的细节,可以把上面的两张图里的信息放在一起。其中用颜色来映射时间变量。

year <- function(x) as.POSIXlt(x)$year + 1900
ggplot(economics, aes(unemploy / pop, uempmed)) + 
  geom_path(colour = "grey50") +
  geom_point(aes(colour = year(date)))

4.6 修改坐标轴

之后会有专门的章节介绍坐标轴的修改以及修饰。这里简单说明一下最常用的两组参数xlab()````ylab()xlim()````ylim()

ggplot(mpg, aes(cty, hwy)) + geom_point(alpha = 1 / 3) ggplot(mpg, aes(cty, hwy)) + geom_point(alpha = 1 / 3) + xlab("city driving (mpg)") + ylab("highway driving (mpg)") ggplot(mpg, aes(cty, hwy)) + geom_point(alpha = 1 / 3) + xlab(NULL) + ylab(NULL)
ggplot(mpg, aes(drv, hwy)) + geom_jitter(width = 0.25) ggplot(mpg, aes(drv, hwy)) + geom_jitter(width = 0.25) + xlim("f", "r") + ylim(20, 30) ggplot(mpg, aes(drv, hwy)) + geom_jitter(width = 0.25, na.rm = TRUE) + ylim(NA, 30)

4.7 保存

大多数情况下图像可以直接显示出来,但也可以保存为一个变量并对其进行修改。

p <- ggplot(mpg, aes(displ, hwy, colour = factor(cyl))) +
  geom_point()
ggsave("plot.png", p, width = 5, height = 5)

本章完

上一篇下一篇

猜你喜欢

热点阅读