Circular lollipop | 哇咔咔!!!环形棒棒糖图好吃又好玩!~

1写在前面

今天不想废话了,直接看图吧。👇

alt

复现代码step by step,自己看吧。🤪

2用到的包

rm(list = ls())
library(tidyverse)
library(ggtext)
library(patchwork)

3示例数据

df_pw <- read.csv("./passwords.csv",row.names = 1)

DT::datatable(df_pw)
alt

4整理数据

4.1 统一时间单位

由于时间单位不统一,这里我们转化一下,把单位都统一起来,都转成seconds。🥳

df_pw_time <- 
df_pw %>%
mutate(
time = case_when(
time_unit == "seconds" ~ value,
time_unit == "minutes" ~ value * 60,
time_unit == "hours" ~ value * 60 * 60,
time_unit == "days" ~ value * 60 * 24,
time_unit == "weeks" ~ value * 60 * 24 * 7,
time_unit == "months" ~ value * 60 * 24 * 30,
time_unit == "years" ~ value * 60 * 24 * 365,
TRUE ~ NA_real_
)
)

4.2 增加画图空间

接下来,将固定值1000添加到所有时间,为圆圈内的标签留下所需的额外空间。

plus <- 1000
df_pw_plot <-
df_pw_time %>%
mutate(time = time + plus) %>%
add_row(rank = 501, time = 1)

4.3 提取难以破解的密码

创建一个data frame,包含为确实难以破解的密码放置标签所需的所有信息。🥰

后面会用到的。🤒

labels <-
df_pw_plot %>%
filter(value > 90) %>%
mutate(label = glue::glue("<b>{password}</b><br><span style='font-size:18pt'>Rank: {rank}</span>")) %>%
add_column(
x = c(33, 332, 401, 492),
y = c(75000000, 90000000, 45000000, 48498112)
)

5开始绘图

5.1 基础绘图

p <- ggplot(df_pw_plot, aes(rank, time, color = category)) +
# 垂直线
geom_segment(
aes(x = rank, xend = rank, y = 0, yend = time),
size = 1.2
) +
# 放置文本处
geom_rect(
aes(xmin = 1, xmax = 501, ymin = 0, ymax = plus),
fill = "grey97", color = "grey97"
) +

# 圈内线,分别为1天,1周,1月,1年。
geom_hline(aes(yintercept = (1 * 24 * 60 + plus)), color = "grey88") +
geom_hline(aes(yintercept = (7 * 24 * 60 + plus)), color = "grey85") +
geom_hline(aes(yintercept = (30 * 24 * 60 + plus)), color = "grey82") +
geom_hline(aes(yintercept = (365 * 24 * 60 + plus)), color = "grey79") +

# 为每条线终点添加棒棒糖头!~
geom_point(aes(size = time)) +

# log10 scale
scale_y_log10(expand = c(0, 0)) +

# Prism color
rcartocolor::scale_color_carto_d(palette = "Prism", guide = "none") +

# dots大小范围
scale_size(
range = c(1, 8),
limits = c(plus, max(df_pw_plot$time)),
guide = "none"
) +

# 坐标转成圆圈
coord_polar()

p
alt

5.2 添加文本注释

p <- p + 
# 用`geom_richtext()`添加之前准备好的label
geom_richtext(
data = labels,
aes(x = x, y = y, label = label, color = category),
lineheight = 0.8,
size = 8,
label.color = NA
) +
# 用`geom_text()`添加普通文本,放置在圈圈的中心
geom_text(
x = 500, y = 1.2,
label = "********\nCracking\nYour Favorite\nPassword",
size = 20,
lineheight = 0.87,
color = "grey60"
) +
geom_text(
x = 250, y = 0.25,
label = "********",
size = 20,
lineheight = 0.87,
color = "grey60"
) +
geom_text(
x = 250, y = 1.1,
label = "Time it takes to crack the 500 most\ncommon passwords by online guessing.\nSorted by rank and colored by category.",
size = 7,
lineheight = 0.87,
color = "grey73"
) +
geom_text(
x = 250, y = 1.95,
label = "Time is displayed on a logarithmic scale\nwith the rings representing one day,\none week, one month, and one year\n(from inner to outer ring).",
size = 6,
lineheight = 0.87,
color = "grey73"
)

p
alt

6分面视图

6.1 数据整理

首先,我们要为一些category添加换行符,适合内圈的大小。😏

facet_data <- 
df_pw_plot %>%
add_row(rank = 501, time = 1, category = unique(df_pw_plot$category)) %>%
# This is where we add line breaks
mutate(
cat_label = case_when(
category == "cool-macho" ~ "cool-\nmacho",
category == "nerdy-pop" ~ "nerdy-\npop",
category == "password-related" ~ "password-\nrelated",
category == "rebellious-rude" ~ "rebel-\nlious-\nrude",
category == "simple-alphanumeric" ~ "simple-\nalpha-\nnumeric",
TRUE ~ category
)
) %>%
filter(!is.na(category))

6.2 开始绘图

facet <- ggplot(facet_data, aes(rank, time, color = category)) +
geom_segment(
aes(x = rank, xend = rank, y = 0, yend = time),
size = 0.6
) +
geom_rect(
aes(xmin = 1, xmax = 501, ymin = 0, ymax = plus),
fill = "grey97", color = "grey97"
) +
geom_hline(aes(yintercept = (1 * 24 * 60 + plus)), color = "grey82", size = 0.2) +
geom_hline(aes(yintercept = (7 * 24 * 60 + plus)), color = "grey79", size = 0.2) +
geom_hline(aes(yintercept = (30 * 24 * 60 + plus)), color = "grey76", size = 0.2) +
geom_hline(aes(yintercept = (365 * 24 * 60 + plus)), color = "grey73", size = 0.2) +
geom_point(aes(size = time)) +

# 添加每个圈内的laebl
geom_text(
aes(label = cat_label, color = category),
x = 500, y = 0,
size = 8,
lineheight = 0.87
) +
# 分面并分为2行
facet_wrap(~ category, nrow = 2) +
coord_polar() +
scale_y_log10(expand = c(0, 0)) +
rcartocolor::scale_color_carto_d(palette = "Prism", guide = "none") +
scale_size(
range = c(0.5, 7),
limits = c(plus, max(df_pw_plot$time)),
guide = "none"
) +
theme(
strip.text = element_blank(),
)

facet
alt

7最终绘图

p <- p + 
theme_void() +
theme(
plot.margin = margin(-50, -180, -70, -180, "lines"),
)

facet <- facet +
theme_void() +
theme(
panel.spacing = unit(-8, "lines"),
plot.margin = margin(-40, 50, 10, 50)
) +
# caption的主题
theme(
plot.caption = element_text(
size = 20,
color = "grey60",
hjust = 0.5,
margin = margin(-50, 10, 30, 10)
)
) +
# 添加caption
labs(caption = "")


# 拼图
p_final <- (p + facet) +
plot_layout(
ncol = 1,
heights = c(1, 0.28)
)

p_final
alt

alt
最后祝大家早日不卷!~

点个在看吧各位~ ✐.ɴɪᴄᴇ ᴅᴀʏ 〰

📍 往期精彩

📍 🤩 LASSO | 不来看看怎么美化你的LASSO结果吗!?
📍 🤣 chatPDF | 别再自己读文献了!让chatGPT来帮你读吧!~
📍 🤩 WGCNA | 值得你深入学习的生信分析方法!~
📍 🤩 ComplexHeatmap | 颜狗写的高颜值热图代码!
📍 🤥 ComplexHeatmap | 你的热图注释还挤在一起看不清吗!?
📍 🤨 Google | 谷歌翻译崩了我们怎么办!?(附完美解决方案)
📍 🤩 scRNA-seq | 吐血整理的单细胞入门教程
📍 🤣 NetworkD3 | 让我们一起画个动态的桑基图吧~
📍 🤩 RColorBrewer | 再多的配色也能轻松搞定!~
📍 🧐 rms | 批量完成你的线性回归
📍 🤩 CMplot | 完美复刻Nature上的曼哈顿图
📍 🤠 Network | 高颜值动态网络可视化工具
📍 🤗 boxjitter | 完美复刻Nature上的高颜值统计图
📍 🤫 linkET | 完美解决ggcor安装失败方案(附教程)
📍 ......

本文由 mdnice 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新突破!天然产物首次实现全合成,轰动整个化学界

01 科研背景 生物医学是综合医学、生命科学和生物学的理论和方法而发展起来的前沿交叉学科,基本任务是运用生物学及工程技术手段研究和解决生命科学&#xff0c;特别是医学中的有关问题。机器学习技术能利用复杂的算法在大规模、异质性数据集中进行运行,在生物医学方面、人类…

基于人工智能与机器学习等多种方法的研究内容

导语 生物医学是综合医学、生命科学和生物学的理论和方法而发展起来的前沿交叉学科,基本任务是运用生物学及工程技术手段研究和解决生命科学&#xff0c;特别是医学中的有关问题。机器学习技术能利用复杂的算法在大规模、异质性数据集中进行运行,在生物医学方面、人类基因组项…

《简说基因》公众号编辑招募公告

【简说基因】免费交流群&#xff0c;资料领取/学习交流 生物信息学是什么&#xff1f;看一看 ChatGPT 的回答&#xff1a; 生物信息学是一个跨学科领域&#xff0c;结合了生物学和计算机科学的原理和技术&#xff0c;旨在研究和解释生物学数据。它利用计算机算法和统计方法来分…

挖呀挖!AutoDock 分子对接极简实践方法

挖呀挖&#xff01;AutoDock 分子对接极简实践方法&#x1f44b; 哈哈哈 开心&#x1f606; 在小小的花园里面挖呀挖呀挖 &#x1f331; 种下一颗小小的种子&#x1fad8; 开出一朵小小的花&#x1f338; 在大大的花园里面挖呀挖呀挖&#x1f331; 种下一颗大大的种子&#x1f…

【TOP生物信息】CNS图表复现,单细胞marker基因展示的另一种方式——蜂巢图

扫码关注下方公粽号&#xff0c;回复推文合集&#xff0c;获取400页单细胞学习资源&#xff01; 本文共计1359字&#xff0c;阅读大约需要4分钟。 Sten Linnarsson大神的单细胞绘图堪称极致美学&#xff0c;在这里&#xff0c;小编选择了发表在nature上展示marker基因的绘图进…

【Vue2从入门到精通】深入浅出,带你彻底搞懂Vue2组件通信的9种方式

文章目录 人工智能福利文章Vue组件间通信分类1.props / $emit1.1 父组件向子组件传值1.2 子组件向父组件传值 2.$parent / $children3.ref / $refs3.1 ref作用于组件3.2 ref作用于Html标签3.3 $nextTick() 4.EventBus &#xff08;$emit / $on&#xff09;4.1 初始化4.2 发送事…

三国鼎立:ChatGPT、百度文心一言、微软 New Bing

推荐国内可访问chatGPT: chatGTP --------------------------------------------------------------------------------------------------------------- ChatGTP&#xff1a;更像是三国中魏国&#xff0c;地大物博用户多。 百度文心一言&#xff1a;更像是三国中的蜀国&…

在Mac中设置Ctrl+C/V进行复制/粘贴

在win环境转到mac环境,感觉最大的就是这个⌘键了,看了很多帖子感觉都是片面的 进行系统偏好设置 > 键盘 > 快捷键 > App快捷键点击如图加号 这一步很重要,比如你要修改访达的复制粘贴,那就代打开访达 根据访达的编辑一栏自定义修改 菜单标题就是 全选 键盘快捷键自…

如何在Mac上复制和粘贴

如果您是具有Windows PC背景的新Mac用户&#xff0c;则可能想知道如何在macOS中使用典型的复制和粘贴命令。 在Windows中&#xff0c;“复制”和“粘贴”键组合分别为Control-C和Control-V。在Mac上&#xff0c;这非常相似–您要做的就是使用Command&#xff08;⌘&#xff09;…

mac截图复制到剪贴板_如何一次将多个内容复制到Mac的剪贴板中

mac截图复制到剪贴板 You know that thing where you copy something important, forget to paste it anywhere, then copy something else? It sucks, because the important thing you copied first is gone. 您知道要复制重要内容的东西&#xff0c;忘记将其粘贴到任何地方…

Mac复制改为拷贝

在默认情况下&#xff0c;mac电脑的复制为复制粘贴&#xff0c;即会生成一个副本文件&#xff0c;并没有达到Win下复制功效。 不知你是否遇到过&#xff0c;下面贴图介绍如何调整为真正的复制功能。 1.打开 系统偏好设置 2.选择 键盘 3.快捷键-App快捷键 然后删除 复制 快捷键…

Mac mini 使用普通键盘设置 Windows 的粘贴、复制、剪切习惯

问题描述 通常我们会习惯性用左手小拇指按最左下角的 ctrl 键作为功能前缀键&#xff0c;进行复制、粘贴、剪切等操作&#xff0c;但将普通键盘接到 macOS 设备上&#xff0c;会将 windows 徽标键视为 command 键&#xff0c;此时习惯了 Windows 系统的朋友进行复制、粘贴、剪…

mac item2 复制会话session

按照如下图红框内设置 Command中输入ssh 常登陆的ip&#xff08;如果不配置这一步则复制session时还要自己输入ssh命令&#xff0c;只是不需要输入密码而已&#xff09; 在自己的mac终端, vim ~/.ssh/config 添加 host *ControlMaster autoControlPath ~/.ssh/master-%r%h:…

WindowsMac剪贴板如何存储多条复制记录

Windows版 1.第一步点击电脑左下方“开始菜单”按钮。 2..点击 “设置”按钮。 3.打开设置之后点击"系统"。 4.然后下拉找到“剪贴板”。 5.选中剪贴板&#xff0c;然后在右侧即可开启剪贴板历史记录功能。 按“WindowsV”组合键键即可打开剪贴板。复制或者剪切过的…

五个最好的复制/粘贴的Mac App应用

如果你刚用Mac&#xff0c;之前是用Windows电脑的&#xff0c;第一个问题就会发现&#xff0c;Mac上的复制/粘贴找不到了。如果你也有同样的问题&#xff0c;或者你在找Mac上有没有好用的剪贴板管理工具&#xff0c;可以在下面的文章中找到答案。 Mac上怎样优雅的复制/粘贴 c…

Mac简单易用的复制软件——“TouchCopy”

TouchCopy是Mac平台上一款简单易用的复制软件&#xff0c;可以轻松的将你的照片、视频、通讯录、文档、日历复制到pc端或者是磁盘里。有需要的朋友欢迎前来macdown下载体验&#xff01; 功能 1、将音乐从iPhone / iPod / iPad传输到iTunes将音乐从iPod或iOS设备复制到PC或Mac硬…

苹果Mac电脑的复制粘贴不能用了

复制 (⌘ C) 和粘贴 (⌘ V) 是使用Mac电脑过程中遇到频率非常高的快捷组合键&#xff0c;突然你发现它们不能使用了&#xff0c;会非常崩溃。macw小编今天为大家带来详细解决办法&#xff0c;让您的复制粘贴重新启用起来&#xff01; 为什么 Mac 剪贴板不起作用 我们在 Mac…

Mac下iterm2 克隆会话功能

因为每次需要先登录跳转机&#xff0c;再登录开发机&#xff0c;输入两次密码&#xff0c;过于繁琐&#xff0c;所以上网找了iterm下克隆会话功能。 网上说command下的command也要配置&#xff0c;亲测不用&#xff0c;只选中下面的reuse previous sessions’s directory就行。…

花启宝是什么软件,来聊一聊“花启宝”的详情

很多人在问我&#xff0c;你在做的软件是什么&#xff1f;我本人也就是通过它慢慢学习成长起来的。还是一个网友推荐的&#xff0c;现在他对我来说算是大佬了&#xff0c;已经单飞了&#xff0c;好久都没有联系了&#xff0c;呵呵&#xff0c;真是人往高处走&#xff0c;水往低…

chatgpt赋能python:Python抢商品:自动化实现秒杀购物的利器

Python抢商品&#xff1a;自动化实现秒杀购物的利器 随着互联网和电商的高度融合&#xff0c;电商平台受到越来越多的用户关注和青睐。在线购物已成为人们日常生活中必不可少的一部分&#xff0c;不管是网购小白还是技术大牛&#xff0c;都喜欢在各种平台上刷到想要的商品。但…