R语言绘图

多组火山图

数据准备:

将CSV文件同一在一个路径下,用代码合并

确保文件列名正确

library(fs)
library(dplyr)
library(tidyr)
library(stringr)
library(ggplot2)
library(ggfun)
library(ggrepel)

# 获取文件列表
file_paths <- dir_ls(path = "E:\\proteomic\\fuxian_bacteria\\multivolcano", pattern = "_DEG\\.csv$", full.names = T)
# 检查文件列表
print(file_paths)

# 读取和处理数据
all_deg <- map(file_paths, function(x){
  # 检查文件扩展名,忽略大小写
  if (str_ends(str_to_lower(x), ".csv")) {
    cat("Processing file:", x, "\n") # 打印正在处理的文件名
    data <- read_delim(file = x, col_names = T, delim = ",")
    if (is.data.frame(data)) {
      group <- str_remove(basename(x), pattern = "_DEG.*")
      return(dplyr::mutate(data, group = group))
    } else {
      cat("Failed to read file:", x, "\n")
      return(NULL)
    }
  } else {
    cat("Skipping non-CSV file:", x, "\n")
    return(NULL)
  }
}) %>%
  compact() %>% # 移除列表中的 NULL 元素
  do.call(rbind, .)

ggplot(data = all_deg) +
  geom_jitter(data = all_deg %>% dplyr::filter(change == "Normal"),
              aes(x = group, y = logFC, color = change, size = abs(logFC), alpha = abs(logFC)),
              width = 0.4) +
  geom_jitter(data = all_deg %>% dplyr::filter(change != "Normal"),
              aes(x = group, y = logFC, color = change, size = abs(logFC), alpha = abs(logFC)),
              width = 0.4) +
  geom_jitter(data = all_deg %>% dplyr::group_by(group) %>%
                dplyr::arrange(desc(abs(logFC))) %>%
                dplyr::slice_head(n = 15) %>%
                dplyr::ungroup() %>%
                na.omit(),
              aes(x = group, y = logFC, size = abs(logFC)),
              width = 0.4, shape = 21, fill = "#e77381") +
  geom_text_repel(data = all_deg %>% dplyr::group_by(group) %>%
                    dplyr::arrange(desc(abs(logFC))) %>%
                    dplyr::slice_head(n = 15) %>%
                    dplyr::ungroup() %>%
                    na.omit(),
                  aes(x = group, y = logFC, label = SYMBOL)) +
  geom_tile(aes(x = group, y = 0, fill = group), height = 0.4) +
  geom_text(data = all_deg %>% dplyr::select(group) %>% dplyr::distinct(group, .keep_all = T),
            aes(x = group, y = 0, label = group), size = 6) +
  geom_hline(yintercept = c(-log2(1.5), log2(1.5))) +
  scale_y_continuous(limits = c(-5, 5)) +
  scale_size(range = c(1, 10)) +
  scale_alpha(range = c(0.1, 1)) +
  scale_color_manual(values = c("Up" = "#f46d43", "Normal" = "#bdbdbd", "Down" = "#3288bd")) +
  scale_fill_manual(values = c('#8dd3c7','#ffffb3','#bebada','#fb8072','#80b1d3')) +
  theme_bw() +
  theme(axis.text = element_text(color = "#000000", size = 12),
        axis.title = element_text(color = "#000000", size = 15),
        panel.grid = element_blank(),
        legend.background = element_roundrect(color = "#969696")) +
  labs(y = "log2(Fold Change)")

中国地图

不分类地形图

自然地球 » 1:50m 自然地球 I - 1:10m、1:50m 和 1:110m 比例的自由矢量和栅格地图数据该地址下载水纹地图,获得.tif文件

install.packages("geodata")
install.packages("terra")
install.packages("tidyterra")
install.packages("ggspatial")
install.packages("mapchina")
install.packages("ggmapcn")
install.packages("raster")
library(tidyverse)
library(geodata)
library(terra)
library(mapchina)
library(ggmapcn)
library(sf)
library(raster)
library(ggplot2)
library(tidyterra)
library(ggspatial)
library(tibble)
library(ggsci)
library(dplyr)


# 创建包含城市名称、纬度和经度的数据框
hospital_locations <- tibble(
  city = c(
    "南京", "北京", "昆明", "郑州", "上海", "南昌", "乌鲁木齐", "杭州",
    "海口", "成都", "南宁", "重庆", "哈尔滨", "济南", "广州", "武汉"
  ),
  latitude = c(
    32.0583, 39.9042, 25.0459, 34.7565, 31.2304, 28.6824, 43.8257, 30.2728,
    20.0171, 30.5728, 22.8155, 29.5331, 45.7566, 36.6539, 23.1291, 30.5828
  ),
  longitude = c(
    118.7978, 116.4074, 102.7282, 113.6294, 121.4737, 115.8547, 87.5842, 120.1544,
    110.3385, 104.0668, 108.3211, 106.5515, 126.6632, 117.0009, 113.2644, 114.3055
  )
)

# 将数据框转换为简单特征(Simple Features)对象
travel_st_as_sf <- st_as_sf(hospital_locations, 
                            coords = c("longitude", "latitude"), 
                            crs = 4326)
# China Map with Shaded Relief and Water----------------------------------------------------------------
china_map <- sf::st_read("https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json")[c("adcode", "name", "geometry")]
nat.earth <- raster::brick("E:\\proteomic\\fuxian_bacteria\\NE1_50M_SR_W\\NE1_50M_SR_W.tif")
ggplot(china_map) +
theme_bw() +
layer_spatial(nat.earth)+
geom_sf(fill = "white", color = 'black', size = 1.2) +
geom_sf(data = travel_st_as_sf, shape = 21, fill = "#07519c", size = 2) +
annotation_north_arrow(location = "tl", which_north = F,
pad_x = unit(0.05, "in"),
pad_y = unit(0.05, "in"),
style = north_arrow_fancy_orienteering) +
theme(axis.text = element_text(size = 12, color = "black"),
         axis.line = element_blank(),
         panel.background = element_rect("white")) +
   # 地图底层颜色设置
   coord_sf(ylim = c(-3687082, 1654989),
            xlim = c(-3000000, 2700000),
            crs = "+proj=laea +lat_0=40 +lon_0=104") +
   annotation_scale(location = "bl", width_hint = 0.3) +
   labs(x = '', y = '', color = NULL)

分类地形图

cr_hvkp <- tibble(
  city = c("南京", "北京", "昆明", "郑州", "上海","上海", "南昌", "乌鲁木齐", "杭州", "杭州"),
  Latitude = c(32.0583, 39.9042, 25.0459, 34.7565, 31.2304,31.2304, 28.6824, 43.8257, 30.2728, 30.2728),
  Longitude = c(118.7978, 116.4074, 102.7282, 113.6294, 121.4737,  121.4737, 115.8547, 87.5842, 120.1544, 120.1544),
  Category = "CR-hvKP"
)

cs_hvkp <- tibble(
  city = c("南昌","昆明", "北京", "北京","海口", "成都", "南宁","重庆","哈尔滨","济南"),
  Latitude = c(28.6824,25.0459, 39.9042,39.9042, 20.0171, 30.5728, 22.8155, 29.5331, 45.7566, 36.6539),
  Longitude = c(115.8547,102.7282, 116.4074,116.4074, 110.3385, 104.0668, 108.3211, 106.5515, 126.6632, 117.0009),
  Category = "CS-hvKP"
)

cr_ckp <- tibble(
  city = c("重庆", "广州", "武汉", "上海", "昆明"),
  Latitude = c(29.5331, 23.1291, 30.5828, 31.2304, 25.0459),
  Longitude = c(106.5515, 113.2644, 114.3055, 121.4737, 102.7282),
  Category= "CR-cKP"
)

cs_ckp <- tibble(
  city = c("昆明", "武汉", "杭州", "哈尔滨", "成都"),
  Latitude = c(25.0459, 30.5828, 30.2728, 45.7566, 30.5728),
  Longitude = c(102.7282, 114.3055, 120.1544, 126.6632, 104.0668),
  Category = "CS-cKP"
)

# 合并所有数据
all_data <- bind_rows(cr_ckp, cs_ckp,cr_hvkp, cs_hvkp)
all_data <- all_data[,-1]


ggplot() +
  geom_mapcn() +  
  theme_minimal()+
  geom_loc(
    data = all_data, lon = "Longitude", lat = "Latitude",
    mapping = aes(color = Category), size = 3, alpha = 0.7
  ) +
  scale_color_manual(values = c("CR-hvKP" = "red", "CS-hvKP" = "blue", "CR-cKP" = "green", "CS-cKP" = "yellow")) +
theme_bw()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA2023版中TODO的使用

介绍&#xff1a;TODO其实本质上还是注释&#xff0c;只不过加上了TODO这几个字符&#xff0c;可以让使用者快速找到。 注意&#xff1a;在类、接口等文件中&#xff0c;注释是使用// 即&#xff1a;// TODO 注释内容 在配置文件中&#xff0c;注释是使用# 即&#xff1a;# TO…

Maven的多模块架构设计诺依的多模块

Maven的多模块架构设计 多模块架构设计&#xff0c;本文采用 诺依的多模块架构设计分析

【JsonViewer】Json格式化

使用 Notepad 对 Json 数据进行格式化处理&#xff0c;使数据在结构上更清晰 1.在线安装 安装之后&#xff0c;重启应用&#xff0c;在插件菜单栏即可看到 JsonViewer 选项&#xff0c;在 Notepad 中放入 Json 数据&#xff0c;点击 Format Json 进行数据格式化 2.离线安装 …

【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)

文章目录 一、产品简介二、漏洞描述三、影响版本四、漏洞检测方法五、解决方案 一、产品简介 FortiOS是Fortinet公司核心的网络安全操作系统&#xff0c;广泛应用于FortiGate下一代防火墙&#xff0c;为用户提供防火墙、VPN、入侵防御、应用控制等多种安全功能。 FortiProxy则…

企业分类相似度筛选实战:基于规则与向量方法的对比分析

文章目录 企业表相似类别筛选实战项目背景介绍效果展示基于规则的效果基于向量相似的效果 说明相关文章推荐 企业表相似类别筛选实战 项目背景 在当下RAG&#xff08;检索增强生成&#xff09;技术应用不断发展的背景下&#xff0c;掌握文本相似算法不仅能够助力信息检索&…

Ubuntu打开文件夹不显示文件

1.情况介绍 使用ubuntu打开文件夹不显示文件夹里面的内容&#xff0c;而是直接打开了资源查看器。 2.解决办法 命令行安装nautilus sudo apt-get install nautilus

Go-知识 版本演进

Go-知识 版本演进 Go release notesr56(2011/03/16)r57(2011/05/03)Gofix 工具语言包工具小修订 r58(2011/06/29)语言包工具小修订 r59(2011/08/01)语言包工具 r60(2011/09/07)语言包工具 [go1 2012-03-28](https://golang.google.cn/doc/devel/release#go1)[go1.1 2013-05-13]…

pycharm+pyside6+desinger实现查询汉字笔顺GIF动图

一、引言 这学期儿子语文期末考试有一道这样的题目&#xff1a; 这道题答案是B&#xff0c;儿子做错了选了C。我告诉他“车字旁”和“车”的笔顺是不一样的&#xff0c;因为二者有一个笔画是不一样的&#xff0c;“车字旁”下边那笔是“提”&#xff0c;而“车”字是“横”&am…

Red Hat8:搭建DHCP服务器

1、新建挂载文件 2、挂载 3、关闭防火墙 4、搭建yum源 &#xff08;搭建的时候用vim 自行定义文件名.repo或者是vi 自行定义文件名.repo&#xff09; 5、安装dhcp-server 6、复制模板文件 dhcpd.conf 是DHCP服务的配置文件&#xff0c;DHCP服务所有参数都是通过修改dhcpd.co…

Web前端------HTML链接标签

1.普通超链接 &#xff08;1&#xff09;链接外部网页 点击文本&#xff0c;跳转到外部网页 <!DOCTYPE html><html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

linux下springboot项目nohup日志或tomcat日志切割处理方案

目录 1. 配置流程 2. 配置说明 其他配置选项&#xff1a; 3. 测试执行 4. 手动执行 https://juejin.cn/post/7081890486453010469 通常情况下&#xff0c;我们的springboot项目部署到linux服务器中&#xff0c;通过nohup java -jar xxx.jar &指令来进行后台运行我们…

每日进步一点点(网安)

1.BUU CODE REVIEW 1 先看源代码 <?phphighlight_file(__FILE__);class BUU {public $correct "";public $input "";public function __destruct() {try {$this->correct base64_encode(uniqid());if($this->correct $this->input) {ec…

2025.1.19机器学习笔记:PINN文献精读

第三十周周报 一、文献阅读题目信息摘要Abstract创新点物理背景网络框架实验实验一&#xff1a;直道稳定流条件实验二&#xff1a;环状网络中的非稳定流条件 结论缺点及展望 二、代码实践总结 一、文献阅读 题目信息 题目&#xff1a;《Enhanced physics-informed neural net…

移动端布局 ---- 学习分享

响应式布局实现方法 主流的实现方案有两种: 通过rem \ vw/vh \ 等单位,实现在不同设备上显示相同比例进而实现适配. 响应式布局,通过媒体查询media 实现一套HTML配合多套CSS实现适配. 在学习移动端适配之前,还需要学习移动端适配原理: 移动端适配原理(Viewport) 了解VSCo…

STM32 FreeROTS 任务创建和删除实验(静态方法)

实验目标 学会 xTaskCreateStatic( )和 vTaskDelete( ) 的使用&#xff1a; start_task&#xff1a;用来创建其他的三个任务。task1&#xff1a;实现LED1每500ms闪烁一次。task2&#xff1a;实现LED2每500ms闪烁一次。 task3&#xff1a;判断按键KEY1是否按下&#xff0c;按…

家政服务小程序,打造智慧家政新体验

春节即将来临&#xff0c;家政市场呈现出了火热的场景&#xff0c;大众对家政服务的需求持续增加。 近年来&#xff0c;家政市场开始倾向数字化、智能化&#xff0c;借助科学技术打造家政数字化平台&#xff0c;让大众在手机上就可以预约家政服务&#xff0c;减少传统家政市场…

《贪心算法:原理剖析与典型例题精解》

必刷的贪心算法典型例题&#xff01; 算法竞赛&#xff08;蓝桥杯&#xff09;贪心算法1——数塔问题-CSDN博客 算法竞赛&#xff08;蓝桥杯&#xff09;贪心算法2——需要安排几位师傅加工零件-CSDN博客 算法&#xff08;蓝桥杯&#xff09;贪心算法3——二维数组排序与贪心算…

Vue3 nginx 打包后遇到的问题

前端vite文件配置 export default defineConfig({plugins: [vue(),DefineOptions()],base:./,resolve:{alias:{:/src, //配置指向src目录components:/src/components,views:/src/views}},server:{// host:0.0.0.0,// port:7000,proxy:{/api:{target:xxx, // 目标服务器地址 &am…

linux下配置python环境及库配置

概述 使用Linux作为开发环境拥有完整的开源工具链且易于通过系统包管理器安装&#xff0c;与系统集成良好。对于开源项目开发&#xff0c;能方便地从源代码编译安装软件&#xff0c;使用构建工具&#xff0c;提供更原生的开发环境。 可高度定制系统&#xff0c;满足特殊开发需求…

【机器学习实战入门】使用OpenCV进行性别和年龄检测

Gender and Age Detection Python 项目 首先,向您介绍用于此高级 Python 项目的性别和年龄检测中的术语: 什么是计算机视觉? 计算机视觉是一门让计算机能够像人类一样观察和识别数字图像和视频的学科。它面临的挑战大多源于对生物视觉有限的了解。计算机视觉涉及获取、处…