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

Matplotlib 完全指南:从入门到精通

前言

Matplotlib 是 Python 中最基础、最强大的数据可视化库之一。无论你是数据分析师、数据科学家还是研究人员,掌握 Matplotlib 都是必不可少的技能。本文将带你从零开始学习 Matplotlib,帮助你掌握各种图表的绘制方法和高级技巧。
在这里插入图片描述

目录

  1. Matplotlib 简介
  2. 安装与基础配置
  3. 基础绘图
  4. 常用图表类型
  5. 图表样式与美化
  6. 多子图布局
  7. 高级技巧
  8. 实战案例
  9. 常见问题与解决方案
  10. 总结与资源

Matplotlib 简介

Matplotlib 是一个用于创建静态、动态和交互式图表的 Python 库。它由 John D. Hunter 在 2003 年开发,灵感来自于 MATLAB 的绘图功能。

主要特点

  • 功能全面:支持多种图表类型,从简单的线图到复杂的 3D 图表
  • 高度可定制:几乎所有图表元素都可以自定义
  • 跨平台:支持多种输出格式(PNG、PDF、SVG 等)
  • 与其他库的良好集成:特别是 NumPy 和 Pandas
  • 活跃的社区:丰富的文档和示例

安装与基础配置

安装

# 使用 pip 安装
pip install matplotlib# 使用 conda 安装
conda install matplotlib

基础导入

import matplotlib.pyplot as plt
import numpy as np# 设置中文显示(解决中文乱码问题)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False    # 用来正常显示负号

Jupyter Notebook 配置

# 在 Jupyter Notebook 中显示图片
%matplotlib inline# 使用高清显示
%config InlineBackend.figure_format = 'retina'

基础绘图

第一个图表

# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 创建图表
plt.figure(figsize=(8, 6))
plt.plot(x, y)
plt.title('正弦函数图')
plt.xlabel('x 轴')
plt.ylabel('y 轴')
plt.grid(True)
plt.show()

图表的基本组成

一个完整的 Matplotlib 图表包含以下主要组件:

  • Figure(画布):整个图表的容器
  • Axes(坐标系):实际的绘图区域
  • Axis(坐标轴):x 轴和 y 轴
  • Artist(图表元素):所有可见的元素(线条、文本、标记等)
# 面向对象的绘图方式
fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(x, y)
ax.set_title('正弦函数图')
ax.set_xlabel('x 轴')
ax.set_ylabel('y 轴')
ax.grid(True)
plt.show()

常用图表类型

1. 线图(Line Plot)

# 多条线图
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)plt.figure(figsize=(10, 6))
plt.plot(x, y1, label='sin(x)', color='blue', linestyle='-', linewidth=2)
plt.plot(x, y2, label='cos(x)', color='red', linestyle='--', linewidth=2)
plt.title('三角函数图')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

2. 散点图(Scatter Plot)

# 创建随机数据
np.random.seed(42)
x = np.random.randn(100)
y = 2 * x + 1 + np.random.randn(100) * 0.5plt.figure(figsize=(8, 6))
plt.scatter(x, y, c=x, cmap='viridis', alpha=0.6, s=50)
plt.colorbar(label='x值')
plt.title('散点图示例')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

3. 柱状图(Bar Chart)

# 柱状图
categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 78, 32]plt.figure(figsize=(8, 6))
bars = plt.bar(categories, values, color='skyblue', edgecolor='navy', alpha=0.7)# 在柱子上添加数值
for bar in bars:height = bar.get_height()plt.text(bar.get_x() + bar.get_width()/2., height,f'{height}', ha='center', va='bottom')plt.title('柱状图示例')
plt.xlabel('类别')
plt.ylabel('数值')
plt.grid(True, axis='y', alpha=0.3)
plt.show()

4. 直方图(Histogram)

# 生成正态分布数据
data = np.random.normal(100, 15, 1000)plt.figure(figsize=(10, 6))
n, bins, patches = plt.hist(data, bins=30, density=True, alpha=0.7, color='green', edgecolor='black')# 添加正态分布曲线
mu, sigma = np.mean(data), np.std(data)
x = np.linspace(data.min(), data.max(), 100)
plt.plot(x, 1/(sigma * np.sqrt(2 * np.pi)) * np.exp(-0.5 * ((x - mu) / sigma) ** 2),'r-', linewidth=2, label='正态分布曲线')plt.title('直方图与正态分布')
plt.xlabel('数值')
plt.ylabel('频率密度')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

5. 饼图(Pie Chart)

# 饼图数据
sizes = [30, 25, 20, 15, 10]
labels = ['A', 'B', 'C', 'D', 'E']
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99', '#ff99cc']
explode = (0.05, 0, 0, 0, 0)  # 突出显示第一块plt.figure(figsize=(8, 8))
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%',shadow=True, startangle=90)
plt.title('饼图示例')
plt.axis('equal')
plt.show()

6. 箱线图(Box Plot)

# 创建多组数据
data = [np.random.normal(0, std, 100) for std in range(1, 5)]plt.figure(figsize=(8, 6))
bp = plt.boxplot(data, patch_artist=True, labels=['A', 'B', 'C', 'D'])# 自定义箱线图颜色
colors = ['lightblue', 'lightgreen', 'lightpink', 'lightyellow']
for patch, color in zip(bp['boxes'], colors):patch.set_facecolor(color)plt.title('箱线图示例')
plt.xlabel('组别')
plt.ylabel('数值')
plt.grid(True, alpha=0.3)
plt.show()

图表样式与美化

1. 使用内置样式

# 查看可用样式
print(plt.style.available)# 使用样式
plt.style.use('seaborn')
# 或者使用临时样式
with plt.style.context('ggplot'):plt.plot(x, y)plt.show()

2. 自定义颜色和样式

# 自定义颜色映射
from matplotlib import cmx = np.linspace(0, 2*np.pi, 100)
fig, ax = plt.subplots(figsize=(10, 6))# 使用不同的颜色和样式
for i in range(5):y = np.sin(x + i*0.5)color = cm.viridis(i/4)  # 使用颜色映射ax.plot(x, y, color=color, linewidth=2, label=f'sin(x + {i*0.5:.1f})')ax.set_title('使用颜色映射的多条曲线')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

3. 添加注释和标记

# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(x, y, 'b-', linewidth=2)# 标记最大值点
max_idx = np.argmax(y)
ax.plot(x[max_idx], y[max_idx], 'ro', markersize=10)# 添加注释
ax.annotate(f'最大值: {y[max_idx]:.2f}', xy=(x[max_idx], y[max_idx]), xytext=(x[max_idx]+1, y[max_idx]+0.1),arrowprops=dict(arrowstyle='->', color='red'),fontsize=12)# 添加文本
ax.text(5, -0.5, '正弦函数', fontsize=16, ha='center',bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))ax.set_title('带注释的正弦函数图')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.grid(True, alpha=0.3)
plt.show()

多子图布局

1. 使用 subplot

# 创建 2x2 的子图
fig, axes = plt.subplots(2, 2, figsize=(12, 10))# 数据
x = np.linspace(0, 2*np.pi, 100)# 子图1:正弦函数
axes[0, 0].plot(x, np.sin(x), 'b-')
axes[0, 0].set_title('正弦函数')# 子图2:余弦函数
axes[0, 1].plot(x, np.cos(x), 'r-')
axes[0, 1].set_title('余弦函数')# 子图3:正切函数
axes[1, 0].plot(x, np.tan(x), 'g-')
axes[1, 0].set_ylim(-5, 5)
axes[1, 0].set_title('正切函数')# 子图4:组合
axes[1, 1].plot(x, np.sin(x), 'b-', label='sin(x)')
axes[1, 1].plot(x, np.cos(x), 'r-', label='cos(x)')
axes[1, 1].set_title('组合图')
axes[1, 1].legend()# 调整子图间距
plt.tight_layout()
plt.show()

2. 使用 GridSpec

from matplotlib.gridspec import GridSpecfig = plt.figure(figsize=(12, 8))
gs = GridSpec(3, 3, figure=fig)# 创建不同大小的子图
ax1 = fig.add_subplot(gs[0, :])
ax2 = fig.add_subplot(gs[1, :2])
ax3 = fig.add_subplot(gs[1:, 2])
ax4 = fig.add_subplot(gs[2, 0])
ax5 = fig.add_subplot(gs[2, 1])# 在每个子图中绘制
x = np.linspace(0, 10, 100)
ax1.plot(x, np.sin(x))
ax1.set_title('主图')ax2.bar(['A', 'B', 'C'], [3, 7, 5])
ax2.set_title('柱状图')ax3.scatter(np.random.randn(50), np.random.randn(50))
ax3.set_title('散点图')ax4.pie([30, 70], labels=['A', 'B'])
ax4.set_title('饼图')ax5.hist(np.random.normal(0, 1, 100))
ax5.set_title('直方图')plt.tight_layout()
plt.show()

高级技巧

1. 双坐标轴

# 创建具有两个 y 轴的图表
fig, ax1 = plt.subplots(figsize=(10, 6))x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.exp(x/10)# 第一个 y 轴
color = 'tab:red'
ax1.set_xlabel('x')
ax1.set_ylabel('sin(x)', color=color)
ax1.plot(x, y1, color=color)
ax1.tick_params(axis='y', labelcolor=color)# 第二个 y 轴
ax2 = ax1.twinx()
color = 'tab:blue'
ax2.set_ylabel('exp(x/10)', color=color)
ax2.plot(x, y2, color=color)
ax2.tick_params(axis='y', labelcolor=color)plt.title('双 Y 轴图表')
fig.tight_layout()
plt.show()

2. 3D 图表

from mpl_toolkits.mplot3d import Axes3D# 创建 3D 图表
fig = plt.figure(figsize=(12, 9))
ax = fig.add_subplot(111, projection='3d')# 创建数据
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))# 绘制 3D 表面
surf = ax.plot_surface(X, Y, Z, cmap='viridis', alpha=0.8)# 添加轮廓线
contours = ax.contour(X, Y, Z, zdir='z', offset=-2, cmap='viridis')ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('3D 表面图')# 添加颜色条
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()

3. 动画

from matplotlib.animation import FuncAnimation# 创建动画
fig, ax = plt.subplots(figsize=(8, 6))
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1.5, 1.5)x = np.linspace(0, 2*np.pi, 1000)
line, = ax.plot([], [], 'b-')def init():line.set_data([], [])return line,def animate(frame):y = np.sin(x + frame/10)line.set_data(x, y)return line,# 创建动画(这里只展示代码,实际运行需要保存或在支持的环境中显示)
anim = FuncAnimation(fig, animate, init_func=init, frames=100, interval=50, blit=True)# 保存动画
# anim.save('sine_wave.gif', writer='pillow')
plt.show()

实战案例

案例 1:股票价格分析图

# 模拟股票数据
dates = pd.date_range('2023-01-01', periods=100)
stock_price = 100 + np.cumsum(np.random.randn(100) * 2)
volume = np.random.randint(1000000, 5000000, 100)fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8), sharex=True)# 价格图
ax1.plot(dates, stock_price, 'b-', linewidth=2)
ax1.fill_between(dates, stock_price, alpha=0.3)
ax1.set_ylabel('价格 (元)')
ax1.set_title('股票价格走势图')
ax1.grid(True, alpha=0.3)# 成交量图
ax2.bar(dates, volume, color='gray', alpha=0.7)
ax2.set_ylabel('成交量')
ax2.set_xlabel('日期')
ax2.grid(True, alpha=0.3)plt.tight_layout()
plt.show()

案例 2:数据分析仪表盘

# 创建仪表盘布局
fig = plt.figure(figsize=(15, 10))
gs = GridSpec(3, 3, figure=fig, hspace=0.3, wspace=0.3)# 数据准备
np.random.seed(42)
categories = ['产品A', '产品B', '产品C', '产品D', '产品E']
sales = np.random.randint(50, 200, 5)
months = ['1月', '2月', '3月', '4月', '5月', '6月']
monthly_sales = np.random.randint(100, 500, (6, 5))# 1. 总销售额饼图
ax1 = fig.add_subplot(gs[0, :2])
ax1.pie(sales, labels=categories, autopct='%1.1f%%', startangle=90)
ax1.set_title('产品销售占比')# 2. 月度销售趋势
ax2 = fig.add_subplot(gs[0, 2])
for i, product in enumerate(categories):ax2.plot(months, monthly_sales[:, i], marker='o', label=product)ax2.set_title('月度销售趋势')ax2.legend(fontsize=8)ax2.grid(True, alpha=0.3)# 3. 销售额柱状图ax3 = fig.add_subplot(gs[1, :])x = np.arange(len(categories))width = 0.15for i, month in enumerate(months[:4]):ax3.bar(x + i*width, monthly_sales[i], width, label=month)ax3.set_xlabel('产品')ax3.set_ylabel('销售额')ax3.set_title('各产品月度销售对比')ax3.set_xticks(x + width * 1.5)ax3.set_xticklabels(categories)ax3.legend()ax3.grid(True, axis='y', alpha=0.3)# 4. 销售额热力图ax4 = fig.add_subplot(gs[2, :2])im = ax4.imshow(monthly_sales, cmap='YlOrRd', aspect='auto')ax4.set_xticks(np.arange(len(categories)))ax4.set_yticks(np.arange(len(months)))ax4.set_xticklabels(categories)ax4.set_yticklabels(months)ax4.set_title('销售额热力图')# 在热力图上显示数值for i in range(len(months)):for j in range(len(categories)):text = ax4.text(j, i, monthly_sales[i, j],ha="center", va="center", color="black")# 5. KPI 指标ax5 = fig.add_subplot(gs[2, 2])ax5.text(0.5, 0.7, '总销售额', ha='center', va='center', fontsize=14)ax5.text(0.5, 0.5, f'{np.sum(monthly_sales):,}', ha='center', va='center', fontsize=24, fontweight='bold', color='red')ax5.text(0.5, 0.3, '同比增长 +23.5%', ha='center', va='center', fontsize=12, color='green')ax5.set_xlim(0, 1)ax5.set_ylim(0, 1)ax5.axis('off')plt.suptitle('销售数据分析仪表盘', fontsize=16)plt.show()

常见问题与解决方案

1. 中文显示问题

# 解决方案1:设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows
# plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']  # macOS
plt.rcParams['axes.unicode_minus'] = False# 解决方案2:使用 FontProperties
from matplotlib.font_manager import FontProperties
font = FontProperties(fname='path/to/font.ttf')
plt.title('中文标题', fontproperties=font)

2. 图表大小和分辨率

# 设置图表大小
plt.figure(figsize=(12, 8))# 设置 DPI(分辨率)
plt.figure(dpi=150)# 保存高分辨率图片
plt.savefig('figure.png', dpi=300, bbox_inches='tight')

3. 图例位置调整

# 自动调整位置
plt.legend(loc='best')# 指定位置
plt.legend(loc='upper right')# 放在图表外部
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')

4. 坐标轴范围和刻度

# 设置坐标轴范围
plt.xlim(0, 10)
plt.ylim(-1, 1)# 设置刻度
plt.xticks(np.arange(0, 11, 2))
plt.yticks([-1, -0.5, 0, 0.5, 1])# 旋转刻度标签
plt.xticks(rotation=45)

总结与资源

学习要点回顾

  1. 基础概念:理解 Figure、Axes、Axis 等核心概念
  2. 绘图方式:掌握函数式和面向对象两种绘图方式
  3. 图表类型:熟练使用各种常见图表类型
  4. 样式美化:学会自定义图表样式和颜色
  5. 布局技巧:掌握多子图和复杂布局
  6. 高级功能:了解 3D 绘图、动画等高级特性

推荐资源

  1. 官方文档:matplotlib.org
  2. 示例库:Matplotlib Gallery
  3. 教程:
    • Matplotlib Tutorial
    • Python Data Science Handbook
  4. 相关库:
    • Seaborn:基于 Matplotlib 的统计图表库
    • Plotly:交互式图表库
    • Bokeh:Web 交互式可视化

最佳实践

  1. 选择合适的图表类型:根据数据特点和展示目的选择
  2. 保持简洁:避免过度装饰,突出数据本身
  3. 使用有意义的标签:确保轴标签、标题清晰明了
  4. 选择合适的颜色:考虑色盲用户,使用对比度高的配色
  5. 添加必要的说明:使用图例、注释等帮助理解

结语

Matplotlib 是 Python 数据可视化的基石,掌握它将为你的数据分析工作提供强大支持。通过本文的学习,相信你已经对 Matplotlib 有了全面的了解。记住,最好的学习方式是实践,多动手尝试不同的图表和参数,逐步提升你的可视化技能。

Happy plotting! 🎨📊

相关文章:

Matplotlib 完全指南:从入门到精通

前言 Matplotlib 是 Python 中最基础、最强大的数据可视化库之一。无论你是数据分析师、数据科学家还是研究人员,掌握 Matplotlib 都是必不可少的技能。本文将带你从零开始学习 Matplotlib,帮助你掌握各种图表的绘制方法和高级技巧。 目录 Matplotli…...

如何有效追踪需求的实现情况

有效追踪需求实现情况,需要清晰的需求定义、高效的需求跟踪工具、持续的沟通反馈机制,其中高效的需求跟踪工具尤为关键。 使用需求跟踪工具能确保需求实现进度可视化、提高团队协作效率,并帮助识别和管理潜在风险。例如,使用专业的…...

自动驾驶技术栈——DoIP通信协议

一、DoIP协议简介 DoIP,英文全称是Diagnostic communication over Internet Protocol,是一种基于因特网的诊断通信协议。 DoIP协议基于TCP/IP等网络协议实现了车辆电子控制单元(ECU)与诊断应用程序之间的通信,常用于汽车行业的远程诊断、远…...

C++ 与 Go、Rust、C#:基于实践场景的语言特性对比

目录 ​编辑 一、语法特性对比 1.1 变量声明与数据类型 1.2 函数与控制流 1.3 面向对象特性 二、性能表现对比​编辑 2.1 基准测试数据 在计算密集型任务(如 10⁷ 次加法运算)中: 在内存分配测试(10⁵ 次对象创建&#xf…...

Docker 中的 DNS 解析机制

在 Docker 容器化环境中,网络连接是至关重要的,而 DNS(Domain Name System,域名系统)解析则是网络通信的基础。容器需要能够解析内部服务名称以及外部域名,以便与其他容器或外部世界进行交互。理解 Docker 如何处理 DNS 请求,可以帮助我们更好地配置和排查网络问题。 D…...

数字化工厂中央控制室驾驶舱系统 API接口文档

数字化工厂中央控制室驾驶舱系统 API接口文档 本文档详细描述了数字化工厂中央控制室驾驶舱系统的API接口规范,包括中端服务提供的数据接口和算法接口。 1. 通用规范 1.1 基础URL 后端服务: http://localhost:8000中端服务数据API: http://localhost:8001中端服…...

如何更改默认字体:ONLYOFFICE 协作空间、桌面编辑器、文档测试示例

在处理办公文件时,字体对提升用户体验至关重要。本文将逐步指导您如何在 ONLYOFFICE 协作空间、桌面应用及文档测试示例中自定义默认字体,以满足个性化需求,更好地掌控文档样式。 关于 ONLYOFFICE ONLYOFFICE 是一个国际开源项目&#xff0c…...

设计模式之工厂模式(二):实际案例

设计模式之工厂模式(一) 在阅读Qt网络部分源码时候,发现在某处运用了工厂模式,而且编程技巧也用的好,于是就想分享出来,供大家参考,理解的不对的地方请多多指点。 以下是我整理出来的类图: 关键说明&#x…...

基于VeRL源码深度拆解字节Seed的DAPO

1. 背景与现状:从PPO到GRPO的技术演进 1.1 PPO算法的基础与局限 Proximal Policy Optimization(PPO)作为当前强化学习领域的主流算法,通过重要性采样比率剪裁机制将策略更新限制在先前策略的近端区域内,构建了稳定的…...

zst-2001 历年真题 软件工程

软件工程 - 第1题 b 软件工程 - 第2题 c 软件工程 - 第3题 c 软件工程 - 第4题 b 软件工程 - 第5题 b 软件工程 - 第6题 0.未完成:未执行未得到目标。1.已执行:输入-输出实现支持2.已管理:过程制度化,项目遵…...

WSL 安装 Debian 12 后,Linux 如何安装 redis ?

在 WSL 的 Debian 12 上安装 Redis 的步骤如下: 1. 更新系统包列表 sudo apt update && sudo apt upgrade -y2. 安装 Redis sudo apt install redis-server -y3. 启动 Redis 服务 sudo systemctl start redis4. 设置开机自启 sudo systemctl enable red…...

在Ubuntu系统下编译OpenCV 4.8源码

编译OpenCV 4.8源码可以为你提供更高的灵活性和优化性能,适合特定的需求。以下是详细的步骤,指导你在Ubuntu系统上编译和安装OpenCV 4.8。 1. 安装必要的依赖 首先,确保你的系统已经安装了所有必要的依赖项。 sudo apt update sudo apt in…...

Arduino快速入门

Arduino快速入门指南 一、硬件准备 选择开发板: 推荐使用 Arduino UNO(兼容性强,适合初学者),其他常见型号包括NANO(体积小)、Mega(接口更多)。准备基础元件&#xff1a…...

基于WSL用MSVC编译ffmpeg7.1

在windows平台编译FFmpeg,网上的大部分资料都是推荐用msys2mingw进行编译。在win10平台,我们可以采用另一种方式,即wslmsvc 实现window平台的ffmpeg编译。 下面将以vs2022ubuntu22.04 为例,介绍此方法 0、前期准备 安装vs2022 &…...

java命令行打包class为jar并运行

1.创建无包名类: 2.添加依赖jackson 3.引用依赖包 4.命令编译class文件 生成命令: javac -d out -classpath lib/jackson-core-2.13.3.jar:lib/jackson-annotations-2.13.3.jar:lib/jackson-databind-2.13.3.jar src/UdpServer.java 编译生成class文件如下 <...

vue注册用户使用v-model实现数据双向绑定

定义数据模型 Login.vue //定义数据模型 const registerData ref({username: ,password: ,confirmPassword: })使用 v-model 实现数据模型的key与注册表单中的元素之间的双向绑定 <!-- 注册表单 --><el-form ref"form" size"large" autocompl…...

Android学习之响应式编程

本篇基于DeepSeek 搜索结果修改。 一、响应式编程基础认知 1.1 为什么需要响应式编程&#xff1f; 在传统的Android开发中&#xff0c;我们经常会遇到以下痛点&#xff1a; // 传统方式处理数据变化 button.setOnClickListener {// 触发网络请求fetchDataFromNetwork { res…...

如何使用极狐GitLab 软件包仓库功能托管 helm chart?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 软件包库中的 Helm charts (BASIC ALL) WARNING:Helm chart 库正在开发中&#xff0c;由于功能有限&#xff0c;尚未准备好用…...

中国古代史4

东汉 公元25年&#xff0c;刘秀建立东汉&#xff0c;定都洛阳&#xff0c;史称光武中兴 白马寺&#xff1a;汉明帝时期建立&#xff0c;是佛教传入中国后兴建的第一座官办寺院&#xff0c;有中国佛教的“祖庭”和“释源”之称&#xff0c;距今1900多年历史 班超—西域都护—投…...

Nacos源码—8.Nacos升级gRPC分析六

大纲 7.服务端对服务实例进行健康检查 8.服务下线如何注销注册表和客户端等信息 9.事件驱动架构源码分析 一.处理ClientChangedEvent事件 也就是同步数据到集群节点&#xff1a; public class DistroClientDataProcessor extends SmartSubscriber implements DistroDataSt…...

基于Vue3.0的高德地图api教程005:实现绘制线并编辑功能

文章目录 6、绘制多段线6.1 绘制多段线6.1.1 开启绘制功能6.1.2 双击完成绘制6.1.3 保存到数据库6.2 修改多段线6.2.1 点击线,进入编辑模式6.2.2 编辑线6.3 完整代码6、绘制多段线 6.1 绘制多段线 6.1.1 开启绘制功能 实现代码: const changeSwitchDrawPolyline = ()=>…...

SpringBoot 自动装配原理 自定义一个 starter

目录 1、pom.xml 文件1.1、parent 模块1.1.1、资源文件1.1.1.1、resources 标签说明1.1.1.2、从 Maven 视角&#xff1a;资源处理全流程​ 1.1.2、插件 1.2、dependencies 模块 2、启动器3、主程序3.1、SpringBootApplication 注解3.2、SpringBootConfiguration 注解3.2.1、Con…...

【C++进阶篇】多态

深入探索C多态&#xff1a;静态与动态绑定的奥秘 一. 多态1.1 定义1.2 多态定义及实现1.2.1 多态构成条件1.2.1.1 实现多态两个必要条件1.2.1.2 虚函数1.2.1.3 虚函数的重写/覆盖1.2.1.4 协变1.2.1.5 析构函数重写1.2.1.6 override和final关键字1.2.1.7 重载/重写/隐藏的对⽐ 1…...

Redis 基础详解:从入门到精通

在当今互联网应用开发领域&#xff0c;数据存储与处理的性能和效率至关重要。Redis&#xff08;Remote Dictionary Server&#xff09;作为一款开源的、基于内存的键值存储系统&#xff0c;凭借其出色的性能和丰富的功能&#xff0c;被广泛应用于数据库、缓存、消息中间件等场景…...

Android Studio的jks文件

在 Android Studio 中&#xff0c;.jks 文件是 Java KeyStore&#xff08;Java 密钥库&#xff09;文件的一种&#xff0c;用于存储和管理用于签署 Android 应用程序的数字证书和私钥。 一、.jks 文件的作用 在 Android 开发中&#xff0c;.jks 文件主要用于&#xff1a; 应用…...

互联网大厂Java面试实战:从Spring Boot到微服务的技术问答与解析

&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通 &#x1f601; 2. 毕业设计专栏&#xff0c;毕业季咱们不慌忙&#xff0c;几百款毕业设计等你选。 ❤️ 3. Python爬虫专栏…...

《AI大模型应知应会100篇》第60篇:Pinecone 与 Milvus,向量数据库在大模型应用中的作用

第60篇&#xff1a;Pinecone与Milvus&#xff0c;向量数据库在大模型应用中的作用 摘要 本文将系统比较Pinecone与Milvus两大主流向量数据库的技术特点、性能表现和应用场景&#xff0c;提供详细的接入代码和最佳实践&#xff0c;帮助开发者为大模型应用选择并优化向量存储解…...

HDFS客户端操作

一、命令行工具操作 HDFS 命令行工具基于 hdfs dfs 命令&#xff0c;语法类似 Linux 文件操作。 1. 文件操作 bash # 创建目录 hdfs dfs -mkdir /test# 递归创建多级目录 hdfs dfs -mkdir -p /test/data/logs# 上传本地文件到 HDFS hdfs dfs -put local_file.txt /test/# 从…...

MySQL--视图详解

介绍 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询中使用的表&#xff08;称为基表&#xff09;&#xff0c;并且是在使用视图时动态生成的。 简而言之&#xff1a;视图只保存了查询的…...

Java学习手册:客户端负载均衡

一、客户端负载均衡的概念 客户端负载均衡是指在客户端应用程序中&#xff0c;根据一定的算法和策略&#xff0c;将请求分发到多个服务实例上。与服务端负载均衡不同&#xff0c;客户端负载均衡不需要通过专门的负载均衡设备或服务&#xff0c;而是直接在客户端进行请求的分发…...