当前位置: 首页 > news >正文

R语言实践——ggplot2+ggrepel绘制散点+优化注释文本位置

简介

书接adjustText实践——调整matplotlib散点图标签,避免重复

上文中,matplotlib+adjustText对于我的实例来说并没有起到很好的效果。所以,博主决定在R中利用gglot2+ggrepel绘制,期待效果。

操作过程

博主不常使用R,在此过程中详细记录每一步骤,以作备忘。

1. R读取数据(openxlsx)

library(openxlsx)fossils = read.xlsx("D://Work_Space/mahonia/1-化石记录/2023-3-17-Mahonia_fossils_leaf.xlsx")

2. 绘制散点图(ggplot2)

2.1 快速绘制散点图(plot)

library(ggplot2)plot(fossils$Lon, fossils$Lat)

在这里插入图片描述

2.2 geom_point()

library(gcookbook)
library(dplyr)ggplot(data = fossils %>% select(Lon, Lat), aes(x=Lon, y=Lat)) + geom_point()

在这里插入图片描述

2.3 分组展示(分型和年龄)

library(openxlsx)fossils <- read.xlsx("D://Work_Space/mahonia/1-化石记录/2023-3-17-Mahonia_fossils_leaf.xlsx")simple_fossils <- fossils %>% select(Genus, Name, Epoch, Lon, Lat, Group)
library(ggplot2)# plot(fossils$Lon, fossils$Lat)library(gcookbook)
library(dplyr)ggplot(data = simple_fossils %>% select(Lon, Lat, Group, Epoch), aes(x=Lon, y=Lat, shape=Group, color=Epoch)) + geom_point()

在这里插入图片描述

2.4 添加文本注释(geom_text())

ggplot(data = simple_fossils %>% select(Lon, Lat, Group, Epoch, Name), aes(x=Lon, y=Lat, shape=Group, color=Epoch)) + geom_point() + geom_text(aes(label = Name), size = 2)

在这里插入图片描述

3. 优化文本注释位置(ggrepel)

library(ggrepel)ggplot(data = simple_fossils %>% select(Lon, Lat, Group, Epoch, Name), aes(x=Lon, y=Lat, shape=Group, color=Epoch)) + geom_point() + geom_text_repel(aes(label = Name), size = 3)

在这里插入图片描述
可以看到有许多标签没有显示出来。

尝试减小字体

ggplot(data = simple_fossils %>% select(Lon, Lat, Group, Epoch, Name), aes(x=Lon, y=Lat, shape=Group, color=Epoch)) + geom_point() + geom_label_repel(aes(label = Name), size = 1)

在这里插入图片描述
根据警示信息,增加max.overlaps

ggplot(data = simple_fossils %>% select(Lon, Lat, Group, Epoch, Name), aes(x=Lon, y=Lat, shape=Group, color=Epoch)) + geom_point() + geom_label_repel(aes(label = Name), size = 2, max.overlaps = 30)

在这里插入图片描述

效果也不行,还是挤在一起。

4. 绘制世界地图

4.1 地图

world <- map_data("world")world_map <- ggplot() + geom_map(data = world, map=world, aes(x=long, y=lat, map_id=region),color = "black", fill = "lightgray", size = 0.1)+scale_x_continuous(breaks = seq(-180, 210, 45), labels = function(x){paste0(x, "°")}) +scale_y_continuous(breaks = seq(-60, 100, 30), labels = function(x){paste0(x, "°")})world_map

在这里插入图片描述

4.2 散点地图

world_map + geom_point(data = simple_fossils %>% select(Lon, Lat, Group, Epoch, Name), aes(x=Lon, y=Lat, shape=Group, color=Epoch))

在这里插入图片描述

4.2 合理调整文本

world_map + geom_point(data = simple_fossils %>% select(Lon, Lat, Group, Epoch, Name), aes(x=Lon, y=Lat, shape=Group, color=Epoch)) + geom_label_repel(data=simple_fossils %>% select(Lon, Lat, Group, Epoch, Name), aes(x=Lon, y=Lat, label=Name, color=Epoch,fontface="italic"), size=2, max.overlaps = 100, box.padding = 0.4, label.padding = 0.1)

在这里插入图片描述

后记

经过一番努力,达到的效果比python绘图要好一些。但是在保存图片时却不如python。后面再努努力吧。

相关文章:

R语言实践——ggplot2+ggrepel绘制散点+优化注释文本位置

简介 书接adjustText实践——调整matplotlib散点图标签&#xff0c;避免重复 上文中&#xff0c;matplotlibadjustText对于我的实例来说并没有起到很好的效果。所以&#xff0c;博主决定在R中利用gglot2ggrepel绘制&#xff0c;期待效果。 操作过程 博主不常使用R&#xff…...

[TIFS 2022] FLCert:可证明安全的联邦学习免受中毒攻击

FLCert: Provably Secure Federated Learning Against Poisoning Attacks | IEEE Journals & Magazine | IEEE Xplore 摘要 由于其分布式性质&#xff0c;联邦学习容易受到中毒攻击&#xff0c;其中恶意客户端通过操纵其本地训练数据和/或发送到云服务器的本地模型更新来毒…...

css3关键帧动画

CSS3关键帧动画是一种在网页设计中常用的技术&#xff0c;通过使用CSS3的关键帧动画功能&#xff0c;可以实现网页上各种形式的动画效果&#xff0c;例如淡入淡出、滑动、旋转、缩放等&#xff0c;这些动画效果可以让网页更加生动有趣&#xff0c;吸引用户的注意力&#xff0c;…...

在 macOS Mojave 之后的每一个版本中都隐藏着比特币白皮书(Bitcoin Whitepaper)

今天我在尝试解决打印机故障问题时&#xff0c;发现了自2018年Mojave版本以来&#xff0c;macOS都附带了一份Satoshi Nakamoto&#xff08;即中本聪&#xff09;的比特币白皮书PDF副本[1]。 我已经询问了十几位使用Mac的朋友&#xff0c;他们都确认macOS里面有这个文件。这个文…...

一文看懂SpringBoot操纵数据库

1.前言 很多同学进入公司就开始参与项目开发&#xff0c;大多数情况是对某个项目进行维护或者需求迭代&#xff0c;能够从0到1参与到项目中的机会很少&#xff0c;因此并没有多少机会了解某些技术的运行机制。换句话说&#xff0c;有的面试官在面试的时候就会探讨深层的技术问题…...

科普:java与C++的区别

Java与C是两种广泛使用的编程语言&#xff0c;它们在某些方面存在不同之处。本文将详细介绍Java与C的区别。 一、C与Java的历史 C语言是由Bjarne Stroustrup在20世纪80年代初期开发的一种面向对象编程语言&#xff0c;它是C语言的扩展。Java语言是由Sun Microsystems公司于20…...

突发!ChatGPT疯了!

‍数据智能产业创新服务媒体——聚焦数智 改变商业今天&#xff0c;笔者正常登录ChatGPT&#xff0c;试图调戏一下他。但是&#xff0c;突然震惊的发现&#xff0c;ChatGPT居然疯了。之所以说他是疯了&#xff0c;而不是崩溃了&#xff0c;是因为他还能回复我&#xff0c;但回…...

docker-compose容器编排使用详解+示例

文章目录一、docker-compose概述1、产生的背景2、核心概念3、使用的三个步骤4、常用命令二、下载安装1、官方文档2、下载3、卸载三、使用compose1、前置知识&#xff0c;将一个springboot项目打包为镜像2、编写docker-compose.yml文件3、启动docker-compose4、停止一、docker-c…...

可用的rtsp ,rtmp地址以及使用VLC和ffmpeg 播放视频流

可用的 rtmp地址: rtmp://ns8.indexforce.com/home/mystream 可用的 rtsp地址: rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4 可搭配VLC播放器使用&#xff0c;以及虚幻4 流媒体使用&#xff0c;实现直播效果 1.使用VLC 播放&#xff1a;https://www.vi…...

Python机器学习:朴素贝叶斯

前两天不知道把书放哪去了&#xff0c;就停更了一下&#xff0c;昨天晚上发现被我放在书包夹层里面了&#xff0c;所以今天继续开始学习。 首先明确一下啊&#xff0c;朴素贝叶斯是什么&#xff1a;朴素贝叶斯分类器是一种有监督的统计学过滤器&#xff0c;在垃圾邮件过滤、信…...

几个最基本软件的环境变量配置

在Windows中配置环境变量位置&#xff1a; 控制面板->系统和安全->系统。可以点击&#xff1a;“此电脑”->“属性”直接进入。 点击“高级系统设置”->【环境变量】。在这里可以看见用户变量和系统变量&#xff0c;如果你这台机器不是你一个人使用设置为用户变量…...

物业企业如何加快向现代服务业转型

近年来&#xff0c;随着人民生活水平的提高&#xff0c;人们对住宅质量提出更高的要求&#xff0c;在此前提下&#xff0c;全国各地涌现出了一些运用现代的计算机、控制与通信技术建设的智能化住宅小区。但是许多智能化住宅小区都存在建好了智能硬件环境却没有智能化的软件在上…...

java ssm人力资源系统Y3程序

1&#xff0e;系统登录&#xff1a;系统登录是员工访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括员工名、密码和验证码&#xff0c;然后对登录进来的员工判断身份信息&#xff0c;判断是管理员还是普通员工。 2&#xff0e;系统员工管理&#xff1a;不管是超级…...

leetcode重点题目分类别记录(三)动态规划深入与素数理论

文章目录动态规划背包问题01背包抽象出求解目标尝试进程子问题拆分基本情况根据拆分过程定义dp数组与转移方程遍历顺序与状态压缩模板归纳题目应用变种提升组合问题多维01背包有特殊限制的01背包完全背包打家劫舍股票系列子序列类数位dp动态规划 背包问题 01背包 有C0-Cx件物…...

面试篇-学习Java多线程编程必备:深入理解volatile与synchronized

1. 概述 1.1 Volatile概述 Volatile是Java中的一种轻量级同步机制&#xff0c;用于保证变量的可见性和禁止指令重排。当一个变量被声明为Volatile类型时&#xff0c;任何修改该变量的操作都会立即被所有线程看到。也就是说&#xff0c;Volatile修饰的变量在每次修改时都会强制…...

后端系列文章

后端系列文章目录 缘由&#xff1a;无聊了&#xff0c;写点博客玩玩 注&#xff1a;该系列文章纯属个人见解&#xff0c;漏洞百出&#xff0c;大家看个乐就行了&#xff0c;别当真&#xff01; 私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版&#xff0c;配图更多&…...

C++之AVL树

文章目录前言一、概念二、AVL树结点的定义三、AVL树的插入四、AVL树的旋转1.右单旋的情况以及具体操作抽象图h 0h 1h 2代码实现2.左单旋的情况以及具体操作抽象图代码实现3.右左双旋的情况以及具体操作抽象图h 0h 1h 23.左右双旋的情况以及具体操作抽象图5.总结6.完整实现…...

【ROS2指南-2】入门 turtlesim 和 rqt

目标&#xff1a;安装并使用 turtlesim 包和 rqt 工具为即将到来的教程做准备。 教程级别&#xff1a;初学者 时间&#xff1a; 15分钟 内容 背景 先决条件 任务 1 安装turtlesim 2 启动turtlesim 3 使用turtlesim 4 安装rqt 5 使用 rqt 6 重新映射 7 关闭turtlesim …...

Python 进阶指南(编程轻松进阶):四、起个好名字

原文&#xff1a;http://inventwithpython.com/beyond/chapter4.html 计算机科学中最困难的两个问题是命名事物、缓存失效引起错误."这个经典的笑话&#xff0c;出自利昂班布里克之手&#xff0c;并基于菲尔卡尔顿的一句话&#xff0c;包含了一个真理的核心&#xff1a;很…...

STL容器适配器之<priority_queue>

文章目录测试环境priority_queue介绍头文件模块类定义对象构造元素访问元素插入和删除容器大小迭代器其他函数测试环境 系统&#xff1a;ubuntu 22.04.2 LTS 64位 gcc版本&#xff1a;11.3.0 编辑器&#xff1a;vsCode 1.76.2 priority_queue介绍 容器适配器。支持在末端插入…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...