服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - R语言 - R语言 使用ggplot2绘制好看的分组散点图

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

2022-01-04 15:48yepeng2007fei R语言

这篇文章主要介绍了R语言 使用ggplot2绘制好看的分组散点图操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

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

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

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),颜色代表不同的物种,如下图:

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

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

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

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

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

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

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

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

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

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

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

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

数据大概是这样的

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

假设我们现在想要知道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()

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

看的出来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")

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

另外一种呈现方式如下:

加入了回归线和坐标轴的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")

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

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()

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

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")

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

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))

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

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"
)

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

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")

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

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))

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

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

原文链接:https://blog.csdn.net/yepeng2007fei/article/details/80696713

延伸 · 阅读

精彩推荐
  • R语言R语言可视化存储矢量图实现方式

    R语言可视化存储矢量图实现方式

    这篇文章主要为大家介绍了R语言存储矢量图的实现方式过程,有需要的朋友可以借鉴参考下,希望能够有所你帮助,祝大家多多进步,早日升职加薪...

    Kanny广小隶9392022-01-20
  • R语言R语言编程学习绘制动态图实现示例

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

    这篇文章主要介绍了R语言编程学习绘制动态图实现示例,有需要的的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    微小冷7652022-01-18
  • R语言R语言中c()函数与paste()函数的区别说明

    R语言中c()函数与paste()函数的区别说明

    这篇文章主要介绍了R语言中c()函数与paste()函数的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    yiyu_j11152022-01-12
  • R语言R语言-使用ifelse进行数据分组

    R语言-使用ifelse进行数据分组

    这篇文章主要介绍了R语言-使用ifelse进行数据分组,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    小力丸12042022-01-10
  • R语言R语言绘制散点图实例分析

    R语言绘制散点图实例分析

    在本篇文章里小编给大家整理的是一篇关于R语言绘制散点图实例分析内容,有需要的朋友们可以学习下。...

    w3cschool6942022-01-06
  • R语言聊聊R语言中Legend 函数的参数用法

    聊聊R语言中Legend 函数的参数用法

    这篇文章主要介绍了聊聊R语言中Legend 函数的参数用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Gavin姓陈6352021-12-28
  • R语言R语言创建矩阵的实现方法

    R语言创建矩阵的实现方法

    这篇文章主要介绍了R语言创建矩阵的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    hjk_caesar9462021-12-27
  • R语言R studio 批量注释的快捷方式

    R studio 批量注释的快捷方式

    这篇文章主要介绍了R studio 批量注释的快捷方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    JasonKQLin13342022-01-04