我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么在R语言中使用ggplot2绘制分组散点图

这篇文章将为大家详细讲解有关怎么在R语言中使用ggplot2绘制分组散点图,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 首先载入ggplot2包,library(ggplot2)2.
2023-06-14

怎么用R语言绘制散点图

小编给大家分享一下怎么用R语言绘制散点图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!散点图是将所有的数据以点的形式展现在直角坐标系上,以显示变量之间的相互影响程
2023-06-08

如何使用R语言绘制散点图结合边际分布图

这篇文章主要为大家展示了“如何使用R语言绘制散点图结合边际分布图”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用R语言绘制散点图结合边际分布图”这篇文章吧。主要使用ggExtra结合ggp
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录