美文网首页R语言
ggplot2之常见观察变量绘图geom

ggplot2之常见观察变量绘图geom

作者: 小贝学生信 | 来源:发表于2020-06-11 19:30 被阅读0次

一、直方图

之前在初学ggplot2包时,初步了解了ggplot_histgram()是针对一组连续型变量绘制频率图(直方图)。由于在描述单变量变动时很方便,这里再学下。
此外值得注意的是ggplot_bar()是根据类别型变量绘制条形图的。

1、基础参数

library(ggplot2)
head(diamonds)
ggplot(data = diamonds, aes(x = carat)) +
  geom_histogram()
简单直方图
  • 绘制直方图关键要控制条形数,可以从两方面决定。geom_histogram()函数由两种参数:
    bins =直接交代绘制条形的数目,简单但意义难以阐述;如上代码未交待任何参数,参数默认bins = 30
    binwidth = 通过交代条形宽度,间接决定条形数,如下例
range(diamonds$carat)
library(dplyr)
diamonds %>%
  count(cut_width(carat, 0.5))
#查看carat变量以0.5为划分的count数

ggplot(diamonds, aes(x = y)) +
  geom_histogram(binwidth = 0.5)  #交代区间宽度为0.5
修改binwidth = 参数

2、分组绘制

如果想对连续型变量由类别型变量分为若干组后,再绘制直方图,由于重叠性而不好观察。因此可用折线图代替geom_freqploy()

  • 可以把折线图想成由直方图转换的,所以基本参数相同。
ggplot(data = diamonds, aes(x = carat, color = cut)) +
  geom_histogram(binwidth = 0.1)
多组折线图
  • 如果想查看并比较平均每组中的分布情况,需要改变 y 轴的显示内容,不再显示计数,而是显示密度。密度是对计数的标准化,这样每个频率多边形下边的面积都是 1
ggplot(data = diamonds,aes(x = price, y = ..density..)) +
  geom_freqpoly(aes(color = cut), binwidth = 500)
密度-折线图

3、异常值观测

当条形图出现极大、极小值时,极小值的直方图因为比例原因几乎难以观察;

ggplot(diamonds, aes(x = y)) +
  geom_histogram(binwidth = 0.5)

此时可以通过人为修改y轴的范围,从而改变图形显示。具体有2种方式

(1)修改coord_cartesian()函数的ylim参数

这种方式的效果相当于局部放大

ggplot(diamonds, aes(x = y)) +
  geom_histogram(binwidth = 0.5) +
  coord_cartesian(ylim = c(0, 50))
coord_cartesian(ylim = c(0, 50))

(2)直接修改ylim()函数

注意在ggplot2里,就有ylim()这个函数,用以修改坐标轴域。与上面不一样的是此函数约定当变量y轴值抽过给定范围时,则不绘制该数据。

ggplot(diamonds, aes(x = y)) +
  geom_histogram(binwidth = 0.5) +
  ylim(0, 50)
#此时 warning也有提示删除了超限的值
ylim(0, 50)
  • 异常值一般会干扰整体的分析,如果想避免干扰,要么删除,要么用缺失值代替,可用ifelse()进行操作,后者示例如下;此后基础上若想删除,则设置na.rm = TRUE即可
diamonds2 <- diamonds %>%
mutate(y = ifelse(y < 3 | y > 20, NA, y))

二、箱线图

主要适用于多组连续型变量的统计分布绘图。虽然上面介绍的多组折线图也能绘制,但箱线图更适用于组值分布观察,折线图更适合观察变动。

  • geom_boxplot()函数
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
  geom_boxplot()
geom_boxplot()

调整1:水平旋转 coord_flip()函数

ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
  geom_boxplot()+
  coord_flip()
coord_flip()

调整2:更改每组箱线图的排序

  • (1)根据组特征值排序
ggplot(data = mpg, aes(
  x = reorder(class, hwy, FUN = median),y = hwy)) +
  geom_boxplot()

如上代码,根据每组中位值大小(从小到大)排列箱线图次序。


中位值排序
  • (2)自定义排序
    主要直接设置因子顺序
ggplot(data = mpg) +
  geom_boxplot(mapping = aes(
    x = factor(class,  levels = c("compact","2seater","midsize","minivan",
                                  "pickup", "subcompact","suv")),
    y = hwy))
自定义排序

三、点图

  • geom_point函数绘制点图,常针对于两组连续型变量(可用颜色、性状分组)
    image.png
  • 这里介绍点图的两种处理方式,点图注释与大数据绘制点图

1、注释--点标注

(1)geom_text()函数

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

#根据class,筛选出每类中 hwy最高的点
best_in_class <- mpg %>%
  group_by(class) %>%
  filter(row_number(desc(hwy)) == 1)
ggplot(mpg, aes(displ, hwy)) +
  geom_point(aes(color = class)) +
  geom_text(aes(label = model), data = best_in_class)
#如上,点标注需要提供含有名字列的原始数据的子集
geom_text()

点标注可以理解为给文本字符串提供坐标信息;在plot绘制点图时也有类似的方法,此外其还可以用identify()函数进行交互式点标注,见笔记。但尝试了下在ggplot中好像不行。

(2)geom_lable()函数
  • 特色功能:可以为文本加上方框,并使用nudge_y参数调整标签位置
  • nudge_y =参数设置标签的上下,值参考自身的高度;nudge_x与之相对。
ggplot(mpg, aes(displ, hwy)) +
  geom_point(aes(color = class)) +
  geom_label(
    aes(label = model),
    data = best_in_class,
    nudge_x = 0.5,
    nudge_y = 2,
    alpha = 0.5
  )
(3)ggrepel包
  • 特色功能:避免标签的重叠,自动调整位置
ggplot(mpg, aes(displ, hwy)) +
  geom_point(aes(color = class)) +
  geom_point(size = 3, shape = 1, data = best_in_class) +
  ggrepel::geom_label_repel(
    aes(label = model),
    data = best_in_class
  )

如上还添加了一个图层,用较大的空心圆来强调添加了标签的数据点。

2、注释--文本标注

  • 在绘图区域的空白处加一段说明性文字,一般位于四个角处。
label <- data.frame(
    displ = 6, hwy = 42,
    label = paste(    
      "Increasing engine size is \nrelated to",
      "decreasing fuel economy."
)) 
ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  geom_text(
    aes(label = label), data = label,
    vjust = "top", hjust = "center"
  )
  • 如上代码先要交代文本标注的文字、内容,注意要是表格格式
  • 利用geom_text()函数标注,其中vjust = "left/center/right"与hjust = "top/center/bottom"参数调整的是文本的对齐方式,不是位置~
文本标注

3、大数据,点重叠

ggplot(data = diamonds, aes(x = carat, y = price)) +
  geom_point()

ggplot(data = diamonds, aes(x = carat, y = price)) +
  geom_point(alpha = 1 / 100)
#设置透明度,减少由于点重叠难以观察
geom_point(alpha = 1 / 100)

四、两类分类变量时的频数绘制图

1、geom_count()

用点大小反应频数

ggplot(data = diamonds, aes(x = cut, y = color)) +
  geom_count()
geom_count()

2、geom_tile()

近似热图

test <- diamonds %>%
  count(color, cut)
ggplot(data = test, aes(x = color, y = cut)) +
  geom_tile(aes(fill = n))

diamonds %>%
  count(color, cut) %>%
  ggplot(mapping = aes(x = color, y = cut)) +
  geom_tile(mapping = aes(fill = n))
geom_tile()

相关文章

网友评论

    本文标题:ggplot2之常见观察变量绘图geom

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