美文网首页ggplot2图形艺术
ggplot2图形艺术: 1. 绘图基础

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

作者: Jason数据分析生信教室 | 来源:发表于2022-06-26 22:17 被阅读0次

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

    • mpg数据集进行ggplot2可视化
    • ggplot三要素: 数据,映射,图形
    • 如何给plot添加变量
    • 如何运用分面将数据拆分
    • 如何制定不同的几何对象
    • 如何修改坐标轴
    • 如何保存图像文件

    0624

    1. 知识要点

    ggplot2图像三要素:

    • 数据
    • 图形属性映射(设定变量如何映射到图层的图形属性上)
    • 几何对象(至少一层,用于指定绘图所用的几何对象)

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

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

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

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

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

    • aes(displ, hwy, colour = class)
    • aes(displ, hwy, shape = drv)
    • aes(displ, hwy, size = cly)

    比方说举个例子,把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()里的内容。你想要展示的图形。这里会介绍最常用的几款。

    • geom_smooth() 平滑曲线
    • geom_boxplot()箱图
    • geom_histogram(),geom_freqpoly()展现连续变量的分布
    • geom_bar()棒状图
    • geom_path()geom_line()折线图

    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()
    
    扰动点图 箱图 小提琴图
    • tips:reorder()排序
      根据hwy的大小给class排列顺序展示。
    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()进行保存
    ggsave("plot.png", p, width = 5, height = 5)
    

    本章完

    相关文章

      网友评论

        本文标题:ggplot2图形艺术: 1. 绘图基础

        本文链接:https://www.haomeiwen.com/subject/owogvrtx.html