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

news2025/6/2 2:31:46

大家好,我是 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 needed

library(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(
    # HumanEval
    92.7, 88.4, 79.3, 78.1,
    # CodeArena
    68.9, 57.4, 21.7, 16.8,
    # EvalPlus
    86.3, 83.8, 74.9, 73.5,
    # BIRD-SQL
    58.4, 51.9, 46.2, 45.6,
    # CRUXEval-O
    83.4, 75.1, 63.5, 50.6,
    # Aider
    73.7, 72.9, 59.4, 51.1,
    # BigCodeBench
    38.3, 36.3, 29.8, 29.4,
    # McEval
    65.9, 62.9, 54.3, 50.5,
    # LiveCodeBench
    31.4, 27.9, 22.6, 21.3,
    # MBPP
    90.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.15


p <- 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.coloradmin.cn/o/2393248.html

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

相关文章

Linux入门(十一)进程管理

Linux 中每个执行的程序都称为一个进程&#xff0c;每个进程都分配一个ID号&#xff08;PID&#xff09; 每个进程都可能以两种方式存在&#xff0c;前台&#xff08;屏幕上可以操作的&#xff09;和后台&#xff08;屏幕上无法看到的&#xff09;&#xff0c;一般系统的服务都…

【技能篇】RabbitMQ消息中间件面试专题

1. RabbitMQ 中的 broker 是指什么&#xff1f;cluster 又是指什么&#xff1f; 2. 什么是元数据&#xff1f;元数据分为哪些类型&#xff1f;包括哪些内容&#xff1f;与 cluster 相关的元数据有哪些&#xff1f;元数据是如何保存的&#xff1f;元数据在 cluster 中是如何分布…

Linux研学-环境搭建

一 概述 1 Linux 概述 Linux系统由内核、Shell、文件系统、应用程序及系统库等关键部分组成。内核作为核心&#xff0c;管理硬件资源与系统服务&#xff1b;Shell提供用户与系统交互的命令行界面&#xff0c;让用户能便捷执行操作&#xff1b;文件系统负责数据的存储、组织与管…

Ubuntu系统下可执行文件在桌面单击运行教程

目录 ​编辑 操作环境&#xff1a;这个可执行文件在原目录下还有它的依赖文件 1&#xff0c;方法1&#xff1a;创建启动脚本 操作步骤​&#xff1a; &#xff08;1&#xff09;​​在桌面创建脚本文件​​&#xff08;如 run_main_improve.sh&#xff09;&#xff1a; ​…

Linux之文件进程间通信信号

Linux之文件&进程间通信&信号 文件文件描述符文件操作重定向缓冲区一切皆文件的理解文件系统磁盘物理结构&块文件系统结构 软硬链接 进程间通信匿名管道命名管道system V共享内存 信号 文件 首先&#xff0c;Linux下一切皆文件。对于大量的文件&#xff0c;自然要…

代码随想录算法训练营 Day61 图论ⅩⅠ Floyd A※ 最短路径算法

图论 题目 97. 小明逛公园 本题是经典的多源最短路问题。 在这之前我们讲解过&#xff0c;dijkstra朴素版、dijkstra堆优化、Bellman算法、Bellman队列优化&#xff08;SPFA&#xff09; 都是单源最短路&#xff0c;即只能有一个起点。 而本题是多源最短路&#xff0c;即求多…

改写自己的浏览器插件工具 myChromeTools

1. 起因&#xff0c; 目的: 前面我写过&#xff0c; 自己的一个浏览器插件小工具 最近又增加一个小功能&#xff0c;可以自动滚动页面&#xff0c;尤其是对于那些瀑布流加载的网页。最新的代码都在这里 2. 先看效果 3. 过程: 代码 1, 模拟鼠标自然滚动 // 处理滚动控制逻辑…

python-pptx去除形状默认的阴影

文章目录 效果原理1. 阴影继承机制解析2. XML层操作细节3. 注意事项 扩展应用1. 批量去除阴影2. 复合效果控制 效果 右边这个是直接添加一个形状。可以看到它会默认被赋予一个阴影。 然而&#xff0c;这个东西在特定的场合&#xff0c;其实是我们所不需要的。 那怎么把这个阴…

kuboard自带ETCD存储满了处理方案

一、前言 当运行 ETCD 日志报 Erro: mvcc database space exceeded 时&#xff0c;说明 ETCD 存储不足了&#xff08;默认 ETCD 存储是 2G&#xff09;&#xff0c;配额会触发告警&#xff0c;然后 Etcd 系统将进入操作受限的维护模式。 通过下面命令可以查看 ETCD 存储使用情…

SpringBoot+tabula+pdfbox解析pdf中的段落和表格数据

一、前言 在日常业务需求中&#xff0c;往往会遇到解析pdf文件中的段落或者表格数据的需求。 常见的做法是使用 pdfbox 来做&#xff0c;但是它只能提取文本数据&#xff0c;没有我们在文件页面上面的那种结构化组织&#xff0c;文本通常是散乱的包含各种换行回车空格等格式&a…

GitHub push失败解决办法-fatal: unable to access ‘https://github.com/xxx

问题描述&#xff1a; 问题解决&#xff1a; 1、首先查找自己电脑的代理地址和端口 windows教程如下&#xff1a; 1、搜索控制面板-打开Internet选项 2、点击局域网设置&#xff1a; 3、如图为地址和端口号 即可获得本机地址和端口号 2、根据上一步获得的本机地址和端口号为…

电商平台 API、数据抓取与爬虫技术的区别及优势分析

一、技术定义与核心原理 电商平台 API&#xff08;应用程序编程接口&#xff09; 作为平台官方提供的标准化数据交互通道&#xff0c;API 通过 HTTP 协议实现不同系统间的结构化数据传输。开发者需申请授权&#xff08;如 API 密钥&#xff09;&#xff0c;按照文档规范调用接口…

单卡4090部署Qwen3-32B-AWQ(4bit量化)-vllm

单卡4090部署Qwen3-32B-AWQ(4bit量化) 模型&#xff1a;Qwen3-32B-AWQ(4bit量化) 显卡&#xff1a;4090 1 张 python版本 python 3.12 推理框架“vllm 重要包的版本 vllm0.9.0创建GPU云主机 这里我使用的是优云智算平台的GPU&#xff0c;使用链接可以看下面的 https://blog.…

漫画Android:Handler机制是怎么实现的?

线程之间通信会用到Handler&#xff0c;比如&#xff0c;在子线程中进行耗时的网络请求任务&#xff0c;子线程在获取到数据后&#xff0c;更新界面的时候就需要用到Handler&#xff1b; 子线程在获取到数据后&#xff0c;不直接去更新 界面&#xff0c;而是把数据通过一个消息…

多部手机连接同一wifi的ip一样吗?如何更改ip

通常情况下&#xff0c;多部手机连接同一个WiFi时&#xff0c;它们的IP地址是各不相同的&#xff08;在局域网内&#xff09;。但是&#xff0c;从互联网&#xff08;外网&#xff09;的角度看&#xff0c;它们共享同一个公网IP地址。让我详细解释一下&#xff0c;并说明如何更…

飞牛fnNAS的Docker应用之迅雷篇

目录 一、“迅雷”应用安装 二、启动迅雷 三、迅雷账号登录 四、修改“迅雷”下载保存路径 1、下载路径准备 2、停止“迅雷”Docker容器 3、修改存储位置 4、重新启动Docker容器 5、再次“启用”迅雷 五、测试 1、在PC上添加下载任务 2、手机上管理 3、手机添加下…

SQLMesh 用户定义变量详解:从全局到局部的全方位配置指南

SQLMesh 提供了灵活的多层级变量系统&#xff0c;支持从全局配置到模型局部作用域的变量定义。本文将详细介绍 SQLMesh 的四类用户定义变量&#xff08;global、gateway、blueprint 和 local&#xff09;以及宏函数的使用方法。 一、变量类型概述 SQLMesh 支持四种用户定义变量…

inviteflood:基于 UDP 的 SIP/SDP 洪水攻击工具!全参数详细教程!Kali Linux教程!

简介 一种通过 UDP/IP 执行 SIP/SDP INVITE 消息泛洪的工具。该工具已在 Linux Red Hat Fedora Core 4 平台&#xff08;奔腾 IV&#xff0c;2.5 GHz&#xff09;上测试&#xff0c;但预计该工具可在各种 Linux 发行版上成功构建和执行。 inviteflood 是一款专注于 SIP 协议攻…

Visual Studio 2022 设置自动换行

Visual Studio 2022 设置自动换行 一、在 Visual Studio 菜单栏上&#xff0c;选择 工具>选项二、选择“文本编辑器”>“所有语言”>“常规” 全局设置此选项。 一、在 Visual Studio 菜单栏上&#xff0c;选择 工具>选项 二、选择“文本编辑器”>“所有语言”&…

【Linux网络篇】:简单的TCP网络程序编写以及相关内容的扩展

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;Linux篇–CSDN博客 文章目录 一.简单的TCP网络程序相关接口代码实现服务器单进程版服务器多…