R语言 使用ggplot2绘制好看的分组散点图

我们以iris数据集为例,该数据集包括花萼的长度和宽度,花瓣的长度和宽度,以及物种,如下图:

本文我们要绘制不同物种下花萼的长度和宽度的分布情况,以及二者之间的相关性关系。

1. 首先载入ggplot2包,

library(ggplot2)

2. 然后进行ggplot(data = NULL, mapping = aes(), ..., environment = parent.frame())绘制,在绘制中第一个参数是数据,第二个参数是数据映射,是绘制的全局变量,其中包含的参数有x,y,color,size,alpha,shape等。

例如:ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)),然后通过快捷散点绘制

+geom_point(size = 2.0, shape = 16),颜色代表不同的物种,如下图:

3. 上面显示的是最原始的散点绘制,通过颜色区分不同的物种,那么如何进行效果的提升呢?

首先是可以进行分面,使得不同物种的对比效果更为显著,这里使用+facet_wrap( ~ Species),效果如下:

4. 通过分面后对比效果好了不少,如果想看下不同物种下花萼长度与宽度的关系呢?可以使用+geom_smooth(method = "loess"),效果图如下:

5. 通过上面的操作效果好了很多,但是还是感觉不够高大上,那我们可以使用library(ggthemes)这个包进行精修一下,通过修改theme,使用+theme_solarized(),效果如下:

还有更多的theme选择,例如+theme_wsj(),效果如下:

这样我们的图是不是高大上了很多呢,所以其实数据可视化也没有多难。最后给下源码:

library(ggthemes)
library(ggplot2)

ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
 geom_point(size = 2.0, shape = 16) +
 facet_wrap( ~ Species) +
 geom_smooth(method = "loess")+

 theme_wsj()

补充:R语言 画图神器ggplot2包

ggplot2

R语言里画图最好用的包啦。感觉图都挺清晰的,就懒得加文字了(或者以后回来补吧>.)前面几个图挺基础的,后面也许会有没见过的ggplot用法哦。

Install Package

install.packages("ggplot2")
library(ggplot2)

Scatter Plot

为了方便展示,用gapminder的数据

if(!require(gapminder)) install.packages("gapminder")
 library(gapminder)
gapminder

数据大概是这样的

假设我们现在想要知道2007年lifeExp和人均GDP之间的关系。

先筛选数据

library(dplyr)
gapminder_2007 <- gapminder %>%
 filter(year == 2007)

画lifeExp和gdpPercap关系的散点图,x为gdpPercap,y为lifeExp。

ggplot(gapminder_2007,aes(x = gdpPercap, y = lifeExp))+geom_point()

看的出来lifeExp与gdpPercap存在近似lifeExp=log(gdpPercap)的关系,对x轴的数值进行log值处理。另外,为了呈现更多信息,用颜色标记国家所在的洲,并用点的大小表示人口数量。

ggplot(gapminder_2007,aes(x = gdpPercap, y = lifeExp, color = continent, size = pop))+
 geom_point()+scale_x_log10()+theme_minimal()+
 labs(x = "GDP per capita",
 y = "Life expectancy",
 title = "Life expectancy increases as GDP per capita increases",
 caption = "Data source: gapminder")

另外一种呈现方式如下:

加入了回归线和坐标轴的histogram。

plot <- ggplot(gapminder_2007, aes(x = gdpPercap, y = lifeExp)) +
 geom_point()+geom_smooth(method="lm")+scale_x_log10()+
 labs(x = "GDP per capita",
 y = "Life expectancy",
 title = "Life expectancy increases as GDP per capita increases",
 caption = "Data source: gapminder")
ggMarginal(plot, type = "histogram", fill="transparent")
#ggMarginal(plot, type = "boxplot", fill="transparent")

Histogram

gapminder_gdp2007 <- gapminder %>%
 filter(year == 2007, continent == "Americas") %>%
 mutate(country = fct_reorder(country,gdpPercap,last))
ggplot(gapminder_gdp2007, aes(x=country, y = gdpPercap))+
 geom_col(fill="skyblue", color="black")+
 labs(x = "Country",
 y = "GDP per capita",
 title = "GDP per capita in North America and South America, 2007",
 caption = "Data source: gapminder")+
 coord_flip()+theme_minimal()

Line Plot

gapminder_pop <- gapminder %>%
 filter(country %in% c("United States","China"))
ggplot(gapminder_pop,aes(x = year, y = pop, color = country))+
 geom_line(lwd = 0.8)+theme_light()+
 labs(x = "Year",
 y = "Population",
 title = "Population in China and United States, 1953-2007",
 caption = "Data source: gapminder")

Facet Plot

gapminder_gdp <- gapminder %>%
 group_by(year, continent) %>%
 summarize(avg_gdp = mean(gdpPercap))
ggplot(gapminder_gdp,aes(x = year, y = avg_gdp, color = continent))+
 geom_line(lwd = 0.8)+theme_light()+facet_wrap(~continent)+
 labs(x = "Year",
 y = "Average GDP per capita",
 title = "Average GDP per capita change in different continent",
 caption = "Data source: gapminder")+
 scale_x_continuous(breaks=c(1955,1970,1985,2000))

Path Plot

gapminder_lifeexp <- gapminder %>%
 filter(year %in% c(1957,2007), continent == "Europe") %>%
 arrange(year) %>%
 mutate(country = fct_reorder(country,lifeExp,last))
ggplot(gapminder_lifeexp) +geom_path(aes(x = lifeExp, y = country),
 arrow = arrow(length = unit(1.5, "mm"), type = "closed")) +
 geom_text(
 aes(x = lifeExp,
 y = country,
 label = round(lifeExp, 1),
 hjust = ifelse(year == 2007,-0.2,1.2)),
 size =3,
 family = "Bookman",
 color = "gray25")+
 scale_x_continuous(limits=c(45, 85))+
 labs(
 x = "Life expectancy",
 y = "Country",
 title = "People live longer in 2007 compared to 1957",
 subtitle = "Life expectancy in European countries",
 caption = "Data source: gapminder"
 )
 

Density Plot

gapminder_1992 <- gapminder %>%
 filter(year == 1992)
ggplot(gapminder_1992, aes(lifeExp))+theme_classic()+
 geom_density(aes(fill=factor(continent)), alpha=0.8) +
 labs(
 x="Life expectancy",
 title="Life expectancy group by continent, 1992",
 caption="Data source: gapminder",
 fill="Continent")

Slope Chart

gapminder_lifeexp2 <- gapminder %>%
 filter(year %in% c(1977,1987,1997,2007),
 country %in% c("Canada", "United States","Mexico","Haiti","El Salvador",
  "Guatemala","Jamaica")) %>%
 mutate(lifeExp = round(lifeExp))
ylabs <- subset(gapminder_lifeexp2, year==head(year,1))$country
yvals <- subset(gapminder_lifeexp2, year==head(year,1))$lifeExp
ggplot(gapminder_lifeexp2, aes(x=as.factor(year),y=lifeExp)) +
 geom_line(aes(group=country),colour="grey80") +
 geom_point(colour="white",size=8) +
 geom_text(aes(label=lifeExp), size=3, color = "black") +
 scale_y_continuous(name="", breaks=yvals, labels=ylabs)+
 theme_classic()+
 labs(title="Life Expectancy of some North America countries change from 1977 to 2007") +
 theme(axis.title=element_blank(),
 axis.ticks = element_blank(),
 plot.title = element_text(hjust=0.5))

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • R语言ggplot2包之注释方式

    引言 光光展示数据对可视化来说,远远不够.还有其他很多信息能够帮助读者解释你的数据.除了标签.坐标轴.图例外,还能够增加注释,比如强调图画的某一区域,添加描述性文本等. 添加文本注释 你可以在图形中添加文本,增加可读性.我们在annotate函数中设置text参数即可. library(ggplot2) library(gcookbook) p <- ggplot(faithful, aes(x=eruptions, y=waiting)) + geom_point() p + annotate

  • R语言ggplot2x轴顺序设置自定义颜色的操作

    先声明一下所用的数据集 第一个图如下 这个图主要在于x轴的顺序设置上,如果按不做任何处理的话>3那个就会在2之前,解决方法是b[,1]<-factor(b[,1],levels=c('2','3',">3")),这句代码可以重新设置因子的级别 完整代码如下: a[,1]<-factor(a[,1],levels=c('2','3',">3")) ggplot(a,aes(x=a[,1],y=a[,2]))+geom_bar(stat=&

  • R语言ggplot2包之坐标轴详解

    引言 我们还可以对图形中的坐标轴进行处理,包括x.y轴对换.设定坐标轴范围.刻度线修改与去除等等.要想对图形玩得转,坐标轴处理精通不可或缺. 坐标轴对换 我们使用coord_flip()函数来对换坐标轴. library(ggplot2) library(gcookbook) ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() ggplot(PlantGrowth, aes(x=group, y=weight)) + geom

  • R语言ggplot2边框背景去除的实现

    ggplot2是R语言功能强大的可视化包,但是在作图时有很多默认设置(边框,背景等)会影响图片美观度.比如我们用ggolot2做一个简单的柱状图,就会发现有灰色背景和白色线条.对于这一问题给出几种解决方案. ggplot(mtcars)+geom_bar(aes(x=cyl)) 1.theme_classic() 应用R自带的主题,比如theme_classic(),就可以使图片美观许多,不仅背景去掉了,坐标轴也更加清晰,如下图所示: ggplot(mtcars)+geom_bar(aes(x=

  • R语言 ggplot2改变柱状图的顺序操作

    如下所示: library(ggplot2) library(ggthemes) dt = data.frame(obj = c('A','D','B','E','C'), val = c(2,15,6,9,7)) dt$obj = factor(dt$obj, levels=c('D','B','C','A','E')) ## 设置柱条的顺序 p = ggplot(dt, aes(x = obj, y = val, fill = obj, group = factor(1))) + geom_

  • R语言 解决安装ggplot2报错的问题

    如下所示: install.packages('xxx',repos='http://cran.us.r-project.org') xxx 改为 ggplot2 补充:R包安装时,出现的错误解决合集 如下所示: 1.library(devtools) #error:Error in get(genname, envir = envir) : object 'testthat_print' not found #解决 options("repos" = c(CRAN="htt

  • R语言ggplot2之图例的设置

    引言 图例的设置包括移除图例.改变图例的位置.改变标签的顺序.改变图例的标题等. 移除图例 有时候你想移除图例,使用 guides(). library(ggplot2) p <- ggplot(PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() p + guides(fill=FALSE) 改变图例的位置 我们可以用theme(legend.position=-)将图例移到图表的上方.下方.左边和右边. p <-

  • R语言 使用ggplot2绘制好看的分组散点图

    我们以iris数据集为例,该数据集包括花萼的长度和宽度,花瓣的长度和宽度,以及物种,如下图: 本文我们要绘制不同物种下花萼的长度和宽度的分布情况,以及二者之间的相关性关系. 1. 首先载入ggplot2包, library(ggplot2) 2. 然后进行ggplot(data = NULL, mapping = aes(), ..., environment = parent.frame())绘制,在绘制中第一个参数是数据,第二个参数是数据映射,是绘制的全局变量,其中包含的参数有x,y,col

  • R语言学习ggplot2绘制统计图形包全面详解

    目录 一.序 二.ggplot2是什么? 三.ggplot2能画出什么样的图? 四.组装机器 五.设计图纸 六.机器的零件 1. 零件--散点图 1) 变换颜色 2) 拟合曲线 3) 变换大小 4) 修改透明度 5) 分层 6) 改中文 2. 零件--直方图与条形图 1) 直方图 2) 润色 3) 条形图 3. 零件--饼图 4. 零件--箱线图 5. 零件--小提琴图 6. 零件打磨 7. 超级变变变 8. 其他常用零件 七.实践出真知 八.学习资源 九.参考资料 一.序 作为一枚统计专业的学

  • R语言可视化ggplot2绘制24小时动态血糖图

    目录 数据格式 创建等距时间序列的方法(分钟) 画图代码 数据格式 sample=read.csv("sample.csv",header = T,stringsAsFactors = F)head(sample) 创建等距时间序列的方法(分钟) time=strptime("00:00:00","%H:%M:%S")+300*0:287 #没有填日期的时候,默认日期为今天 画图代码 #time首先要转换成 POSIXct 格式, 下面的brea

  • R语言利用ggplot2绘制QQ图和箱线图详解

    目录 绘制qq图 函数介绍 例子 绘制boxplot 函数介绍 例子 利用分位点绘制箱线图 将QQ图和箱线图进行融合 函数介绍 参数介绍 注意事项 例子 绘制qq图 在ggplot2中绘制qq图需要两步,geom_qq()将绘制样本分位点,geom_qq_line()将绘制标准正态线 函数介绍 geom_qq() geom_qq( mapping = NULL, data = NULL, geom = "point", position = "identity",

  • R语言使用ggplot绘制画中画细节放大的方法

    目录 1. 载入相关包 2. 数据生成 3. 基础绘图 4. 放大效果 5. 绘图美化 其他方法 当我们在利用ggplot绘图时,当遇到一些量纲相差过大,或者一些图的某些点排布密集时,需要将细节部分进行放大,这时我们就需要采用画中画的方式,或者将统计图的细节在旁边进行放大. 下面我们就来一步一步讲解如何将图中的细节进行放大(核心为ggforce包).话不多说,先上最终效果图(以2019年双十一数据拟合为例): 1. 载入相关包 library(ggplot2) # 绘图核心 library(ti

  • R语言数据可视化绘制Circular bar plot实现环形柱状图

    目录 Step1. 绘图数据的准备 Step2. 绘图数据的读取 Step3.绘图所需package的调用 Step4.绘图 环形柱状图 排好序的环形柱状图 调整颜色 注意事项 不知不觉,距离小仙上次发文已经过去五个多月了.R语言作图系列的更新频率跟理想中的一月一次差别有点忒大了,不得不让小仙陷入深深的反思,对于时间的规划也有了一些新的感悟.不知道大家有没有跟我一样的感受啊,举些例子:放学.下班或者放假之后先把学习任务扔在一边,心想着,我先玩会游戏,等会玩够了再做:网上看到一篇干货满满的文章,先

  • R语言编程学习绘制动态图实现示例

    在讨论级数时,可能需要比对前 n n n项和的变化情况,而随着 n n n的递增,通过动态图来反映这种变化会更加直观,而通过R语言绘制动态图也算是一门不那么初级的技术,所以在此添加一节,补充一下R语言的绘图知识. 绘图需要用到ggplot2,为多张图加上时间轴则需要用到gganimate,为了让这些动态图片被渲染,需要用到av.此外,ggplot2绘图需要输入的数据格式为tibble. install.packages("ggplot2") install.packages("

  • R语言中ggplot2绘制双坐标轴图

    R包ggplot2绘图精美,可以做出很复杂的图形,深受用户喜爱.它的作者hadley并不推荐使用ggplot2绘制双坐标轴图,认为这样会增加读图的难度,但是目前需要双坐标轴图应用的场景还是很多,如下图形直方图和曲线分别有不同的坐标轴,表示不同的意思,图片展示内容比较丰富 今天我们通过我们的汽车销售数据(公众号回复:汽车销售,可以获得数据)来演示一下ggplot2绘制双坐标轴图,主要是通过sec.axis函数进行转换,进行第二个坐标轴的转换.我们先来导入数据 library(foreign) li

  • R语言-如何按照某一列分组求均值

    主要介绍tapply函数: 每次只能求一列 aggregate函数:每次按组可以求多列 tapply(shuju[shuju[,3],shuju$year,mean) 以年份为组,求shuju表第三列的均值 aggregate(shuju[,3:4],list(shuju[,2]),mean) 以年份为均值,求数据表第三列,第四列的均值 补充:R语言按某一列分类求均值+绘图总结 看代码吧~ D<-aggregate(.~K,data=data1,mean) #求数据集data1按照K分类后所有列

  • R语言数据可视化tidyr与ggplot2多个变量分层展示举例实现

    目录 每个变量的密度分布情况 思考 tidyr ggplot2进行绘图 在R语言普通的绘图中,使用par()参数可以在一张图上实现不同变量的子图.如果我们想要用ggplot2实现,则需要整理我们的原始数据,这通常是非常麻烦的,这时就需要用到我们的tidyr来帮助我们绘图. 可能说上面一段话不是很容易理解,下面我们来举个栗子. 每个变量的密度分布情况 y1 <- rnorm(20) y2 <- rnorm(20) dat <- data.frame(y1, y2) 现有的数据集: y1 y

随机推荐