R绘图 第九篇:绘制散点图和气泡图(ggplot2)

Stella981
• 阅读 1175

绘制散点图(scatterplots)使用geom_point()函数,气泡图(bubblechart)也是一个散点图,只不过点的大小由一个变量(size)来控制。散点图潜在的最大问题是过度绘图:当一个位置或相邻的位置上出现有多个点,就可能把点绘制在彼此之上, 这会严重扭曲散点图的视觉外观,你可以通过使点变得透明(geom_point(alpha = 0.05))或者设置点的形状(geom_point(shape = "."))来帮助解决该问题。

geom_point(mapping = NULL, data = NULL, stat = "identity",
  position = "identity", ..., na.rm = FALSE, show.legend = NA,
  inherit.aes = TRUE)

参数注释:

  • stat:统计转换(statistical transformation),默认值是identity,表明变量的值是就是统计的值;而统计函数count 需要对变量的值进行计数,统计值是计数的结果。
  • position:位置调整(Position adjustment),默认值是identity,不调整
  • mapping:映射参数

点的位置调整(Position adjustment)有多种方式:

  • identity:不调整
  • dodge:垂直方向不调整,只调整水平位置
  • nudge:在一定的范围内调整水平和垂直位置
  • jitter:抖动,当具有离散位置和相对较少的点数时,抖动很有用
  • jitterdodge:同时jitter和 dodge
  • stack:堆叠,
  • fill:填充,用于条形图

每个位置调整都对应一个函数position_xxx()。

使用aes()函数来设置映射参数,geom_point()函数可以使用的映射有:

  • x
  • y
  • alpha:设置点重叠部分的透明度
  • colour:点的颜色
  • fill:点的填充色
  • group:分组
  • shape:点形状
  • size:点的大小
  • stroke:描边

这些参数用于修改散点图的图形属性。 

一,绘制基本的点图

使用mtcars数据集来绘制散点图,并根据cyl字段来设置每个点的颜色:

library(ggplo2)

ggplot(mtcars, aes(wt, mpg))+
  geom_point(aes(colour = factor(cyl)))

二,绘制气泡图

使用geom_point(),绘制气泡图,并添加水平线:

library(ggplot2)

#win.graph(width=5, height=4,pointsize=8)

df <- data.frame(year=rep(c(2017,2018),3),
                 product=rep(c('ProductA','ProductB','ProductC'),2),
                 ratio=runif(6, min = 0, max = 1))

df <- df[order(df$year),]df <- within(df,{bubblesize<- sqrt(df$ratio*10/pi)})
df$product <- factor(df$product,levels=unique(df$product),ordered=TRUE)
ratio.mean <- mean(df$ratio)
y.min <- min(df$ratio)

mytheme <- theme_minimal()+
  theme(
    panel.grid.major.y=element_blank(),
    panel.grid.minor.y=element_blank(),
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.title=element_text(hjust =0.5),
    axis.line.y=element_line(linetype=1,color='grey'),
    axis.line.x=element_line(linetype=1,color='grey'),
    axis.ticks = element_line(linetype=2,color='grey'),
    panel.grid=element_line(linetype=2,color='grey'),
    legend.background = element_rect(fill="gray90", size=0,color='white'),
    legend.text=element_text(face="bold",size=8),
    legend.title=element_text(face="bold",size=8),
    axis.text=element_text(face="bold",size=8)
  )

ggplot(data=df, mapping=aes(x=product,y=ratio,color=factor(year)))+
  geom_point(stat= "identity",aes(size=bubblesize),alpha=0.7,show.legend = TRUE)+ 
  guides(color=guide_legend(title="Year"))+
  scale_size(range = c(1, 30),guide=FALSE)+
  scale_color_manual(values=c("#666666","#FF0016"))+
  scale_y_continuous(labels = scales::percent,limits=c(y.min,1))+
  labs(x='Product',y='Increase ratio',title='Product increase ratio')+
  geom_text(aes(y=ratio,label=scales::percent(ratio),hjust=0.5), size=3,color="black",position = position_dodge(width=0.00),check_overlap = FALSE) +
  mytheme+
  geom_hline(yintercept = ratio.mean,linetype='dashed')+
  annotate(geom='text',x=0,y=ratio.mean,label=scales::percent(ratio.mean),hjust=-0.4,vjust=-0.5);

其中,scale_size()图层用于指定bubble的大小,annotate()函数用于为水平线添加文本说明:

R绘图 第九篇:绘制散点图和气泡图(ggplot2)

参考文档:

ggplot2 geom_point

Creating and Tweaking Bubble Chart with ggplot2

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
FusionCharts创建气泡图和散点图(二)
混合模式此模式是自动模式和类别模式的组合。它允许x轴同时显示自动计算的x轴标签以及显式定义的x轴标签。具有在混合模式下呈现的x轴标签的气泡图如下所示:!(https://image.evget.com/attachment/keditor/image/20200825/20200825104040_56090.png)在上图中,您
Wesley13 Wesley13
2年前
Java报表之JFreeChart
一、JFreeChart简介  JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications,servlets以及JSP等使用所设计。  JFreeChart可生成饼图(piecharts)、柱状图(barcharts)、散点图(scatterplots)
Wesley13 Wesley13
2年前
IDEA00 IDEA知识点汇总
一、从头搭建IDEA开发环境https://mp.weixin.qq.com/s/6jXHzkU8JfubhDsQJbwl8Q(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fmp.weixin.qq.com%2Fs%2F6jXHzkU8JfubhDsQJbwl8Q)1下
Stella981 Stella981
2年前
Javascript散点图气泡图控件Scatter & Bubble chart介绍
Scatter&Bubblechart(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.fanganwang.com%2Fproduct%2F3887)控件提供了散点图(XY)和气泡图,使客户可以轻松地在网站上创建出动态的,绚丽的散点图(XY)和气泡图。具体功能:
Wesley13 Wesley13
2年前
R语言相关关系可视化函数梳理(附代码)
当考察多个变量间的相关关系时,通常将多个变量的两两关系以矩阵的形式排列起来,R提供了散点图矩阵、相关矩阵等多种可视化方案,囊括了众多函数。本文对R语言相关关系可视化的函数进行了初步梳理(全篇框架如下),后续大家可根据个人需求及函数功能择优选择。!ca2a37780049afa7173657f022b8b242bc816d00(https://yqfi
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这