Python | Matplotlib | 不完全总结

news2024/11/20 4:37:10

本文对 Matplotlib 的用法进行不完全总结。

更新: 2023 / 1 / 4


Python | Matplotlib | 不完全总结

  • ImageMagick
  • 导库
  • 画布
    • 创建多子图
    • 动图
  • 2D
    • 柱状图
      • 基本:水平 / 垂直柱形
      • 主题:颜色、文字、网格线
      • 动图
    • 线图
      • 基本
      • 动图
  • 3D
    • 柱状图
      • 基本
    • 线图
      • 动图
  • 参考链接

ImageMagick

参考这里 1


导库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import matplotlib.animation as animation

画布

创建多子图

  1. 创建图片对象及坐标轴,自定义图片大小
# setup the figure and axes
fig = plt.figure(figsize=(8, 3))
ax1 = fig.add_subplot(121, projection='3d')
ax2 = fig.add_subplot(122, projection='3d')

plt.show()

其中,

    def add_subplot(self, *args, **kwargs):
        """
        Add an `~.axes.Axes` to the figure as part of a subplot arrangement.

        Call signatures::

           add_subplot(nrows, ncols, index, **kwargs)
           add_subplot(pos, **kwargs)
           add_subplot(ax)
           add_subplot()

        Parameters
        ----------
		...
        projection : {None, 'aitoff', 'hammer', 'lambert', 'mollweide', \
'polar', 'rectilinear', str}, optional
            The projection type of the subplot (`~.axes.Axes`). *str* is the
            name of a custom projection, see `~matplotlib.projections`. The
            default None results in a 'rectilinear' projection.

动图

参考这里 2

将使用 matplotlib.animation 中的 FuncAnimation
FuncAnimation 通过重复调用函数(在画布上绘制)来制作动画。

语法如下,

def __init__(self, fig, func, frames=None, init_func=None, fargs=None,
                 save_count=None, *, cache_frame_data=True, **kwargs):

Animation 是一个幻象:在每一个 frame 中,绘制的对象都使用 update 函数来更新。所有的 frame 都在最后被保存为一个文件(要么是 gif,要么是 mp4)。


2D

参考这里 3


柱状图

准备数据,数据集参考此处的网址 4,将其数据集保存为 3d.csv
选取出 year=2018value 按倒序排列的 df 的前 10 行,

df = pd.read_csv('3d.csv', usecols=['name', 'group', 'year', 'value'])
current_year = 2018
df = df[df['year'].eq(current_year)].sort_values(by='value', ascending=True).tail(10)
df = df[::-1]

#              name          group  year    value
# 6045        Tokyo           Asia  2018  38194.2
# 1324        Delhi          India  2018  27890.0
# 5547     Shanghai           Asia  2018  25778.6
# 689       Beijing           Asia  2018  22674.2
# 3748       Mumbai          India  2018  22120.0
# 5445    Sao Paulo  Latin America  2018  21697.8
# 3574  Mexico City  Latin America  2018  21520.4
# 4679        Osaka           Asia  2018  20409.0
# 1195        Cairo    Middle East  2018  19849.6
# 1336        Dhaka           Asia  2018  19632.6

print(df['name'].shape, df['name'].unique())
# (10,) ['Tokyo' 'Delhi' 'Shanghai' 'Beijing' 'Mumbai' 'Sao Paulo' 'Mexico City'
#  'Osaka' 'Cairo' 'Dhaka']

上面经筛选后所得的 dfname 为唯一值的有 10 个,分别为 ['Tokyo' 'Delhi' 'Shanghai' 'Beijing' 'Mumbai' 'Sao Paulo' 'Mexico City' 'Osaka' 'Cairo' 'Dhaka']


基本:水平 / 垂直柱形

  • 横向

使用 ax.barh(x, y) 来绘制水平柱状图,

fig, ax = plt.subplots(figsize=(15, 8))
ax.barh(df['name'], df['value'])
plt.show()

效果图如下所示,
在这里插入图片描述

  • 竖向

使用 ax.bar(x, y) 来绘制垂直柱状图,

fig, ax = plt.subplots(figsize=(15, 8))
ax.bar(df['name'], df['value'])
plt.show()

效果图如下所示,
在这里插入图片描述


主题:颜色、文字、网格线

  • 颜色
    使用 ax.barh(color=[]) 来定义 bar 的颜色,语法如下:
    def barh(self, x=None, y=None, **kwargs):
        """
        Make a horizontal bar plot.

        A horizontal bar plot is a plot that presents quantitative data with
        rectangular bars with lengths proportional to the values that they
        represent. A bar plot shows comparisons among discrete categories. One
        axis of the plot shows the specific categories being compared, and the
        other axis represents a measured value.
        """
        return self(kind="barh", x=x, y=y, **kwargs)

在示例中,

fig, ax = plt.subplots(figsize=(15, 8))

colors = dict(zip(
    ['India','Europe','Asia','Latin America','Middle East','North America','Africa'],
    ['#adb0ff', '#ffb3ff', '#90d595', '#e48381', '#aafbff', '#f7bb5f', '#eafb50']
))
group_lk = df.set_index('name')['group'].to_dict()

ax.barh(df['name'], df['value'], color=[colors[group_lk[x]] for x in df['name']])

plt.show()

效果图如下所示,
在这里插入图片描述

  • 文字

使用 ax.text 来添加文字,语法如下:

    def text(self, x, y, s, fontdict=None, **kwargs):
        """
        Add text to the Axes.

        Add the text *s* to the Axes at location *x*, *y* in data coordinates.

        Parameters
        ----------
        x, y : float
            The position to place the text. By default, this is in data
            coordinates. The coordinate system can be changed using the
            *transform* parameter.

        s : str
            The text.

        fontdict : dict, default: None
            A dictionary to override the default text properties. If fontdict
            is None, the defaults are determined by `.rcParams`.

在示例中,

fig, ax = plt.subplots(figsize=(15, 8))

colors = dict(zip(
    ['India','Europe','Asia','Latin America','Middle East','North America','Africa'],
    ['#adb0ff', '#ffb3ff', '#90d595', '#e48381', '#aafbff', '#f7bb5f', '#eafb50']
))
group_lk = df.set_index('name')['group'].to_dict()

ax.barh(df['name'], df['value'], color=[colors[group_lk[x]] for x in df['name']])

for i, (value, name) in enumerate(zip(df['value'], df['name'])):
    dx = df['value'].max() / 200
    ax.text(value-dx, i,     name,            ha='right', size=10)  # Tokyo: name
    ax.text(value-dx, i-.25, group_lk[name],  ha='right', size=10)  # Asia: group name
    ax.text(value+dx, i,     value,           ha='left', size=10)   # 38194.2: value

ax.text(1, 0.4, f'Year: {current_year}', transform=ax.transAxes, size=30, ha='right')

plt.show()

效果图如下所示,
在这里插入图片描述

  • 复合效果
fig, ax = plt.subplots(figsize=(15, 8))

colors = dict(zip(
    ['India','Europe','Asia','Latin America','Middle East','North America','Africa'],
    ['#adb0ff', '#ffb3ff', '#90d595', '#e48381', '#aafbff', '#f7bb5f', '#eafb50']
))
group_lk = df.set_index('name')['group'].to_dict()

def draw_barchart(df, year):
    df = df[df['year'].eq(year)].sort_values(by='value', ascending=True).tail(10)
    df = df[::-1]
    ax.clear()
    ax.barh(df['name'], df['value'], color=[colors[group_lk[x]] for x in df['name']])
    dx = df['value'].max() / 200
    for i, (value, name) in enumerate(zip(df['value'], df['name'])):
        ax.text(value - dx, i, name, size=14, weight=600, ha='right', va='bottom')
        ax.text(value - dx, i - .25, group_lk[name], size=10, color='#444444', ha='right', va='baseline')
        ax.text(value + dx, i, f'{value:,.0f}', size=14, ha='left', va='center')
    # ... polished styles

    ax.text(0, 1.1, 'The most populous cities in the world in 2018',
            transform=ax.transAxes, size=24, weight=600, ha='left')
    ax.text(0, 1.06, 'Population (thousands)', transform=ax.transAxes, size=12, color='#777777')
    ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))
    ax.xaxis.set_ticks_position('top')
    ax.tick_params(axis='x', colors='#777777', labelsize=12)
    ax.set_yticks([])
    # ax.margins(0, 0.01)
    ax.grid(which='major', axis='x', linestyle='-.')
    ax.set_axisbelow(True)
    ax.text(1, 0.4, year, transform=ax.transAxes, color='#777777', size=46, ha='right', weight=800)
    ax.text(1.1, 0, 'by @XS', transform=ax.transAxes, ha='right',
            color='#777777', bbox=dict(facecolor='white', alpha=0.8, edgecolor='white'))
    plt.box(False)

draw_barchart(df, 2018)

plt.show()

效果图如下所示,

在这里插入图片描述

动图

为了设置动画,我们将使用 matplotlib.animation 中的 FuncAnimationFuncAnimation 通过重复调用函数(在画布上绘制)来制作动画。

在我们的例子中,该函数将是 draw_barchart。我们还使用 frame,这个参数接受你想要运行的函数的值 —— 我们将从 1968 年运行到 2018 年。

  • animation

使用 animation 来添加回调函数,

def draw_barchart(year):
    df = pd.read_csv('3d.csv', usecols=['name', 'group', 'year', 'value'])

    colors = dict(zip(
        ['India', 'Europe', 'Asia', 'Latin America', 'Middle East', 'North America', 'Africa'],
        ['#adb0ff', '#ffb3ff', '#90d595', '#e48381', '#aafbff', '#f7bb5f', '#eafb50']
    ))
    group_lk = df.set_index('name')['group'].to_dict()

    df = df[df['year'].eq(year)].sort_values(by='value', ascending=True).tail(10)
    df = df[::-1]
    ax.clear()
    ax.barh(df['name'], df['value'], color=[colors[group_lk[x]] for x in df['name']])
    dx = df['value'].max() / 200
    for i, (value, name) in enumerate(zip(df['value'], df['name'])):
        ax.text(value - dx, i, name, size=14, weight=600, ha='right', va='bottom')
        ax.text(value - dx, i - .25, group_lk[name], size=10, color='#444444', ha='right', va='baseline')
        ax.text(value + dx, i, f'{value:,.0f}', size=14, ha='left', va='center')

    ax.text(0, 1.1, 'The most populous cities in the world in 2018',
            transform=ax.transAxes, size=24, weight=600, ha='left')
    ax.text(0, 1.06, 'Population (thousands)', transform=ax.transAxes, size=12, color='#777777')
    ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))
    ax.xaxis.set_ticks_position('top')
    ax.tick_params(axis='x', colors='#777777', labelsize=12)
    # ax.set_yticks([])
    ax.margins(0, 0.01)
    ax.grid(which='major', axis='x', linestyle='-.')
    ax.set_axisbelow(True)
    ax.text(1, 0.4, year, transform=ax.transAxes, color='#777777', size=46, ha='right', weight=800)
    ax.text(1.1, 0, 'by @XS', transform=ax.transAxes, ha='right',
            color='#777777', bbox=dict(facecolor='white', alpha=0.8, edgecolor='white'))
    plt.box(False)

fig, ax = plt.subplots(figsize=(15, 8))
animator = animation.FuncAnimation(fig, draw_barchart, repeat_delay=100, frames=range(1968, 2019),)
animator.save(filename='1.gif', writer='imagemagick')

效果图如下所示,

在这里插入图片描述


线图

准备数据,如下所示:

# fake data
x = np.linspace(0, 10)
# [ 0.          0.20408163  0.40816327  0.6122449   0.81632653  1.02040816
#   1.2244898   1.42857143  1.63265306  1.83673469  2.04081633  2.24489796
#   2.44897959  2.65306122  2.85714286  3.06122449  3.26530612  3.46938776
#   3.67346939  3.87755102  4.08163265  4.28571429  4.48979592  4.69387755
#   4.89795918  5.10204082  5.30612245  5.51020408  5.71428571  5.91836735
#   6.12244898  6.32653061  6.53061224  6.73469388  6.93877551  7.14285714
#   7.34693878  7.55102041  7.75510204  7.95918367  8.16326531  8.36734694
#   8.57142857  8.7755102   8.97959184  9.18367347  9.3877551   9.59183673
#   9.79591837 10.        ]

y = np.sin(x)
# [ 0.          0.20266794  0.39692415  0.57470604  0.72863478  0.85232157
#   0.94063279  0.98990308  0.99808748  0.96484631  0.89155923  0.78126802
#   0.63855032  0.46932961  0.2806294   0.08028167 -0.12339814 -0.32195632
#  -0.50715171 -0.67129779 -0.80758169 -0.91034694 -0.97532829 -0.99982867
#  -0.9828312  -0.92504137 -0.82885774 -0.6982724  -0.53870529 -0.35677924
#  -0.16004509  0.04333173  0.24491007  0.43632343  0.6096272   0.75762842
#   0.8741843   0.9544572   0.99511539  0.99447137  0.95255185  0.8710967
#   0.75348673  0.60460332  0.43062587  0.23877532  0.0370144  -0.16628279
#  -0.36267843 -0.54402111]

x 为横坐标,y 为纵坐标。


基本

使用 ax.plot(x, y) 来绘制线图,

fig, ax = plt.subplots()
line, = ax.plot(x, y)

plt.show()

效果图如下所示,
在这里插入图片描述

动图

x = np.linspace(0, 10)
y = np.sin(x)

fig, ax = plt.subplots()
line, = ax.plot(x, y)

def update(num, x, y, line):
    line.set_data(x[:num], y[:num])
    return line,

ani = animation.FuncAnimation(fig, update, len(x), interval=100,
                              fargs=[x, y, line], blit=True)
ani.save('1.gif', writer='imagemagick', fps=60)
  • 前两个参数只是 fig(图形对象)和 update(更新每一帧中绘制对象的函数)。
  • 传递给构造函数的第三个参数是 len(x),它指示数据点的总数(回想一下 xy 是列表)。这正是传递给 updatenum 参数!在每一帧中,一个从 1len(x) 的值被赋予更新函数以生成不同的图。这些情节构成了 Animation 的 “幻觉”。
  • 参数 interval 是以毫秒为单位的帧之间的延迟,在这种情况下设置为 100 ms
  • 参数 fargs 是一个包含传递给更新函数的其他参数(除了 num )的元组,它是 xyline 的顺序相同的元组。
  • 最后一个参数 blit 设置为 True 以优化结果。

FuncAnimation 的构造函数中还有很多其他的参数,你可以查看 FuncAnimation 的文档了解更多。

最后调用 FuncAnimation 对象的 save 方法保存动画。在这里,我们使用 gif 生成器 imagemagickani 保存到 gif 文件。在这里,我们将帧率 fps 设置为 60

效果图如下,
在这里插入图片描述
还有另外一个例子,效果如下所示,源码参考这里 5
在这里插入图片描述


3D

参考这里 62


柱状图

参考这里 7

准备数据,如下所示:

# fake data
_x = np.arange(4)
_y = np.arange(5)
_xx, _yy = np.meshgrid(_x, _y)
x, y = _xx.ravel(), _yy.ravel()

top = x + y
bottom = np.zeros_like(top)
width = depth = 1

基本

使用 ax.bar3d() 画出相应柱状图,

ax1.bar3d(x, y, bottom, width, depth, top, shade=True)
ax1.set_title('Shaded')

plt.savefig('3D-bar-example.png')
plt.show()

效果图如下所示,
在这里插入图片描述


线图

参考这里 8


动图

# Fixing random state for reproducibility
np.random.seed(19680801)


def random_walk(num_steps, max_step=0.05):
    """Return a 3D random walk as (num_steps, 3) array."""
    start_pos = np.random.random(3)
    steps = np.random.uniform(-max_step, max_step, size=(num_steps, 3))
    walk = start_pos + np.cumsum(steps, axis=0)
    return walk


def update_lines(num, walks, lines):
    for line, walk in zip(lines, walks):
        # NOTE: there is no .set_data() for 3 dim data...
        line.set_data(walk[:num, :2].T)
        line.set_3d_properties(walk[:num, 2])
    return lines


# Data: 40 random walks as (num_steps, 3) arrays
num_steps = 30
walks = [random_walk(num_steps) for index in range(40)]

# Attaching 3D axis to the figure
fig = plt.figure()
ax = fig.add_subplot(projection="3d")

# Create lines initially without data
lines = [ax.plot([], [], [])[0] for _ in walks]

# Setting the axes properties
ax.set(xlim3d=(0, 1), xlabel='X')
ax.set(ylim3d=(0, 1), ylabel='Y')
ax.set(zlim3d=(0, 1), zlabel='Z')

# Creating the Animation object
ani = animation.FuncAnimation(
    fig, update_lines, num_steps, fargs=(walks, lines), interval=100)

plt.show()

效果图如下,

在这里插入图片描述




参考链接


  1. ImageMagick的基本使用 ↩︎

  2. Beginners’ Guide to Animate Plots with matplotlib.animation ↩︎ ↩︎

  3. Bar Chart Race in Python with Matplotlib ↩︎

  4. 示例数据集 ↩︎

  5. 一步一步教你用 Matplotlib 保存 GIF 动图 ↩︎

  6. 3D animation using matplotlib ↩︎

  7. Demo of 3D bar charts ↩︎

  8. Animated 3D random walk ↩︎

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

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

相关文章

Web文件操作:上传与下载

文件上传与下载文件上传文件上传的实现表结构设计UploadFileServiceImpl的实现上传文件遇到的问题与解决文件下载文件上传 文件上传的表单中,需要注意的三个地方: 1.表单的请求方式必须为post; 2.表单域必须有file类型; 3.表单的e…

活动星投票奋斗青春,使命必达网络评选微信的投票方式线上免费投票

“奋斗青春,使命必达”网络评选投票_如何进行投票推广_参与投票活动_小程序的投票发展现在来说,公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序,网友们就可以通过手机拍视频上传视频参加活动,而短视频微信投票评…

英伟达528.02驱动发布支持4070 Ti!GFE新增9款游戏

自GTX 4070 Ti显卡发售后,英伟达便随即发布了支持该新显卡的Game Ready 528.02驱动,同时为《战意》和《达喀尔沙漠拉力赛》两款新游戏带来DLSS 3的支持,DLSS 3的队伍再度壮大! 驱动人生现已支持英伟达Game Ready 528.02驱动&…

围绕http请求头中Referer展开的一些知识

1. 什么是referer&#xff1f; <点击以获取跳转信息 >跳转过去记得按一下f12点击网络请求详情&#xff0c;再刷新一下&#xff0c;就可以看见referer字段&#xff1a; 当我们尝试在浏览器内部直接输入这熟悉的网址时&#xff0c;此时刷新后则是这样一番景象&#xff1…

C++类和对象的基本概念

目录 1.c和c中struct的区别 2.类的封装 3.类的访问权限 1.c和c中struct的区别 c语言中结构体中不能存放函数,也就是数据(属性)和行为(方 法)是分离的 c中结构体中是可以存放函数的,也就是数据(属性)和行为 (方法)是封装在一起的 #define _CRT_SECURE_NO_WARNINGS #include …

基于Python tensorflow机器学习的人脸识别登陆系统源码、人脸注册系统源码

face_login 代码下载地址&#xff1a;基于Python tensorflow机器学习的人脸识别登陆系统源码、人脸注册系统源码 介绍 本项目基于tensorflow机器学习&#xff0c;实现web端人脸识别登陆&#xff0c;人脸注册。 提供手机端页面(face_login_app)和网页端页面(vue_element-adm…

JUC并发编程学习笔记(六)线程池及分支合并框架

10 ThreadPool 线程池&#xff08;重点&#xff09; 10.1 线程池简介 回顾以前的连接池概念 连接池是创建和管理一个连接的缓冲池的技术&#xff0c;这些连接准备好被任何需要它们的线程使用 线程池&#xff08;英语&#xff1a;thread pool&#xff09;&#xff1a;一种线程…

实时数仓,为什么不可代替?

什么是实时数据仓库&#xff1f;它有哪些不可替代之处&#xff1f; 大数据时代中&#xff0c;数据仓库解决了商业智能分析过程中的数据管理问题&#xff0c;但是存在烟囱式、冗余高的弊端 随着商业智能的兴起和数据时代的到来&#xff0c;越来越多的企业开始汇总、整合和分析自…

ArcGIS基础实验操作100例--实验62点、线、面状符号

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验62 点、线、面状符号 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&…

C/C++中二级指针传递参数【个人遇到内存值发生改变现象的记录及相关修正方法】

目录 0、前言 1、二级指针传参奇怪现象 2、分析 3、解决方法 0、前言 在c/c中&#xff0c;时常会使用到主调函数通过参数去获取被调函数中的数值情况。针对这种情况&#xff0c;我前面也写过C/C主调函数从被调函数中获取&#xff08;各种类型&#xff09;数据内容方式的梳理…

【ONE·R || 两次作业(一):R基础数据处理】

总言 两次作业汇报&#xff1a;其一。    文章目录总言1、作业一&#xff1a;1.1 、任务一&#xff1a;各项数据建立1.2 、任务二&#xff1a;去除缺失值1.3 、任务三&#xff1a;返回性别为女生&#xff0c;年龄<20的学生及成绩1.4、 任务四&#xff1a;统计性别为女生&a…

【Python百日进阶-数据分析】Day149 - plotly直方图:go.histogram()

文章目录4.2 利用 go.Histogram 的直方图4.2.1 基本直方图4.2.2 归一化直方图4.2.3 水平直方图4.2.4 叠加直方图4.2.5 堆叠直方图4.2.6 风格直方图4.2.7 直方图条形文本4.2.8 累积直方图4.2.9 指定聚合函数4.2.10 自定义分箱4.2.11 在直方图之间共享 bin4.2.12 按类别顺序排序直…

深度学习(一)-环境安装

前言&#xff1a; 最近电脑重装了下系统&#xff0c;然后所有环境啥的都得重新配置一遍&#xff0c;刚好趁着这个时间记录下整个环境的配置过程 注意&#xff1a;本文记录的仅为window系统的配置过程! 一、Anaconda安装及相关配置 Anaconda下载地址&#xff0c;根据需要选择需…

TypeScript 中 Class incorrectly implements interface 错误

当一个类在没有指定接口上定义的所有属性和方法的情况下实现接口时&#xff0c;会发生错误“Class incorrectly implements interface”。 要解决该错误&#xff0c;需要确保定义并键入接口的所有必需属性和方法。 下面是产生上述错误的示例代码 interface Employee {id: num…

Linux学习记录——유 gcc/g++基础知识

文章目录一、程序翻译二、gcc使用1、-o2、预处理-E3、编译-S4、汇编-c5、链接三、库四、库的部分实际操作五、Linux项目自动化构建工具 make/Makefile1、规则一、程序翻译 C语言中&#xff0c;写出代码后&#xff0c;编译器会经过四个阶段才会生成可执行文件。 预处理&#x…

计算数组中元素的加权平均值 numpy.average()

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】计算数组中元素的加权平均值numpy.average()[太阳]选择题对于以下python代码最后输出的结果是?import numpy as npa np.array([1, 2, 3, 4])print("【显示】a")print(a)print("…

如何进行Java 单元测试

什么是单元测试 维基百科中是这样描述的&#xff1a;在计算机编程中&#xff0c;单元测试又称为模块测试&#xff0c;是针对程序模块来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中&#xff0c;一个单元就是单个程序、函数、过程等&#xff1b;…

架构师课程笔记day04——Nginx

大纲 1.从单体到集群过渡 2.Nginx 2.1什么是nginx 2.2常见服务器 2.3nginx在架构中所处位置 2.4使用率&#xff0c;性能&#xff0c;市场占有率等信息 2.5正反向代理啥意思 正向代理 反向代理 示例 2.6安装步骤 Nginx安装步骤 常用命令等 2.7请求链路 2.8进程模型 通用模型 …

JS面向对象基础(原型链、构造函数、new关键字、寄生组合继承、对象元编程)

这篇文章将简单介绍面向对象的基本概念&#xff0c;以及JS语言是如何支持面向对象这种编程范式的&#xff0c;最后还会讲解一些对象元编程的基础知识。通过阅读这篇文章&#xff0c;你可以了解JS中的原型链机制&#xff0c;new和构造函数的原理、寄生组合继承的实现以及对象元编…

李群李代数学习笔记

前言 因为论文学习的需要&#xff0c;入门了一下李群和李代数&#xff0c;觉得B站的这个视频讲得不错&#xff1a;视频地址为机器人学——李群、李代数快速入门&#xff0c;这里记录一下。 前言引入&#xff1a;一些常见的例子S1S^1S1&#xff1a;单位复数SO(2)SO(2)SO(2)&…