实测,大模型谁更懂数据可视化?

大家好,我是 Ai 学习的老章

看论文时,经常看到漂亮的图表,很多不知道是用什么工具绘制的,或者很想复刻类似图表。

实测,大模型 LaTeX 公式识别,出乎预料

前文,我用 Kimi、Qwen-3-235B-A22B、Claude-3.7-sonnet、GPT-4.1、Gemini 2.5 Pro 测试了其在 LaTeX 公式识别中的表现。

本文就测试一下他们在图表识别、复刻中的表现,看看谁更擅长干这件事

备注:Kimi 开启了长思考,Qwen3 未开启深度思考,因为开启之后巨慢且失败

省流:Gemini 2.5 Pro 是最强大的代码模型,毫无争议

排名:Gemini 2.5 Pro > Claude 3.7 Sonnet > Kimi = Qwen3 > GPT-4.1

第一题

来源:https://www.biorxiv.org/content/10.1101/2024.04.02.587723v1.full.pdf

Kimi

有点弱智,绘制了傻瓜箱线图,图像理解有问题

Qwen-3-235B-A22B

也很傻瓜,与 kimi 半斤八两

Claude-3.7-sonnet

好一点点,绘制了半小提琴图 (half-violin plot) 结合箱线图 (box plot)

后续我又试了一下

如果明确告诉它用 R 绘制,Claude-3.7 结果如下,还不错!

GPT-4.1

失败,生成的代码满满得 bug,无法生成图表

Gemini 2.5 Pro

震惊了

它识别出这是雨云图 (raincloudplot),结合了以下 3 图表的元素:

散点图 (Scatter/Strip plot):显示每 1.个单独的数据点 (图中的绿色和蓝色小点)

箱形图 (Box plot):显示数据的分布摘要 (中位数、四分位数、均值和标准差范围)

小提琴图 (Violin plot) 或 核密度估计图 (KDE plot):显示数据分布的平滑曲线 (图中数据点左侧的曲线)

代码放文末了,大家欣赏一下

第二题

上难度,一次性复刻、输出 4 张图表

来源:《Benchmarking Supervised Machine Learning Models for the Classification of Primary Graft Dysfunction》

Kimi

看了下,其样例数据很简单,第四幅图没有完美复刻

Qwen-3-235B-A22B

没理解意思,且只生成了一张,出现 bug

没想到它居然还不如 kimi。。。

Claude-3.7-sonnet

第四幅图没有绘制成功,报错是颜色问题

让其修复颜色问题后,输出如下,第四幅图没有依然没有完美复刻

GPT-4.1

绘制失败,换了 GPT-4o 依然失败

Gemini 2.5 Pro

第四张绘制失败

第三题

换个简单点的

省点事儿,直接让大模型用 R 复刻

用 R _复刻_了一张图,附代码

Obsidian 2025-05-14 09.49.07.png

Kimi

复刻失败

Qwen-3-235B-A22B

还行,有点丑

Claude-3.7-sonnet

“径向条形图”或“放射状条形图”(Radial Bar Chart)

GPT-4.1

复刻失败

Gemini 2.5 Pro

接近完美复刻

Gemini-2.5-Pro 绘制的云雨图代码

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np# 1. 生成模拟数据
# 根据图片估算 R 和 rho 的数据特征
np.random.seed(0) # 为了结果可复现# R 的数据
r_mean = 0.78
r_std = 0.02 # 根据 1 SD 范围 (0.76-0.80) 估算
r_data = np.random.normal(loc=r_mean, scale=r_std, size=100)
# 限制数据在图中大致范围内
r_data = np.clip(r_data, 0.72, 0.82)# rho 的数据
rho_mean = 0.77
rho_std = 0.02 # 根据 1 SD 范围 (0.75-0.79) 估算
rho_data = np.random.normal(loc=rho_mean, scale=rho_std, size=100)
# 限制数据在图中大致范围内
rho_data = np.clip(rho_data, 0.70, 0.81)# 将数据整合到 Pandas DataFrame 中,方便 seaborn 处理
df_r = pd.DataFrame({'value': r_data, 'category': 'R'})
df_rho = pd.DataFrame({'value': rho_data, 'category': 'ρ'})
df_combined = pd.concat([df_r, df_rho])# 2. 绘制图表
fig, ax = plt.subplots(figsize=(8, 6))# 使用 seaborn 绘制
# 为了实现雨云图的效果,我们会组合 stripplot, boxplot, 和 violinplot (只显示一半)# 定义颜色
colors = {"R": "green", "ρ": "blue"}# 绘制 R
# 散点 (左移一点,给箱线图和 KDE 留空间)
sns.stripplot(x='category', y='value', data=df_r, order=['R'],color=colors['R'], alpha=0.7, jitter=0.2, size=5, ax=ax, dodge=True, label='_nolegend_')# 箱线图 (居中)
sns.boxplot(x='category', y='value', data=df_r, order=['R'],color=colors['R'], width=0.3, showfliers=False, ax=ax,boxprops=dict(alpha=0.5), medianprops=dict(color='black'))# 小提琴图/KDE (右移一点,只画一半)
# Seaborn 的 violinplot 可以通过 cut=0 和 inner=None 以及调整位置来实现类似效果
# 或者更精确地使用 KDE 图并手动定位
from scipy import stats
kde_r = stats.gaussian_kde(df_r['value'])
x_vals_r = np.linspace(df_r['value'].min(), df_r['value'].max(), 100)
y_vals_r = kde_r(x_vals_r)
# 将 KDE 曲线画在散点图的左边
# 需要计算合适的横坐标位置,这里简化处理,通常雨云图库会处理这个对齐
ax.plot(0 - 0.35 - y_vals_r / (y_vals_r.max()*3) , x_vals_r, color=colors['R'], lw=2) # 调整分母控制宽度# 绘制 ρ
# 散点
sns.stripplot(x='category', y='value', data=df_rho, order=['ρ'],color=colors['ρ'], alpha=0.7, jitter=0.2, size=5, ax=ax, dodge=True, label='_nolegend_')# 箱线图
sns.boxplot(x='category', y='value', data=df_rho, order=['ρ'],color=colors['ρ'], width=0.3, showfliers=False, ax=ax,boxprops=dict(alpha=0.5), medianprops=dict(color='black'))# 小提琴图/KDE for rho
kde_rho = stats.gaussian_kde(df_rho['value'])
x_vals_rho = np.linspace(df_rho['value'].min(), df_rho['value'].max(), 100)
y_vals_rho = kde_rho(x_vals_rho)
ax.plot(1 - 0.35 - y_vals_rho / (y_vals_rho.max()*3) , x_vals_rho, color=colors['ρ'], lw=2)# 3. 添加图例和标签 (类似原图)
# R 的均值和标准差标注
mean_r_val = df_r['value'].mean()
std_r_val = df_r['value'].std()
ax.plot([0 + 0.15, 0.25 + 0.15], [mean_r_val + std_r_val, mean_r_val + std_r_val], color='black', lw=1)
ax.text(0.28 + 0.15, mean_r_val + std_r_val, f'{mean_r_val + std_r_val:.2f}(1 SD)', va='center')
ax.plot([0 + 0.15, 0.25 + 0.15], [mean_r_val, mean_r_val], color='black', lw=1, linestyle='--') # 均值线 (用星号表示)
ax.plot(0, mean_r_val, marker='*', markersize=10, color='black', markeredgecolor='white') # 原图是星号
ax.text(0.28 + 0.15, mean_r_val, f'{mean_r_val:.2f}(MEAN)', va='center')
ax.plot([0 + 0.15, 0.25 + 0.15], [mean_r_val - std_r_val, mean_r_val - std_r_val], color='black', lw=1)
ax.text(0.28 + 0.15, mean_r_val - std_r_val, f'{mean_r_val - std_r_val:.2f}(-1 SD)', va='center')# ρ 的均值和标准差标注
mean_rho_val = df_rho['value'].mean()
std_rho_val = df_rho['value'].std()
ax.plot([1 + 0.15, 1.25 + 0.15], [mean_rho_val + std_rho_val, mean_rho_val + std_rho_val], color='black', lw=1)
ax.text(1.28 + 0.15, mean_rho_val + std_rho_val, f'{mean_rho_val + std_rho_val:.2f}(1 SD)', va='center')
ax.plot([1 + 0.15, 1.25 + 0.15], [mean_rho_val, mean_rho_val], color='black', lw=1, linestyle='--')
ax.plot(1, mean_rho_val, marker='*', markersize=10, color='black', markeredgecolor='white')
ax.text(1.28 + 0.15, mean_rho_val, f'{mean_rho_val:.2f}(MEAN)', va='center')
ax.plot([1 + 0.15, 1.25 + 0.15], [mean_rho_val - std_rho_val, mean_rho_val - std_rho_val], color='black', lw=1)
ax.text(1.28 + 0.15, mean_rho_val - std_rho_val, f'{mean_rho_val - std_rho_val:.2f}(-1 SD)', va='center')# 图表标题和轴标签
ax.set_ylabel('R or ρ Range')
ax.set_xlabel('') # X 轴通常不显示标签,直接用类别名
ax.set_xticks([0, 1])
ax.set_xticklabels(['R', 'ρ'])
ax.set_ylim(0.65, 0.85) # 根据原图设定
ax.text(0.05, 0.95, '(d)', transform=ax.transAxes, fontsize=14, va='top') # 子图标签# 添加图例 (模拟原图的图例)
from matplotlib.lines import Line2D
from matplotlib.patches import Patch
legend_elements = [Patch(facecolor='grey', alpha=0.3, edgecolor='black', label='25%~75%'),Line2D([0], [0], color='black', lw=2, label='Mean ± 1 SD', marker='|', markersize=5, linestyle='-'),Line2D([0], [0], color='black', lw=1, label='Median Line'),Line2D([0], [0], marker='*', color='w', label='Mean',markerfacecolor='black', markersize=10)
]
ax.legend(handles=legend_elements, loc='upper right', bbox_to_anchor=(1.0, 1.0))plt.tight_layout()
plt.show()

Gemini-2.5-Pro 绘制南丁格尔玫瑰图代码

# 安装和加载必要的包
# install.packages("ggplot2")
# install.packages("dplyr")
# install.packages("tidyr") # For pivot_longer if neededlibrary(ggplot2)
library(dplyr)# 1. 准备数据
# 主模型数据
model_data <- data.frame(benchmark = factor(rep(c("HumanEval", "CodeArena", "EvalPlus", "BIRD-SQL", "CRUXEval-O", "Aider", "BigCodeBench", "McEval", "LiveCodeBench", "MBPP"), each = 4),levels = c("HumanEval", "CodeArena", "EvalPlus", "BIRD-SQL", "CRUXEval-O", "Aider", "BigCodeBench", "McEval", "LiveCodeBench", "MBPP")),model = factor(rep(c("Qwen2.5-Coder-32B-Instruct", "DeepSeek-Coder-V2-Instruct", "DeepSeek-Coder-33B-Instruct", "CodeLlama-Instruct-22B"), times = 10),levels = c("Qwen2.5-Coder-32B-Instruct", "DeepSeek-Coder-V2-Instruct", "DeepSeek-Coder-33B-Instruct", "CodeLlama-Instruct-22B")),value = c(# HumanEval92.7, 88.4, 79.3, 78.1,# CodeArena68.9, 57.4, 21.7, 16.8,# EvalPlus86.3, 83.8, 74.9, 73.5,# BIRD-SQL58.4, 51.9, 46.2, 45.6,# CRUXEval-O83.4, 75.1, 63.5, 50.6,# Aider73.7, 72.9, 59.4, 51.1,# BigCodeBench38.3, 36.3, 29.8, 29.4,# McEval65.9, 62.9, 54.3, 50.5,# LiveCodeBench31.4, 27.9, 22.6, 21.3,# MBPP90.2, 89.2, 81.2, 73.3)
)# GPT-4o 背景数据 (定义每个 benchmark "轨道" 的最大值)
gpt4o_data <- data.frame(benchmark = factor(c("HumanEval", "CodeArena", "EvalPlus", "BIRD-SQL", "CRUXEval-O", "Aider", "BigCodeBench", "McEval", "LiveCodeBench", "MBPP"),levels = levels(model_data$benchmark)),value = c(92.1, 69.1, 84.4, 54.2, 89.2, 71.4, 37.6, 65.8, 34.6, 86.8)
)# 2. 定义颜色
# 顺序应与 model factor levels 对应: Blue, Green, Beige, Pink
color_palette <- c("Qwen2.5-Coder-32B-Instruct" = "#2A7FFF", # 鲜艳的蓝色"DeepSeek-Coder-V2-Instruct" = "#7CFC00", # 亮绿色/酸橙绿"DeepSeek-Coder-33B-Instruct" = "#E0C097", # 米色/浅棕"CodeLlama-Instruct-22B" = "#FF1493", # 深粉色/品红"GPT-4o-Track" = "#4A4A3B" # 暗橄榄色 (用于背景轨道)
)# 3. 创建图表
# 计算 benchmark 标签的位置
num_benchmarks <- length(levels(model_data$benchmark))
benchmark_labels_data <- data.frame(benchmark = levels(model_data$benchmark),angle = 90 - seq(0, 360 - 360/num_benchmarks, length.out = num_benchmarks) - (360/num_benchmarks)/2,hjust_val = ifelse( (90 - seq(0, 360 - 360/num_benchmarks, length.out = num_benchmarks) - (360/num_benchmarks)/2) < -90 | (90 - seq(0, 360 - 360/num_benchmarks, length.out = num_benchmarks) - (360/num_benchmarks)/2) > 90, 1, 0),angle_text = ifelse( (90 - seq(0, 360 - 360/num_benchmarks, length.out = num_benchmarks) - (360/num_benchmarks)/2) < -90 | (90 - seq(0, 360 - 360/num_benchmarks, length.out = num_benchmarks) - (360/num_benchmarks)/2) > 90, (90 - seq(0, 360 - 360/num_benchmarks, length.out = num_benchmarks) - (360/num_benchmarks)/2) + 180, (90 - seq(0, 360 - 360/num_benchmarks, length.out = num_benchmarks) - (360/num_benchmarks)/2) )
)
# 合并以获取 benchmark 的 x 值
benchmark_labels_data <- benchmark_labels_data %>%mutate(x_pos = as.numeric(factor(benchmark, levels = levels(model_data$benchmark))))# 调整y轴上限以容纳标签
y_axis_max <- 115 #max(c(model_data$value, gpt4o_data$value)) * 1.15p <- ggplot() +# A. 绘制 GPT-4o 背景 "轨道"# 使用 geom_col 为每个 benchmark 创建一个单独的背景条,宽度覆盖整个类别geom_col(data = gpt4o_data,aes(x = benchmark, y = value), # 使用 y = y_axis_max 来创建完整的扇区背景fill = color_palette["GPT-4o-Track"], # 使用预定义的颜色alpha = 0.8, # 透明度width = 0.95) + # 宽度,确保覆盖# B. 绘制模型数据条形geom_col(data = model_data, aes(x = benchmark, y = value, fill = model),position = position_dodge2(width = 0.9, preserve = "single"), # 分组条形width = 0.85, # 条形宽度alpha = 0.9) + # 条形透明度# C. 在 GPT-4o 轨道上添加数值标签geom_text(data = gpt4o_data,aes(x = benchmark, y = value + 4, label = sprintf("%.1f", value)), # 标签位置略高于轨道末端color = "white", size = 2.5, fontface = "bold", vjust = 0.5) +# D. 在模型数据条形上添加数值标签geom_text(data = model_data,aes(x = benchmark, y = value + 2, label = sprintf("%.1f", value), group = model),position = position_dodge2(width = 0.9, preserve = "single"),color = "white", size = 2, vjust = 0.5, hjust=0.5, fontface="bold") +# E. 应用极坐标转换coord_polar(theta = "x", start = 0, direction = 1) +# F. 设置 Y 轴范围和刻度 (半径)# 移除默认的Y轴网格线和标签,因为它们在极坐标图中通常不直观scale_y_continuous(limits = c(-20, y_axis_max), breaks = c(0, 25, 50, 75, 100), labels = c("0", "25", "50", "75", "100")) +# G. 自定义颜色scale_fill_manual(values = color_palette, name = "Model") +# H. 添加 Benchmark 标签 (X轴标签)# 使用 annotate 或 geom_text 来手动放置 benchmark 标签# 这里我们使用 scale_x_discrete 并尝试通过主题调整,但自定义 geom_text 通常效果更好geom_text(data = benchmark_labels_data,aes(x = x_pos, y = y_axis_max * 0.95, label = benchmark, angle = angle_text, hjust = hjust_val), # y值设在外部color = "white", size = 3.5, fontface = "bold") +# I. 设置主题和样式theme_minimal() +theme(plot.background = element_rect(fill = "black", color = "black"),panel.background = element_rect(fill = "black", color = "black"),panel.grid = element_blank(), # 移除主要网格线axis.title = element_blank(),axis.text.y = element_text(color = "white", size = 8), # Y轴刻度标签(半径)axis.text.x = element_blank(), # 移除默认的X轴标签,因为我们用geom_text自定义了legend.position = "bottom",legend.background = element_rect(fill = "black"),legend.title = element_text(color = "white", face = "bold"),legend.text = element_text(color = "white"),plot.title = element_text(color = "white", size = 20, hjust = 0.5, face = "bold", margin = margin(b = 20))) +# J. 添加标题ggtitle("Qwen2.5-Coder-32B")# 显示图表
print(p)

制作不易,如果这篇文章觉得对你有用,可否点个关注。给我个三连击:点赞、转发和在看。若可以再给我加个🌟,谢谢你看我的文章,我们下篇再见!

搭建完美的写作环境:工具篇(12 章)
图解机器学习 - 中文版(72 张 PNG)
ChatGPT、大模型系列研究报告(50 个 PDF)
108 页 PDF 小册子:搭建机器学习开发环境及 Python 基础 
116 页 PDF 小册子:机器学习中的概率论、统计学、线性代数 
史上最全!371 张速查表,涵盖 AI、ChatGPT、Python、R、深度学习、机器学习等

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

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

相关文章

深度学习-梯度消失和梯度爆炸

梯度消失 在某些神经网络中&#xff0c;随着网络深度的增加&#xff0c;梯度在隐藏层反向传播时倾向于变小&#xff0c;这就意味着&#xff0c;前面隐藏层中的神经元要比后面的学习起来更慢&#xff0c;这种现象就叫做“梯度消失”&#xff1b; 梯度爆炸 如果我们进行一些特殊…

Go 语言基础 2 Func,流程控制

更多个人笔记见&#xff1a; github个人笔记仓库 gitee 个人笔记仓库 个人学习&#xff0c;学习过程中还会不断补充&#xff5e; &#xff08;后续会更新在github上&#xff09; 文章目录 Func 函数函数栈概念 函数表示类型 Anonymous func 匿名函数closure 闭包基础示例http利…

【Linux 学习计划】-- 倒计时、进度条小程序

目录 \r 、\n、fflush 倒计时 进度条 进度条进阶版 结语 \r 、\n、fflush 首先我们先来认识这三个东西&#xff0c;这将会是我们接下来两个小程序的重点之一 首先是我们的老演员\n&#xff0c;也就是回车加换行 这里面其实包含了两个操作&#xff0c;一个叫做回车&…

从零实现wss通信示例(WebSocket SSL)

客户端和服务端代码框架跟上一篇一致,仅增加了ssl的证书部分用于加密通信,明文通信(ws协议)见上一篇【https://blog.csdn.net/suoxd123/article/details/148093934】 1. 证书创建 1. 安装openssl 【官网地址】:https://slproweb.com/products/Win32OpenSSL.html 1.2 …

mysql 索引失效有哪些

InnoDB存储引擎根据索引类型不同&#xff0c;分为聚簇索引和二级索引 聚簇索引&#xff1a;叶子节点存放的是实际数据 二级索引&#xff1a;存放的是主键值&#xff0c;不是实际数据 1.对索引使用左或者左右模糊匹配 select * from t_user where name like %林‘&#xff1b…

LabVIEW通用测控平台设计

基于 LabVIEW 图形化编程环境&#xff0c;设计了一套适用于工业自动化、科研测试领域的通用测控平台。通过整合研华、NI等品牌硬件&#xff0c;实现多类型数据采集、实时控制及可视化管理。平台采用模块化架构&#xff0c;支持硬件灵活扩展&#xff0c;解决了传统测控系统开发周…

华为OD机试真题——智能驾驶(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

速卖通,国际站测评补单,如何平衡效率和安全

测评能够帮助卖家让平台更喜欢自己的产品&#xff0c;给予更好排名的同时也让后续进入店铺的买家更容易认可自己的产品。这是进行真实交易后形成的评价&#xff0c;而不是通过机器软件生成&#xff0c;形成虚拟数据后&#xff0c;那种刷评形式产生的评论。它符合任何电商平台的…

学习路之PHP--easyswoole3.3入门及文件热加载

学习路之PHP--easyswoole入门 一、框架说明二、常用命令三、文件热加载 一、框架说明 目录结构 目录结构 project 项目部署目录 ├─App 应用目录(可以有多个) │ ├─HttpController 控制器目录 │ │ └─Index.php …

设计模式26——解释器模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 解释器模式&#xff08;Interp…

第三届宁波技能大赛网络安全赛项样题

2025 第三届宁波技能大赛网络安全赛项样题 模块A: 网络安全事件响应、数字取证调查和应用安全任务一:应急响应任务二:操作系统取证任务三:网络数据包分析任务四:代码审计 模块B:CTF 夺旗-攻击模块C:CTF 夺旗-防御需要环境培训可以私信博主&#xff01;&#xff01;&#xff01;…

GO语言进阶:掌握进程OS操作与高效编码数据转换

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…

IO进程(进程 Process)

什么是进程&#xff1f; 1.概念 程序&#xff1a;编译好的可执行文件&#xff0c;存放在磁盘上的指令和数据的有序集合。 由此可见程序是静态的&#xff0c;没有执行的概念。 进程&#xff1a;是程序的一次执行的过程&#xff0c;是一个可调度的任务&#xff0c;也是执行一…

CSS传统布局与定位详解与TDK三大标签SEO优化

一、传统布局基础 1. 文档流布局 浏览器默认的文档流布局方式遵循以下规则&#xff1a; 块级元素&#xff08;如<div>、<p>、<h1>&#xff09;&#xff1a; 独占一行宽度默认100%可以设置宽高、内外边距 div {width: 500px;height: 200px;margin: 10px …

【GraphQL】深入解析 Apollo Client:从架构到实践的一站式 GraphQL 解决方案

深入解析 Apollo Client&#xff1a;从架构到实践的一站式 GraphQL 解决方案 1. 引言 GraphQL 作为现代 API 开发的核心技术&#xff0c;其灵活性和高效性正在重塑数据交互模式。Apollo Client 作为 GraphQL 生态中最受欢迎的客户端库&#xff0c;凭借强大的缓存机制、框架集…

docker学习基本使用教程

docker是一款用于开发部署和运行容器化平台&#xff0c;能将应用及其依赖打包成轻量级、可移植的容器&#xff0c;实现一次构建&#xff0c;随处运行。docker是cs架构程序&#xff08;客户端和服务端&#xff09;&#xff0c;docker客户端向docker守护进程发送请求&#xff0c;…

万字详解RTR RTSP SDP RTCP

目录 1 RTSP1.1 RTSP基本简介1.2 RSTP架构1.3 重点内容分析 2 RTR2.1 RTR简介2.2 RTP 封装 H.2642.3 RTP 解封装 H.2642.4 RTP封装 AAC2.5 RTP解封装AAC 3 SDP3.1 基础概念3.2 SDP协议示例解析3.3 重点知识 4 RTCP4.1 RTCP基础概念4.2 重点 5 总结 1 RTSP 1.1 RTSP基本简介 一…

唯一原生适配鸿蒙电脑的远程控制应用,向日葵正式上线

近日&#xff0c;华为正式发布鸿蒙电脑新品&#xff0c;标志着HarmonyOS在PC端生态的进一步拓展。作为远程控制领域的先行者&#xff0c;贝锐科技旗下的向日葵远程控制软件也在第一时间完成了对鸿蒙电脑系统的原生适配&#xff0c;并已正式上线华为鸿蒙电脑应用市场&#xff0c…

vue2中,codemirror编辑器的使用

交互说明 在编辑器中输入{时&#xff0c;会自动弹出选项弹窗&#xff0c;然后可以选值插入。 代码 父组件 <variable-editorv-model"content":variables"variables"placeholder"请输入模板内容..."blur"handleBlur" />data…

Kafka自定义分区策略实战避坑指南

文章目录 概要代码示例小结 概要 kafka生产者发送消息默认根据总分区数和设置的key计算哈希取余数&#xff0c;key不变就默认存放在一个分区&#xff0c;没有key则随机数分区&#xff0c;明显默认的是最不好用的&#xff0c;那kafka也提供了一个轮询分区策略&#xff0c;我自己…