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

借助 Chat GPT 绘制高亮柱状图

简介

最近科研中存在一个小需求:高亮柱状图中的某个柱子,从而展示所提方法的优越性(比如:比较RMSE,精确度等)。这该怎么做呢?

在询问 ChatGPT 和 Bing 搜索后,发现几种解决的办法:

  1. 直接使用 {ggplot2} 包中的 scale_fill_manual() 函数来手动指定柱状图中某根柱子的颜色。

  2. 使用 {ggcharts} 包中的 bar_chart()lollipop_chart() 中特定的 highlight 参数。

接下来,来展示下这两种方法吧。

注意: ChatGPT 相关推文可见:利用 ChatGPT 回答 R 相关问题 ;数据分析的未来- ChatGPT 和 R;ChatGPT为何逆天?——OpenAI生成式语言模型的前世今生。

ggplot2 包

基础版本

下面是 ChatGPT 给出的答案,我来人工实现下。下面给出代码和结果。总体而言还是很不错的。

library(ggplot2)
# 生成示例数据
df <- data.frame(category = c("A", "B", "C", "D"),
                 value = c(10, 20, 30, 40))
# 将第三个类别的颜色指定为红色
highlight_color <- c("grey", "grey", "red", "grey")

# 使用ggplot2创建柱状图
ggplot(df, aes(x = category, y = value, fill = category)) +
  geom_col() +
  scale_fill_manual(values = highlight_color)

进阶版本

但是根据小编需求,重新与它对话。

问题:假设有四种方法(A:D),分别计算了对应的RMSE和RB结果。请使用ggplot绘制柱状图并高亮RMSE和RB最低的柱子

但是这时给出的答案却有问题。小编只能在上面正确的代码进行修改。

模拟数据如下所示:

# 创建数据框
data <- data.frame(
  Method = c("A", "B", "C", "D"),
  RMSE = c(1.5, 2.3, 1.9, 2.1),
  RB = c(0.8, 1.2, 1.5, 0.7)
)
head(data)
#  Method RMSE  RB
# 1      A  1.5 0.8
# 2      B  2.3 1.2
# 3      C  1.9 1.5
# 4      D  2.1 0.7
# 使用ggplot2创建柱状图
h1 <- c("red", "grey", "grey", "grey")
p1 = ggplot(data, aes(x = Method, y = RMSE, fill = Method)) +
  geom_col() + 
  scale_fill_manual(values = h1)  

h2 <- c("grey", "grey", "grey","red")
p2 = ggplot(data, aes(x = Method, y = RB, fill = Method)) +
  geom_col() + 
  scale_fill_manual(values = h2)  

library(cowplot)
plot_grid(p1,p2)

注意:这是一个很初级的版本,由于组数不多就直接使用手工变化颜色。如果要做批量处理,读者在此基础还得进行修改。

ggcharts 包

以上方法需要自己手动修改 scale_fill_manual() 中的参数,比较麻烦。现在来分享另一种思路:使用 ggcharts 包中的 bar_chart()lollipop_chart() 中特定的 highlight 参数。

先给出官方的几个例子。

官方例子

数据来自 {ggcharts} 包中的 biomedicalrevenue 数据。

library(ggcharts)
library(dplyr)
data("biomedicalrevenue")
revenue2018 <- biomedicalrevenue %>%
  filter(year == 2018)
head(revenue2018)
#            company year revenue
#1 Johnson & Johnson 2018   81.60
#2             Roche 2018   56.86
#3            Pfizer 2018   53.60
#4          Novartis 2018   51.90
#5             Bayer 2018   45.06
#6   GlaxoSmithKline 2018   43.14

使用 bar_chart() 并设置 highlight = "Roche"

bar_chart(
  revenue2018,
  company,
  revenue,
  top_n = 10,
  highlight = "Roche"
)

颜色主题可以通过修改 ggcharts 主题修改,比如:ggcharts_get_theme()

ggcharts_set_theme("theme_ng")
bar_chart(
  revenue2018,
  company,
  revenue,
  top_n = 10,
  highlight = "Roche"
)

注意: 想变换到默认主题,可食用:ggcharts_set_theme("theme_ggcharts")

当然也可以将其和分面结合,只需在参数中设置:facet = xxx

biomedicalrevenue %>%
  filter(year %in% c(2012, 2014, 2016, 2018)) %>%
  bar_chart(
    company,
    revenue,
    facet = year,
    top_n = 12,
    highlight = "Bayer"
  )

所提例子

根据上述学习,我们将该包应用到所提的例子中。

# 数据转化
data_long <- tidyr::gather(data, Metric, Value, -Method)
head(data_long)
#  Method Metric Value
# 1      A   RMSE   1.5
# 2      B   RMSE   2.3
# 3      C   RMSE   1.9
# 4      D   RMSE   2.1
# 5      A     RB   0.8
# 6      B     RB   1.2
data_long %>%
  bar_chart(
    Method,
    Value,
    facet = as.factor(Metric),
    top_n = 12,
    highlight = "A",
    horizontal = T
  )

问题:存在一个问题,如何使用改函数将每个指标的粉最低的方法高亮出来?


http://www.kler.cn/a/835.html

相关文章:

  • Day7补代码随想录 454.四数相加II 383赎金信 15.三数之和 18.四数之和
  • 操作系统课程设计
  • linux中 mysql备份
  • debug diagnostic tool 调试.net的错误
  • 基于Spring Boot的工商局商家管理系统
  • Java重要面试名词整理(四):并发编程(下)
  • 货物摆放(蓝桥杯C/C++省赛)
  • 44岁了,我从没想过在CSDN创作2年,会有这么大收获
  • 推荐一款卸载软件的小工具-《UninstallToo》
  • 第53讲:视图的概念以及基本使用
  • 【Linux】进程信号
  • 双功能螯合剂306776-79-4,DOTA-GA(tBu)4,DOTAGA-四叔丁酯,进行总结说明
  • 【JavaEE】初识线程
  • 减治法实现插入排序,减治法实现二叉查找树(二叉搜索数,二叉排序数)的创建、插入与查找(含解析与代码实现)
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • python搭建web服务器
  • 十大经典排序算法(下)
  • 网格搜索多个监督学习模型上的超参数,包括神经网络、随机森林和树集合模型(Matlab代码实现)
  • 记录使用chatgpt的复杂经历
  • ArrayList源码分析
  • ChatGPT-4 终于来了(文末附免费体验地址)
  • Linux 常用命令总结
  • JavaEE--Thread 类的基本用法(不看你会后悔的嘿嘿)
  • new bing的chatGPT如何解析英文论文pdf
  • 【Linux学习】进程间通信——system V(共享内存 | 消息队列 | 信号量)
  • 【Linux】 Linux用户权限、文件权限、权限操作相关介绍