破解数据可视化难题:带轴断裂的柱状图绘制全指南

引言:当数据跨度让图表失真时,轴断裂技术如何力挽狂澜?

在数据可视化的世界里,我们常常会遇到这样的困境:一组数据中既有 "巨无霸" 般的极端值,又有需要精细展示的小数据。比如在财务报表中,某个项目的金额达到千万级别,而其他项目只有个位数;在生物实验中,某个样本的指标值突破上限,而其他样本集中在较低区间。这时候如果直接绘制普通柱状图,小数据会被压缩到几乎看不见,可视化效果大打折扣😓。

今天要分享的带轴断裂的柱状图,就像一位神奇的 "数据魔术师",通过在纵轴上制造 "断裂",让大小数据各得其所 —— 既能展示极端值的真实规模,又能清晰呈现小数据的细节差异。让我们通过一段完整的 Python 代码,揭开这项技术的神秘面纱,从此告别数据可视化中的 "尺度焦虑"!🌟

代码全景:先睹为快的轴断裂柱状图实现

import matplotlib.pyplot as plt# 数据准备
data = [10000, 3, 7, 9, 10, 6]
labels = ['A', 'B', 'C', 'D', 'E', 'F']# 断裂参数设置
break_point = 20
upper_ylim = max(data) * 1.1# 创建图形和两个子轴
fig, (ax_upper, ax_lower) = plt.subplots(2, 1, sharex=True,gridspec_kw={'height_ratios': [1, 3]},figsize=(8, 6))# 在两个轴上绘制数据
ax_upper.bar(labels, data)
ax_lower.bar(labels, data)# 设置轴范围
ax_lower.set_ylim(0, break_point)
ax_upper.set_ylim(break_point, upper_ylim)# 隐藏轴之间的边框
ax_upper.spines['bottom'].set_visible(False)
ax_lower.spines['top'].set_visible(False)
ax_upper.tick_params(labeltop=False)  # 不显示顶部标签
ax_lower.xaxis.tick_bottom()  # 只在底部显示x轴刻度# 添加对角线表示轴断裂
d = .015  # 对角线的垂直与水平长度比例
kwargs = dict(transform=ax_upper.transAxes, color='k', clip_on=False)
ax_upper.plot((-d, +d), (-d, +d), **kwargs)
ax_upper.plot((1 - d, 1 + d), (-d, +d), **kwargs)kwargs.update(transform=ax_lower.transAxes)  # 切换到下轴
ax_lower.plot((-d, +d), (1 - d, 1 + d), **kwargs)
ax_lower.plot((1 - d, 1 + d), (1 - d, 1 + d), **kwargs)# 标签和样式设置
fig.suptitle('Bar Chart with Axis Break', fontsize=16, fontweight='bold')
ax_lower.set_xlabel('Category', fontsize=14, fontweight='bold')
ax_lower.set_ylabel('Value', fontsize=14, fontweight='bold')
for ax in (ax_upper, ax_lower):ax.grid(True, axis='y', linestyle='--', linewidth=0.5)ax.tick_params(axis='both', which='major', labelsize=12)plt.tight_layout(rect=[0, 0, 1, 0.96])# 保存为出版物质量
plt.savefig('axis_break_barplot.png', dpi=300)plt.show()

 

运行这段代码,你将得到一个上下两部分的柱状图:上半部分展示极端值(如 10000)的真实规模,下半部分放大显示小数据(3-10)的细节,中间用对角线标记轴断裂的位置。这种可视化方式让原本难以呈现的数据关系变得一目了然,接下来我们逐行解析其中的实现逻辑。

核心代码解析:轴断裂柱状图的 "分而治之" 策略

1. 数据准备:定义你的 "数据军团"

data = [10000, 3, 7, 9, 10, 6]
labels = ['A', 'B', 'C', 'D', 'E', 'F']
  • data 列表:存储各分类的数据值,这里第一个值 10000 是明显的极端值,后面的 3-10 是需要精细展示的小数据。你的数据可以是任何数值列表,比如 [500, 20, 25, 18, 22, 19](假设 500 是异常大值)。
  • labels 列表:对应数据的分类标签,长度必须与 data 一致。你可以替换为实际场景的标签,如 [' 一月 ', ' 二月 ', ' 三月 ', ' 四月 ', ' 五月 ', ' 六月 ']。

2. 断裂参数设置:定制你的 "数据放大镜"

break_point = 20
upper_ylim = max(data) * 1.1
  • break_point:轴断裂的位置,即上下轴的分界点。这个值需要根据数据特点设置:既要让小数据在下轴有足够的展示空间,又要让上轴能容纳极端值。本例中设为 20,因为小数据最大值是 10,20 能提供一倍的放大空间。
  • upper_ylim:上轴的上限,这里设置为数据最大值的 1.1 倍,留出一些空白区域让图形更美观。如果你的极端值是 500,upper_ylim 会自动计算为 500*1.1=550。

3. 图形与子轴创建:搭建 "数据展示舞台"

fig, (ax_upper, ax_lower) = plt.subplots(2, 1, sharex=True,gridspec_kw={'height_ratios': [1, 3]},figsize=(8, 6))
  • figsize=(8,6):设置整个图形的宽度和高度(英寸),你可以根据需要调整,比如 (10,7) 让图形更大。
  • 2,1:创建 2 行 1 列的子图布局,上下排列。
  • sharex=True:上下轴共享 x 轴,确保分类标签对齐。
  • height_ratios=[1,3]:关键参数!设置上下轴的高度比例,上轴占 1 份,下轴占 3 份。这意味着下轴会有更多空间展示小数据细节,你可以根据数据特点调整比例,比如 [1,4] 获得更大的下轴。

4. 数据绘制:让 "数据柱" 各就各位

ax_upper.bar(labels, data)
ax_lower.bar(labels, data)
  • 分别在上轴和下轴绘制相同的柱状图,但由于后续的轴范围设置,上轴会显示极端值的全貌,下轴会放大显示小数据。这里的柱状图样式可以进一步定制,比如添加颜色、边框等:
ax_upper.bar(labels, data, color='skyblue', edgecolor='navy')
ax_lower.bar(labels, data, color='lightgreen', edgecolor='darkgreen')

5. 轴范围设置:划定 "数据展示区间" 

ax_lower.set_ylim(0, break_point)
ax_upper.set_ylim(break_point, upper_ylim)
  • 下轴设置为 0 到 break_point(20),这样小数据(3-10)会占据下轴的大部分空间,细节清晰可见。
  • 上轴设置为 break_point 到 upper_ylim(10000*1.1=11000),极端值 10000 会在上轴完整展示。

6. 边框处理:打造 "无缝视觉体验"

ax_upper.spines['bottom'].set_visible(False)
ax_lower.spines['top'].set_visible(False)
ax_upper.tick_params(labeltop=False)
ax_lower.xaxis.tick_bottom()
  • 隐藏上轴的底部边框和下轴的顶部边框,让两个轴看起来像一个整体。
  • 取消上轴的顶部标签,确保 x 轴标签只在底部显示一次,避免重复。

7. 断裂线绘制:添加 "数据尺度转换标记"

d = .015
kwargs = dict(transform=ax_upper.transAxes, color='k', clip_on=False)
ax_upper.plot((-d, +d), (-d, +d), **kwargs)
ax_upper.plot((1 - d, 1 + d), (-d, +d), **kwargs)kwargs.update(transform=ax_lower.transAxes)
ax_lower.plot((-d, +d), (1 - d, 1 + d), **kwargs)
ax_lower.plot((1 - d, 1 + d), (1 - d, 1 + d), **kwargs)
  • 这部分代码在上下轴的连接处绘制对角线,作为轴断裂的视觉标记。参数 d 控制对角线的倾斜程度,0.015 是一个经验值,你可以调整 d 的大小(如 0.02)改变斜线的长度和角度。
  • transform=ax_upper.transAxes表示使用轴的相对坐标(0-1),确保斜线位置始终在轴的角落,不受数据范围影响。

8. 标签与样式:提升 "图表颜值"

fig.suptitle('Bar Chart with Axis Break', fontsize=16, fontweight='bold')
ax_lower.set_xlabel('Category', fontsize=14, fontweight='bold')
ax_lower.set_ylabel('Value', fontsize=14, fontweight='bold')
for ax in (ax_upper, ax_lower):ax.grid(True, axis='y', linestyle='--', linewidth=0.5)ax.tick_params(axis='both', which='major', labelsize=12)
  • 标题设置fig.suptitle添加整个图形的主标题,ax_lower.set_xlabel/ylabel添加坐标轴标签。你可以替换为实际场景的标题,如 "2024 年各季度销售额对比(含异常值)"。
  • 网格线:添加 y 轴网格线(虚线,宽度 0.5),帮助读者读取数据值。
  • 刻度样式:设置刻度标签的大小和样式,确保清晰可读。

用户数据替换指南:让代码适配你的真实场景

1. 替换核心数据:从示例数据到业务数据

场景一:直接替换为你的数据列表
# 原始数据
data = [10000, 3, 7, 9, 10, 6]
labels = ['A', 'B', 'C', 'D', 'E', 'F']# 替换为你的数据(例如:各产品的销量,其中产品A销量异常高)
data = [8500, 120, 150, 135, 140, 125]  # 假设8500是异常大值
labels = ['产品A', '产品B', '产品C', '产品D', '产品E', '产品F']
场景二:从文件读取数据

如果数据存储在 CSV 文件中,可以这样读取:

import pandas as pd# 读取CSV文件
df = pd.read_csv('your_data.csv')
data = df['数值列'].tolist()
labels = df['分类列'].tolist()

2. 调整断裂参数:找到最适合你数据的 "断裂点" 

# 原始断裂参数
break_point = 20
upper_ylim = max(data) * 1.1# 根据你的数据调整break_point
# 示例:如果小数据集中在50-100,极端值是2000
break_point = 150  # 给小数据留出50%的扩展空间
upper_ylim = max(data) * 1.05  # 极端值区域留5%的空白

调整技巧

  • 观察小数据的最大值,break_point 建议设为该值的 1.5-2 倍,确保下轴有足够的展示空间
  • 上轴的 upper_ylim 可以设为极端值的 1.05-1.2 倍,避免图形顶部过于紧凑

3. 定制图形尺寸与比例:适应不同展示场景

# 原始图形设置
fig, (ax_upper, ax_lower) = plt.subplots(2, 1, sharex=True,gridspec_kw={'height_ratios': [1, 3]},figsize=(8, 6))# 示例1:用于PPT展示,增大图形尺寸
figsize=(10, 7)
height_ratios=[1, 3.5]  # 下轴比例更大,适合精细展示# 示例2:用于论文排版,调整为更窄的比例
figsize=(6, 5)
height_ratios=[1, 2.5]  # 节省横向空间

4. 自定义颜色与样式:让图表更符合品牌调性 

# 原始绘图代码
ax_upper.bar(labels, data)
ax_lower.bar(labels, data)# 自定义颜色(示例:使用蓝色系渐变)
colors = ['#436EEE', '#648FFF', '#85B0FF', '#A6D2FF', '#C7E5FF', '#E8F7FF']
ax_upper.bar(labels, data, color=colors, edgecolor='none')
ax_lower.bar(labels, data, color=colors, edgecolor='none')# 添加柱状图边框
ax_upper.bar(labels, data, color=colors, edgecolor='black', linewidth=0.5)

应用场景:轴断裂柱状图的 "十八般武艺"

1. 财务数据分析:一眼看穿异常收支

在公司财务报表中,某个项目的支出可能达到千万级别,而其他项目在十万级别。使用轴断裂柱状图可以:

  • 上轴展示千万级支出的真实规模
  • 下轴放大展示十万级支出的细微差异
  • 快速发现预算超支或节省的项目

2. 生物实验数据:不遗漏任何细节

在生物学实验中,某个样本的指标值可能突增(如病毒浓度),而其他样本在正常范围:

  • 上轴显示突变样本的极端值
  • 下轴清晰比较正常样本的细微差异
  • 帮助研究人员发现异常样本的同时,不忽视正常组的规律

3. 市场调研数据:大小数据同台竞技

在用户调研中,某个地区的响应人数可能远高于其他地区:

  • 上轴展示热门地区的高响应量
  • 下轴比较其他地区的响应差异
  • 避免小数据地区在普通图表中 "隐身"

4. 教育数据分析:极端分数与整体水平兼顾

在考试成绩分析中,可能有个别学生获得满分,而大部分在 60-80 分之间:

  • 上轴展示满分学生的突出表现
  • 下轴详细比较其他学生的分数分布
  • 帮助教师全面评估班级水平,不忽视尖子生也不忽略整体

实战案例:某电商平台分析各品类销售额,其中数码品类销售额达 8500 万元,而服装、食品等品类在 120-150 万元之间。使用轴断裂柱状图后,运营人员可以同时看到:

  • 数码品类的绝对优势地位
  • 服装、食品等品类的相对销售差异
  • 快速定位需要重点关注的品类(如销售额最低的品类)

细节优化:让图表从 "能用" 到 "惊艳"

1. 增强断裂线的视觉提示

# 原始断裂线设置
d = .015# 优化方案:使用更醒目的断裂标记
d = 0.03  # 增大d值,让斜线更长更明显
kwargs = dict(transform=ax_upper.transAxes, color='red', linewidth=2, clip_on=False)
# 在上轴添加双向箭头断裂标记(更专业的视觉提示)
from matplotlib.patches import FancyArrowPatch
arrow = FancyArrowPatch((-d, 0), (d, 0), arrowstyle='<->', transform=ax_upper.transAxes, color='red', clip_on=False)
ax_upper.add_patch(arrow)

2. 添加数据标签:让数值一目了然 

# 为柱状图添加数值标签
def add_labels(ax):for p in ax.patches:height = p.get_height()if height > 0:  # 只显示正值标签ax.text(p.get_x() + p.get_width()/2., height + 0.1,f'{height:.0f}', ha='center', va='bottom')add_labels(ax_upper)
add_labels(ax_lower)

3. 优化网格线与边框 

# 原始网格线设置
for ax in (ax_upper, ax_lower):ax.grid(True, axis='y', linestyle='--', linewidth=0.5)# 进阶优化:
for ax in (ax_upper, ax_lower):# 只显示主要网格线ax.grid(True, axis='y', which='major', linestyle='--', linewidth=0.7)# 隐藏不必要的边框ax.spines['left'].set_visible(False)ax.spines['right'].set_visible(False)# 添加轻微的背景色区分上下轴ax.set_facecolor('#f9f9f9')

4. 保存为高质量图片:满足出版需求 

# 原始保存设置
plt.savefig('axis_break_barplot.png', dpi=300)# 优化保存参数(用于论文或出版物)
plt.savefig('axis_break_barplot.tiff', dpi=600,          # 更高分辨率bbox_inches='tight', # 裁剪空白边缘pad_inches=0.1,     # 保留少量边距facecolor='white')  # 白色背景

常见问题与解决方案

1. 上下轴的柱状图对不齐怎么办?

原因:可能是标签长度不一致导致 x 轴刻度偏移,或者绘图时添加了额外元素。
解决方案

# 添加固定x轴范围(假设标签是6个)
ax_upper.set_xlim(-0.5, 5.5)
ax_lower.set_xlim(-0.5, 5.5)

2. 断裂线看起来不自然怎么办?

原因:断裂线的比例或样式不合适。
解决方案

# 尝试不同的断裂标记样式(如波浪线)
from matplotlib.path import Path
from matplotlib.patches import PathPatch# 定义波浪线路径
verts = [(0, 0), (0.1, 0), (0.15, 0.05), (0.2, 0), (0.3, 0), (0.35, 0.05),(0.4, 0), (0.5, 0), (0.55, -0.05), (0.6, 0), (0.7, 0), (0.75, -0.05),(0.8, 0), (0.9, 0), (1, 0)
]
codes = [Path.MOVETO] + [Path.LINETO] * (len(verts) - 1)
path = Path(verts, codes)# 在上轴添加波浪线断裂标记
patch = PathPatch(path, transform=ax_upper.transAxes, color='k', clip_on=False)
ax_upper.add_patch(patch)

3. 极端值在上轴显示不全怎么办?

原因:upper_ylim 设置过小。
解决方案

# 手动设置upper_ylim(确保极端值有足够空间)
upper_ylim = max(data) * 1.2  # 增加留白比例到20%
# 或者直接指定固定值
upper_ylim = 12000  # 假设极端值是10000,设为12000

总结:掌握轴断裂技术,解锁数据可视化新境界

通过今天的分享,我们深入解析了带轴断裂的柱状图绘制方法,从数据准备到图形优化,每一个步骤都旨在解决数据跨度大带来的可视化难题。这项技术就像为图表安装了 "变焦镜头",让我们既能俯瞰数据全貌,又能聚焦细节差异。

现在轮到你动手实践了!💪 打开 Python 环境,替换成你的数据,调整断裂点和图形参数,看看那些曾经让你头疼的极端值数据如何变得清晰易懂。记得在遇到问题时回顾本文的 "用户数据替换指南" 和 "常见问题",相信你一定能绘制出专业级别的轴断裂柱状图。

数据可视化的魅力在于将复杂信息转化为直观认知,而轴断裂技术正是这个过程中的有力武器。下次当你遇到 "贫富悬殊" 的数据时,不要再犹豫 —— 用轴断裂柱状图,让每一个数据点都绽放光彩!🌟

如果觉得本文对你有帮助,欢迎分享给身边的数据分析师和科研工作者。关注我,后续将带来更多数据可视化技巧,让我们一起在数据的海洋中探索美的可能!🚀

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

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

相关文章

以太网基础①以太网相关通信接口

1. 今日摸鱼任务 需要学习使用ZYNQ的以太网传输SCPI指令 需要把PL PS两侧的都用起来&#xff08;加油鸭&#xff01;&#xff09; 呐呐呐 今天就先学一下基础知识呗 02_【逻辑教程】基于HDL的FPGA逻辑设计与验证教程V3.5.2.pdf 51 以太网相关通信接口详解 52 以太网&#xff…

FPGA基础 -- Verilog 共享任务(task)和函数(function)

Verilog 中共享任务&#xff08;task&#xff09;和函数&#xff08;function&#xff09; 的详细专业培训&#xff0c;适合具有一定 RTL 编程经验的工程师深入掌握。 一、任务&#xff08;task&#xff09;与函数&#xff08;function&#xff09;的基本区别 特性taskfunctio…

学习大模型---需要掌握的数学知识

1. 线性代数&#xff1a;乐高积木的世界 想象你有很多乐高积木块。线性代数就是研究怎么用这些积木块搭建东西&#xff0c;以及这些搭建好的东西有什么特性的学问。 向量&#xff1a; 就像一个有方向的箭头&#xff0c;或者一组排好队的数字。比如&#xff1a; 一个箭头&…

明远智睿RK3506开发板:多核异构架构赋能高可靠性工业与商业应用

在工业4.0与物联网&#xff08;IoT&#xff09;技术快速发展的背景下&#xff0c;嵌入式系统对性能、功耗、可靠性和实时性的要求日益严苛。针对这一趋势&#xff0c;瑞芯微推出的RK3506开发板凭借其创新的三核A7单核M0多核异构架构、高能低耗设计以及丰富的外设资源&#xff0…

【AI时代速通QT】第二节:Qt SDK 的目录介绍和第一个Qt Creator项目

目录 一、认识 Qt SDK 的目录结构 二、第一个 Qt 程序 2.1 Qt Creator 创建项目 2.2 介绍项目各文件 三、揭秘 Qt 的构建过程 四、运行项目与总结 &#x1f3ac; 攻城狮7号&#xff1a;个人主页 &#x1f525; 个人专栏:CQT跨平台界面编程 ⛺️ 君子慎独! &#x1f308…

CDH部署Hive详细指南

CDH部署Hive详细指南 本文将详细介绍如何使用Cloudera Manager Web界面部署Hive组件,包括安装、配置、优化和运维管理等内容。 1. 环境准备 1.1 系统要求 1.1.1 硬件要求 服务器配置 CPU:建议8核以上内存:建议32GB以上磁盘:建议使用企业级SAS或SSD网络:建议万兆网络集…

党建赋能 医校协同|广州附医华南医院与湖南中医药高等专科学校签约携手共育英才

为深入贯彻落实党中央、国务院关于高校毕业生就业创业工作决策部署&#xff0c;教育部印发《职业学校校企合作促进办法》&#xff0c;对深化医教协同提供了政策指引。在医学教育领域&#xff0c;鼓励医学院校与医疗机构开展深度合作&#xff0c;根据医疗行业需求调整专业设置与…

【RTSP从零实践】2、使用RTP协议封装并传输H264

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

行业热点丨手机中框设计如何体现增材思维?

编者荐语&#xff1a; 通过增材设计思维在金属边框设计晶格结构&#xff0c;既能减轻重量&#xff0c;同时也有助于散热&#xff0c;针对不同位置设计不同类型的晶格结构还能起到缓冲效果&#xff0c;提高手机抗冲击能力。 以下文章来源于Inspire增材创新设计&#xff0c;作者…

鸿蒙案例实战——添加水印

本示例为开发者展示常用的水印添加能力&#xff0c;包括两种方式给页面添加水印、保存图片添加水印、拍照图片添加水印和pdf文件添加水印。 案例效果截图 首页 页面水印 图片水印 pdf水印 案例运用到的知识点 核心知识点 页面添加水印&#xff1a;封装Canv…

Qt工作总结07 <qBound和std::clamp>

一、qBound简介 1. 定义 是 Qt 框架中一个非常实用的边界限制函数&#xff08;也称为 "clamp" 函数&#xff09;&#xff0c;用于将一个值限制在指定的最小值和最大值之间。头文件&#xff1a;#include <QtGlobal> 2. 函数原型 template <typename T>…

53-Oracle sqlhc多版本实操含(23 ai)

SQLHC&#xff08;SQL Health Check&#xff09;作为 Oracle 数据库性能诊断的核心工具&#xff0c;其设计理念和核心功能在 Oracle 各版本中保持高度一致&#xff0c;但在技术实现和周边生态上存在渐进式优化。定期对关键业务 SQL 执行健康检查&#xff0c;特别是在版本升级或…

math.pow()和pow()的区别

math.pow() 和 pow() 的区别 ✅ 1. math.pow() 来自 math 模块参数&#xff1a;两个数&#xff08;底数&#xff0c;指数&#xff09;结果类型&#xff1a; 始终返回 float 类型 示例&#xff1a; import math print(math.pow(2, 3)) # 输出&#xff1a;8.0 &#xff08;…

邮科OEM摄像头POE供电技术的核心优势

安防监控中&#xff0c;供电方式影响系统稳定性、安装效率与维护成本。邮科摄像头采用POE技术&#xff0c;通过网线同时传输数据与电力&#xff0c;革新传统部署模式。本文解析其六大核心优势&#xff0c;展现其作为现代安防优选方案的价值。 一、布线简化&#xff0c;效率提升…

微信小程序-数据加密

npm install crypto-js utils/aes.js const CryptoJS require(crypto-js);// 默认的 KEY 与 iv 如果没有给 const KEY CryptoJS.enc.Utf8.parse(KrQ4KAYOEyAz66RS); // 十六位十六进制数作为密钥 const IV CryptoJS.enc.Utf8.parse(ep1YCmxXuxKe4eH1); // 十六位十六进制…

【时时三省】(C语言基础)善于利用指针

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 指针是C语言中的一个重要概念&#xff0c;也是C语言的一个重要特色。正确而灵活地运用它&#xff0c;可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人&#xff0c;都应当深入地学习和…

单点登录进阶:基于芋道(yudao)授权码模式的单点登录流程、代码实现与安全设计

最近遇到需要单点登录的场景&#xff0c;我使用的是芋道框架&#xff0c;正好它手动实现了OAuth2的功能&#xff0c;可以为单点登录提供一些帮助&#xff0c;结合授权码的模式&#xff0c;在改动最小的情况下实现了单点登录。关键业务数据已经隐藏&#xff0c;后续将以以主认证…

关于Seata的一个小issue...

文章目录 引言原因&#x1f913;解决方法&#x1f635;总结❤️ 引言 某一天&#xff0c;笔者在逛着Github的时候&#xff0c;突然看到seata有个有趣的issue&#xff0c;是一个task。 相关描述&#xff1a; While running the DruidSQLRecognizerFactoryTest.testIsSqlSynta…

FTTR+软路由网络拓扑方案

文章目录 网络拓扑软路由配置FTTR光猫路由器TPLink路由器配置WAN设置LAN设置 参考 网络拓扑 软路由配置 配置静态IP地址&#xff1a;192.168.1.100设置网关指向主路由的IP 设置自定义DNS服务器 开启DHCP 这一步很关键&#xff0c;可以让连上wifi的所有设备自动趴强。 FTTR光猫…

RPC - 服务注册与发现模块

为什么要服务注册&#xff0c;服务注册是做什么 服务注册主要是实现分布式的系统&#xff0c;让系统更加的健壮&#xff0c;一个节点主机将自己所能提供的服务&#xff0c;在注册中心进行登记 为什么要服务发现&#xff0c;服务发现是要做什么 rpc调用者需要知道哪个节点主机…