ggplot作图基础

news2024/12/22 19:43:54

目录

ggplot作图语法

散点图

 折线图

group分组

face_wrap()图像切片摆放

facet_grid()交叉分组切片 

条形图

2.1 单组变量条形图

 2.2 多维展示变量

直方图有与密度估计

直方图

 密度估计图

..density..语法和stat=“density”


ggplot作图语法

        ggplot作图是将数据按需要进行映射aes(x,y,color,fill,size...,),并将若干个几何图像以图层形式进行叠加,并设置合适的刻度scale和坐标系,添加标题等完善作图。每个几何图像内还可以额外指定映射。

        每维映射有一个scale刻度控制其坐标、数据展示。要修改其默认刻度,使用scale_xx_xx(),语法为scal_维数_类型。“类型”包括continuous、discrete、log10。

        如scale_x_continuous(limits,breaks,labs)用于设置x轴范围、刻度、标签

散点图

# 加载包和准备数据集
# gapminder包中gapminder数据集记录了多个国家地区期望寿命和人均jdp数据
library('ggplot2')
library('gapminder')
head(gapminder,5)

# ——————第一步——————
# 将数据输入ggpllot函数并按需将变量映射到x、y以及其它属性如颜色color进行分类
p<-ggplot(data = gapminder,
           mapping=aes(
             x= gdpPercap,
             y= lifeExp,
             color = continent # 将大洲变量映射到颜色维
           ))
# Note: 使用+号连接
# ——————第二步——————
# 选择将导入ggplot的数据以那种形式展现
# 依次是:1.用散点图geom_point展示
#        2.再加上个拟合曲线图geom_smoth,拟合方法有gam、lm
# !!!还有多个可选参数如color, 显示置信域se , size, 透明度alpha、linetype线类型
p1<- p + geom_point()  + geom_smooth(method = 'gam')
# ——————第三步——————
# 设置适当的坐标系统
# 为什么?:原坐标系数据多集中在0-30000gdp,严重右偏,对数化x轴scale_x_log10()改善观感
# Note: geom_smooth()的拟合计算是在对数变换之后进行的
# Note: 此外,希望x轴标签采用美元单位,避免不同包有相函数,使用包::函数
p1<-p1 + scale_x_log10(labels=scales::dollar)
# ——————第四步——————
# 设定标题和图例位置等
p1<-p1 + labs(
  x = "人均GDP",
  y = "期望寿命(年数)",
  title = "经济增长与期望寿命",
  subtitle = "数据点为每个国家每年",
  caption = "数据来源: gapminder" 
)

# Note: 此外,geom_point()等geom_XXXX()函数中可以单独使用mapping=aes(color=continent)
# Note: 这样的话齐对continent分组效果智慧作用于该图形如point,其它图形如smoth这不会被影响,
#       导致结果就是smoth图中不分别对continent大洲进行分别拟合
p1

数据集 

 作图结果

 折线图

group分组

# 加载包和准备数据集
# gapminder包中gapminder数据集记录了多个国家地区期望寿命和人均jdp数据
library('ggplot2')
library('gapminder')
head(gapminder,5)


# 将数据输入ggpllot函数并按需将变量映射到x、y并利用group根据country进行分组
p<-ggplot(data = gapminder,
          mapping=aes(
            x= year,
            y= lifeExp,
            group = country
          ))
#根据映射好的数据进行绘图
p + geom_line()

注意到有一个国家从 1990-2000出现极大剧烈的波动,希望筛选出来展示:

# 加载包和准备数据集
# gapminder包中gapminder数据集记录了多个国家地区期望寿命和人均jdp数据
library('ggplot2')
library('gapminder')
head(gapminder,5)


library(dplyr)
# 筛选出这个国家的数据输入ggplot完成数据x,y映射
some_country<-filter(gapminder,lifeExp < 30, year >= 1990)# 该国家为Rwanda 
p<-ggplot(data = filter(gapminder,country ==some_country[['country']] ),# 也可以some_country$country
          mapping=aes(
            x= year,
            y= lifeExp,
          ))
#根据映射好的数据进行绘图
p + 
  geom_line() +
  geom_point()# 每个数据点用散点标出

# note: 如果mapping映射的变量是因子型或字符型,会起到分组作用,在没有显示group=情况下,
#       只能在组内根据数据连线,因此例如若year是字符型或因子,折线不会出现。
# note: geom_area()作类似图形, 纵坐标从0开始

 tibble[[]] 和 tibble$country区别

> some_country[c('country')]
# A tibble: 1 × 1
  country
  <fct>  
1 Rwanda 
> some_country$country
[1] Rwanda
142 Levels: Afghanistan Albania Algeria Angola Argentina ... Zimbabwe

face_wrap()图像切片摆放

# 加载包和准备数据集
# gapminder包中gapminder数据集记录了多个国家地区期望寿命和人均jdp、年份数据
library('ggplot2')
library('gapminder')
head(gapminder,5)


# 按照不同大洲对期望寿命和年份进行切片
p<-ggplot(gapminder,mapping= aes(
  x=year,
  y=lifeExp,
  # group = country,因为不希望smoth对每个国家分组进行分别拟合,需要单独在line中group
)) + 
 geom_line(mapping =  aes(group = country),color = "gray") +
 geom_smooth(method = "loess",color="cyan",se=FALSE,size=1.1) +
  # 按照大洲切片,每行2个图
 facet_wrap(~continent,ncol=2) + 
 labs(x = "年份",y = "期望寿命",title = "五个大洲各国期望寿命变化趋势")

 p

facet_grid()交叉分组切片 

p_else + facet_grid(a~b) #按照a、b交叉分组对图片进行分别展示

条形图

        条形图(barplot)反映分类变量的频数分布或者比例

2.1 单组变量条形图

# socviz中gss_sm数据集是美国社会调查数据
library(socviz)
head(gss_sm)
# Note: ggplot2中的条形图函数geom_bar(),只需要x一个映射可以对一个分类变量调用一个默认函数自动统计频数
#       建议统计好频数,仅用ggplot绘图
# 现在希望展示出每个bigregin分别有多少受访者

# 首先得出频数数据
library(dplyr)
library(tidyverse)
# 管道语法‘|>’,将数据传递到下一次调用
dataCount <- gss_sm|>
            select(bigregion) |> # dplyr 选择bigregion列
            count(bigregion) |> # tidyverse 计算分类频数
            mutate(ratio = n/sum(n)) # dplyr 增加新列表示占总bigregion比例
dataCount
# Note:geom_col是另一种bar图,不同于geom_bar,geom_col可以将用户输入的数据表示高度
#       而不是自动计算,需要x、y两个映射
p<-ggplot(dataCount,aes(x=bigregion,y=n,fill=bigregion))+geom_col()+labs(y="Count")
p
# Note:  + theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))横轴label45度摆放
# Note: + coord_flip()将x轴和y轴互换,实现条形图横放
# Note:  + guides(fill = "none")去除fill维产生右侧图例

 2.2 多维展示变量

library(socviz)
library(dplyr)
head(gss_sm)
d1 <- gss_sm |>
  select(bigregion,religion) |> # dplyr 选择列
  group_by(bigregion,religion)|>  # dply 分组
  summarise(count_n = n(),.groups = "drop_last")|> # count_n作为返回变量的名字,n() 给出当前分组的size.drop_last去掉最后一级分组即religion
  mutate(ratio = count_n/sum(count_n)) # 增加占比数据列(或称变量)

library(ggplot2)
p<- ggplot(d1,aes(
  x = bigregion,
  y = count_n ,
  fill = religion
))
p+geom_col() # position = "stack"也是geom_col()函数的默认选项

#...
# 侧重于比较每个大类内部
# "fill"标准化堆叠:将每个条形图的总高度标准化为 1,展示各组在总量中的相对比例
p+geom_col(position="fill") + labs(y=NULL)
# "dodge"将条形图并排显示。条形图保持原y轴映射的变量,表现每个交叉类的频数。
p+geom_col(position="dodge")
# coord_flip()横向展示条形图
p+geom_col(position="stack")+coord_flip()

 此外,还可以利用切片+facet_grid(v~w)展示条形图.

直方图有与密度估计

直方图

        直方图(histogram)反映连续变量的分布.

# midwest数据集包含了美国中西部的一些县的统计数据
head(midwest)
p<-ggplot(midwest,aes(x=area))
p + geom_histogram() # bins分组数、binwidth分组宽度

 密度估计图


ggplot(midwest, aes(
  x = area, 
  color = state,# 线条颜色
  fill = state # 填充颜色
  )) +
  geom_density(alpha = 0.3)
# geom_line(stat="density")# 使用密度估计统计变换,绘制数据的密度曲线。

做在同一ggplot上,要同时将直方图y轴计数转换为密度表示 

ggplot(midwest, aes(x = area)) +
  geom_histogram(
    mapping = aes(y = ..density..), 
    alpha = 0.6) +
  geom_density(size = 1.1)

..density..语法和stat=“density”

        stat参数负责根据传入的函数将数据根据某种统计量计算方法计算出值。stat="density",调用stat_density()计算结果

.

        ..density.. 是一种特殊的语法,例如  geom_histogram( mapping = aes(y = ..density..) 用于在 aes() 中引用由 stat_bin() 计算出的密度值,并将其轴转换为密度density。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2116961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

锡林郭勒奶酪品牌呼和浩特市大召店盛大开业

礼献中秋&#xff0c;香飘乳都。为进一步拓展锡林郭勒奶酪区域公用品牌产品销售渠道&#xff0c;9月8日&#xff0c;锡林郭勒奶酪区域公用品牌大召店在呼和浩特市大召广场月明楼隆重开业&#xff0c;现场为第三批新授权的39家奶酪生产经营主体代表授牌。至此&#xff0c;锡林郭…

Debian 12如何关闭防火墙

在Debian 12中&#xff0c;默认的防火墙管理工具是ufw&#xff08;Uncomplicated Firewall&#xff09;。您可以使用以下命令来关闭防火墙&#xff1a; 关闭防火墙&#xff1a; sudo ufw disable查看防火墙状态&#xff1a; sudo ufw status如果需要重新开启防火墙&#xff1a;…

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后&#xff0c;将用户信息存储在记录在 localStorage中&#xff0c;然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上&#xff0c;并且头像设置跳转&#xff0c;到个人资料界面 这里数据库中还没有设置相关信息 2.模糊…

数学建模笔记—— 主成分分析(PCA)

数学建模笔记—— 主成分分析 主成分分析1. 基本原理1.1 主成分分析方法1.2 数据降维1.3 主成分分析原理1.4 主成分分析思想 2. PCA的计算步骤3. 典型例题4. 主成分分析说明5. python代码实现 主成分分析 1. 基本原理 在实际问题研究中,多变量问题是经常会遇到的。变量太多,无…

通信工程学习:什么是PSK相移键控、2PSK/BPSK二进制相移键控

PSK相移键控、2PSK/BPSK二进制相移键控 PSK&#xff08;相移键控&#xff09;和2PSK/BPSK&#xff08;二进制相移键控&#xff09;是两种在通信系统中广泛使用的调制技术。以下是对它们的详细解释&#xff1a; 一、PSK&#xff1a;相移键控 1、PSK相移键控的定义&#xff1a;…

websocket client无法连接到websocket server 的问题

1. 问题描述 生产环境的websocket client和server无法通信 2. 日志现象 通过查看日志和问题复现&#xff0c;定位到是client连接到server失败&#xff0c;导致无法通信。 出现问题的代码 出现问题的日志 21:25:27.790 [main] INFO websocket.MyWebSocketClient - start to…

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目&#xff1a; 分析 我们首先使用哈希表来统计数字出现的频率&#xff0c;然后我们使用一个桶排序。我们首先定义一个长度为n1的数组&#xff0c;对于下图这个示例就是长度为7的数组。为什么需要一个长…

Redis进阶(七):分布式锁

在分布式系统下&#xff0c;涉及到多个节点访问同一个公共资源的情况&#xff0c;此时需要通过 锁 进行互斥控制&#xff1a;避免出现 线程安全问题。 1.分布式锁的基本实现 超卖问题&#xff1a; 解决: 采用redis实现分布式锁 可用采取&#xff1a;在购票的时候&#xff0…

C语言 | Leetcode C语言题解之第390题消除游戏

题目&#xff1a; 题解&#xff1a; int lastRemaining(int n) {int a1 1;int k 0, cnt n, step 1;while (cnt > 1) {if (k % 2 0) { // 正向a1 a1 step;} else { // 反向a1 (cnt % 2 0) ? a1 : a1 step;}k;cnt cnt >> 1;step step << 1;}return …

【机器学习】和【人工智能】在量子力学的应用及代码案例分析

知孤云出岫 这里写目录标题 一、机器学习和人工智能在量子力学中的应用概述二、量子态的表示与模拟2.1 变分自编码器&#xff08;VAE&#xff09;用于量子态模拟 三、量子系统的哈密顿量学习3.1 使用机器学习推断哈密顿量 四、量子计算中的算法优化4.1 变分量子算法&#xff08…

AI大模型日报#0908:OpenAI计划年底推出GPT Next、Roblox官宣AI秒生3D物体模型

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE-4.0-8K-latest&#xff09;、“智谱AI”&#xff08;glm-4-0520&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅…

如果文件从存储卡中被误删除,存储卡数据恢复如何恢复?

如果文件被误从存储卡中删除&#xff0c;如何从Android 手机、相机或其他数码设备&#xff08; SD/CF/MicroSD/xD ...&#xff09;恢复照片视频&#xff1b;存储卡已格式化&#xff0c;原始 0 字节&#xff0c;空白&#xff1b;存储卡要求格式化&#xff1b;存储卡未显示、无法…

基于ONNX-YOLOv10-Object-Detection项目实现yolov10模型onnx-python推理

项目地址&#xff1a;https://github.com/ibaiGorordo/ONNX-YOLOv10-Object-Detection 项目依赖&#xff1a;onnxruntime-gpu、opencv-python、imread-from-url、cap-from-youtube、ultralytics 1、代码修改 代码改动说明&#xff1a;yolov10/yolov10.py中的第18行修改为以下…

Docker部署tenine实现后端应用的高可用与负载均衡

采用Docker方式的Tengine 和 keepalived 组合模式可以实现小应用场景的高可用负载均衡需求 目录 网络架构一、环境准备二、软件安装1. 下载Tenine镜像2. 下载Keepalived镜像3. 制作SpringBoot镜像 三、软件配置1. 创建应用容器2. 代理访问应用3. 创建Keepalived4. 测试高可用 网…

基于YOLOv5的积水检测模型训练:从数据到模型的全面解析

之前给大家带来了Yololov5Pyqt5Opencv 实时城市积水报警系统&#xff0c; 详见&#xff1a; Yololov5Pyqt5Opencv 实时城市积水报警系统_yolo opencv pyqt5-CSDN博客 今天详细解析一下积水检测模型训练部分的内容 在积水检测项目中&#xff0c;实时性和准确性是至关重要的。…

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介 1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 &#xff08;OTA&#xff09; 3在线编程&#xff08;ICP把整个程序都更新掉&#xff09; 1 系统的Bootloader写死了&#xff0c;只能用串口下载到指定的位置&a…

Spring Boot事务管理

事务管理 事务进阶 如果在删除了部门之后&#xff0c;出现了异常。那么就会出现部门被删除之后其中的员工并未被删除。 Transactional注解&#xff0c;在事务执行完成之后自动提交或者回滚。只需要在执行多次数据修改的事务上加上该注解即可。&#xff08;比如两次Update或者…

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建 首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件…

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…

11.5.软件系统分析与设计-面向对象的程序设计与实现

面向对象的程序设计与实现 设计模式 Java代码 C代码