老板让你复现一个图片,你会使用什么软件?

简介: 老板觉得课件的图形太过模糊和单调,于是想让我用可视化软件复现一下,做的更加高清、精美些。

简介


老板觉得课件的图形太过模糊和单调,于是想让我用可视化软件复现一下,做的更加高清、精美些。


当我本科的时候,对于这种问题,我第一时间想起来的就是使用 PPT 绘制啦~。但是自从学习了 R 语言、ggplot 语法之后,我果断使用 ggplot2 包来实现。大概花了 30min 左右复现这个图形。对比结果如下:

36KQFVUC)R(VG)}W]943ESS.png

主要由两部分构成:1. 绘制密度函数曲线并填充分位数面积;2. 添加各种线段和文字。


数据产生

set.seed(1) #确保不同机子产生的随机数相同
mu = c(2,5)
std = c(1,1)
num = 1000
r1 = rnorm(num,mu[1],std[1]) #正态分布
r2 = rnorm(num,mu[2],std[2]) #正态分布
data = data.frame('value' = c(r1,rep(NA,num),r2,rep(NA,5*num)),
                  'class' = factor(rep(c(1:8),each= num)))
knitr::kable(head(data))

CEXLK0I2YEU}CI3H}SE9X~R.png


定义主题

文中定义了一个自定义主题函数theme_manual(),主要想把背景,各种刻度都去掉。大家以后有这个需求可以直接拿去用,当然最好不要白嫖,打个赏也行嘿嘿。

theme_manual = function(){ 
    theme(panel.grid = element_blank(),
          panel.border = element_blank(),
          axis.text = element_blank(),
          axis.ticks = element_blank(),
          legend.position="none") 
}


画图

ggplot(data, aes(x = value, y = class,fill = factor(stat(quantile)))) + 
  # 添加密度函数图
  stat_density_ridges(
    geom = "density_ridges_gradient",
    calc_ecdf = TRUE,rel_min_height = 0.02,
    quantiles = c(0.025, 0.975),
    alpha = 1,scale = 0.6,bandwidth = 1
  ) +
  scale_fill_manual(
    name = "Probability", values = c("#FF0000A0", "white", "#FF0000A0"),
    labels = c("(0, 0.025]", "(0.025, 0.975]", "(0.975, 1]")
  ) + 
  # 手动一条条添加各种线段,文字
  annotate("segment", x = mu[1], xend = mu[1], y = 1, yend = 7,colour = "black") +
  annotate("segment", x = mu[2]-1, xend = mu[2]-1, y = 1, yend = 7,colour = "#0000FFA0",lty = "dashed") +
  annotate("segment", x = mu[1]-2.15, xend = mu[1]-2, y = 1, yend = 7,colour = "#0000FFA0",lty = "dashed") +
  annotate("segment", x = mu[2], xend = mu[2], y = 3-0.02, yend = 4.18,colour = "black") +
  annotate("segment", x = 0, xend = 10, y = 3, yend = 3,colour = "black") +
  annotate("segment", x = -3, xend = 7, y = 1, yend = 1,colour = "black") +
  annotate("text", x = mu[1], y = 0.7, label = expression(mu[T])) +
  annotate("text", x = mu[1]-2.15, y = 0.7, label = expression(alpha[1])) + 
  annotate("text", x = mu[1]+2, y = 0.7, label = expression(alpha[2])) +
  annotate("text", x = mu[2], y = 2.8, label = expression(mu[T])) +
  annotate("text", x = 0.5, y = 3.9, label = expression(beta)) + 
  annotate(geom = "line",x = c(0.8, 3.1),
             y = c(3.8, 3.2),
             arrow = arrow(angle = 20, length = unit(4, "mm"))) + # 添加线段并且包含箭头
  annotate("text", x = mu[1], y = 7.3, label = "CL") +
  annotate("text", x = mu[2]-1, y = 7.4, label = "LCL") +
  annotate("text", x = mu[1]-2, y = 7.4, label = "UCL") +
  annotate("text", x = -1.3, y = 2.3, label = expression(alpha[1] + alpha[2] == alpha)) +
  coord_flip() + # 转换横纵坐标
  theme_bw() + # 主题设置
  theme_manual() + xlab('') + ylab('')

JBNAAA~R%QP`])S_)G8LPJ1.png

可以看到,现在得到的图形和原图还是有点出处的。


调整图形细节

笔者能力有限,不能复现的一模一样,于是我使用了 AI 大法,对该图形进行了细节修改(保存该图为 pdf 版本,使用 AI 打开,进行调节)。最后得到:

IFY_4C2`)YANHY{8@AT6S91.png

如何使用 AI 可以看这篇文章:画图细节不会改?那就用 AI 吧!AI不会,没关系,R可以导出PPT格式的图形啦


目录
相关文章
|
JavaScript 关系型数据库 MySQL
在线文档频繁故障不稳定,其实可以自己搭一个Etherpad在线文档
在线文档频繁故障不稳定,其实可以自己搭一个Etherpad在线文档
|
4月前
|
敏捷开发 数据可视化 BI
远程团队看板工具全指南:2025年最强推荐与实践策略
《远程团队看板工具:提升协作效率的利器》摘要 远程看板工具正成为现代团队协作的核心,通过可视化任务流、实时同步和进度追踪,有效解决远程办公中的信息不对称问题。本文系统介绍了看板工具的基本概念、核心功能(包括任务可视化、多人协作、时间管理等),并对比了Trello、Jira、Asana等主流产品的特点。针对选型策略,建议从团队规模、易用性、集成能力三个维度考量。文章还分享了任务拆解、每日站会等实用技巧,并解答了数据安全等常见问题。最后强调,合适的看板工具能显著提升远程团队的工作效率和凝聚力。
144 5
|
计算机视觉
YOLOv8改进 | 2023Neck篇 | 利用Gold-YOLO改进YOLOv8对小目标检测
YOLOv8改进 | 2023Neck篇 | 利用Gold-YOLO改进YOLOv8对小目标检测
630 1
|
人工智能 自然语言处理 Swift
"轻量级微调推理框架SWIFT:大模型时代的速度革命,让你秒变AI部署高手!"
【8月更文挑战第17天】随着AI技术的发展,大模型如GPT-3和BERT引领风潮,但其部署与推理速度面临挑战。为此,魔搭社区推出了SWIFT(Simple Weight-Integrated Fine-Tuning)框架,它采用轻量级微调技术,实现模型参数压缩与加速,确保大模型能在移动端和边缘设备上高效运行。SWIFT具备四大特点:创新微调方法减少训练参数;内置优化策略提高推理速度;跨平台支持便于部署;兼容主流预训练模型。通过示例可见,从加载预训练模型到模型的微调、评估及导出,SWIFT简化了工作流程,降低了大模型的应用门槛,促进了AI技术的实际应用。
1268 4
|
Java 消息中间件 Spring
浅析RabbitMQ死信队列
浅析RabbitMQ死信队列
322 0
|
前端开发 Oracle Java
你听说只读 ORM 了吗,Bean Searcher v4.3.0 来啦!
所谓只读 ORM,就是只做 **查询** 的 ORM。那为什么不做 **增删改** 呢?因为 Java 技术这几十年发展下来做增删改的 ORM 已经层出不穷并且非常优秀了,但是它们在列表检索、分页统计等 **高级查询** 场景却又力不从心。所以,Bean Searcher 的出世,就是为了补充传统 ORM 在列表检索查询方面的不足。它允许无论要求多复杂的检索接口可以使用简单的一行代码搞定!
138 0
你听说只读 ORM 了吗,Bean Searcher v4.3.0 来啦!
|
消息中间件 Java Kafka
Windows 10 也能安装Kafka?这篇教程让你轻松掌握!
Windows 10 也能安装Kafka?这篇教程让你轻松掌握!
1241 1
Windows 10 也能安装Kafka?这篇教程让你轻松掌握!
|
前端开发 Java 关系型数据库
基于SSM实现台球厅计时收费系统
基于SSM实现台球厅计时收费系统
131 1
|
JavaScript 前端开发 Linux
Vue.js + Electron 的跨平台桌面应用程序开发
本文介绍了 Vue.js 和 Electron 的基本特点和原理,并分析了它们在桌面应用程序开发中的优势和应用场景。在基于 Vue.js 和 Electron 的桌面应用程序开发实践中,本文详细介绍了项目的搭建和配置,包括环境的准备、项目的初始化和依赖的安装等步骤。然后,本文介绍了使用 Vue.js 进行界面设计和组件开发的方法,并提供了相关的示例代码和实现细节。接下来,本文探讨了 Electron 主进程和渲染进程的开发,包括窗口管理、文件系统访问和与底层系统交互等方面的内容。最后,本文对基于 Vue.js 和 Electron 的桌面应用程序开发做出了总结,并展望了未来的发展方向和应用前景
1157 2
|
移动开发 JavaScript 前端开发
面试题:渲染十万条数据解决方案
虚拟列表是最主流的解决方案,不渲染所有的数据,只渲染可视区域中的数据。
425 0
面试题:渲染十万条数据解决方案