前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >gggibbous带你绘制月亮散点图

gggibbous带你绘制月亮散点图

作者头像
R语言数据分析指南
发布2023-08-18 13:52:25
1570
发布2023-08-18 13:52:25
举报

欢迎关注R语言数据分析指南

❝本节来介绍一个案例使用「gggibbous」包绘制月亮散点图,下面小编就通过一个案例来进行展示数据为随意构建无实际意义仅作图形展示用,添加了详细的注释希望各位观众老爷能够喜 ❞

关注下方公众号下回更新不迷路

加载R包

代码语言:javascript
复制
library(data.table)
library(tidyverse)
library(ggforce)
library(ggtext)
library(ggnewscale)
library(paletteer)
library(packcircles)
library(gggibbous)

导入数据

代码语言:javascript
复制
detectors <- fread("detectors.csv")

数据清洗

代码语言:javascript
复制
detectors$native = ifelse(detectors$native == "Yes", TRUE, FALSE)
# 对数据进行聚合,按'detector'、'kind'、和'.pred_class'列组合,并计算每个组合的计数
df = detectors[, by = .(detector, kind, `.pred_class`, native), .N]
# 对数据再次聚合,按'detector'、'kind'、和'.pred_class'列组合,并计算每个组合的频率和总计数
df = df[, by = .(detector, kind, `.pred_class`), c("Freq", "N2") := list(N / sum(N), sum(N))]

df$kind = df$kind |> factor(levels = c("Human", "AI"))
df$.pred_class = df$.pred_class |> factor(levels = c("AI", "Human"))

max_value = max(df$N2) # 计算'df'数据框中'N2'列的最大值
# 根据'kind'和'.pred_class'列创建新的'class'列,用于描述组合类型
df$class = paste0(df$kind, " - ", df$.pred_class)
df = df |> split(df$class) # 根据'class'列将'df'数据框分割成多个子数据框
# 对每个子数据框进行操作
packing <-  lapply(df, function(x) {
  # 按'detector'列对子数据框进行排序
  x = x[order(detector)]
  # 从子数据框中提取'detector'和'N2'列,并保留唯一的行
  radius = x[, c("detector", "N2"), with = FALSE] |> unique()
  # 计算用于圆形布局的值,并将结果存储到'out'数据框中
  out = circleProgressiveLayout( (radius$N2 / max_value) / 20 )
  out = setDT(out)   # 将'out'数据框转换为数据表格式
  index = match(x$detector, radius$detector)   # 通过'detector'列匹配'x'数据框中的位置索引
  x$x0 = out[index]$x + x$kind |> as.numeric()   # 计算x数据框中每个元素的横坐标,并存储在'x0'列中
  x$y0 = out[index]$y + x$`.pred_class` |> as.numeric() # 计算x数据框中每个元素的纵坐标,并存储在'y0'列中
  x$r  = out[index]$radius   # 将x数据框中每个元素的半径信息存储在'r'列中
  return(x)
})
packing <- rbindlist(packing) # 数据合并

数据可视化

代码语言:javascript
复制
ggplot() +
  # 添加散点图图层,其中数据来自packing数据框中具有缺失'native'列的行
  geom_point(
    data = packing[which(is.na(native))],
    aes(x = x0, y = y0, size = r), fill = "#00A087",
    color = "white", shape = 21, stroke = .25) +  # 设置点的颜色、形状、填充等属性
  # 添加自定义的"moon"(月亮)图层,其中数据来自packing数据框中具有非缺失'native'列的行
  geom_moon(data = packing[which(!is.na(native))],
    aes(x0, y0, ratio = Freq, right = native, fill = native, size = r),
    color = "white", stroke = .25) +  # 设置"moon"图层的颜色、填充等属性
  scale_size_continuous(range = c(5, 15)) + # 设置点大小的连续缩放范围
  new_scale("size") +   # 创建一个新的点大小比例尺
  # 设置新点大小比例尺的连续缩放范围
  scale_size_continuous(range = c(.75, 3)) +
  # 添加垂直虚线,x轴交叉点为1.5
  geom_vline(xintercept = 1.5, linetype = "dashed", linewidth = .3) +
  # 添加水平虚线,y轴交叉点为1.5
  geom_hline(yintercept = 1.5, linetype = "dashed", linewidth = .3) +
  # 设置x轴的刻度位置、标签和文本样式
  scale_x_continuous(breaks = c(1, 2), labels = c("Human", "AI"), position = "top") +
  # 设置y轴的刻度位置、标签和文本样式
  scale_y_continuous(breaks = c(1, 2), labels = c("AI", "Human")) +
  # 设置填充颜色的手动映射,并使用特定的调色板
  scale_fill_manual(values = paletteer_d("ggsci::nrc_npg"),
    guide = guide_legend(title.position = "top",
      title.theme = element_text(face = "bold", size = 10),
      nrow = 2)) +  # 设置图例的标题位置和样式
  labs(x=NULL, y=NULL) +   # 设置x轴和y轴的标题为空
  theme_minimal() +
  theme(panel.grid = element_blank(),  # 隐藏网格线
    axis.text.x.top = element_text(size = 10, margin = margin(b = 5), color = "black"),  # 设置x轴顶部文本样式
    axis.text.y = element_text(size = 10, margin = margin(r = 5), color = "black"),  # 设置y轴文本样式
    plot.background = element_rect(fill = "#f5f5f5", color = NA),  # 设置图形背景颜色
    plot.margin = margin(10, 2, 2, 2)  # 设置图形的边距
  )
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言数据分析指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 欢迎关注R语言数据分析指南
  • 关注下方公众号下回更新不迷路
  • 加载R包
  • 导入数据
  • 数据清洗
  • 数据可视化
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档