ggplot2之常见观察变量绘图geom

一、直方图

之前在初学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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356