Matplotlib系列(五):三维绘图

Matplotlib系列目录


文章目录

  • 一、 简介
  • 二、 思维导图
  • 三、 Matplotlib三维图形
    • 1. 绘制3d图形
    • 2. 基本三维图像
      • 2.1 3d折线图
      • 2.2 3d散点图
      • 2.3 3d柱形图
      • 2.4 3d火柴图
      • 2.5 3d误差图
    • 3. 三维曲面
      • 3.1 3d网格面
      • 3.2 3d曲面
      • 3.3 3d非结构化三角网格
      • 3.4 3d非结构化网格等值线
    • 4. 3d标量矢量场
      • 4.1 3d等高线
      • 4.2 3d矢量图
    • 5. 其他
      • 5.1 3d文本
      • 5.2 图形旋转
      • 5.3 三维体元素
  • 参考文章


一、 简介

‎matplotlib现在已经支持很多3D绘图功能了,并且也非常好用。

弥补了早期版本不支持3D绘图的缺憾。

Matplotlib系列将Matplotlib的知识和重点API,编制成思维导图和重点笔记形式,方便记忆和回顾,也方便应用时参考,初学者也可以参考逐步深入学习。

二、 思维导图

matplotlib三维绘图


三、 Matplotlib三维图形

1. 绘制3d图形

方法1:子图设置projection为3d

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()ax = fig.add_subplot(projection='3d')

方法2:自行创建Axes3D对象

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()ax = Axes3D(fig)

三维绘图示例

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系
# from mpl_toolkits.mplot3d import Axes3D
# ax = Axes3D(fig)   #创建3d坐标系的第二种方法theta = np.linspace(-2 * np.pi, 2 * np.pi, 100)
x = np.sin(theta)
y = np.cos(theta)
z = np.linspace(-2, 2, 100)ax3d.plot(x,y,z)  #绘制3d螺旋线plt.show()

简单示例

2. 基本三维图像

2.1 3d折线图

在三维坐标系可以用plot函数绘制三维的线条,还可以绘制平面曲线。

  • ax3d.plot(x,y,z):绘制三维曲线。
    • zdir参数绘制平面图
      • ax3d.plot(x,y,zdir=‘z’):在z=0的xy平面绘制曲线
      • ax3d.plot(x,y,2,zdir=‘z’):在z=2的xy平面绘制曲线
      • ax3d.plot(y,z,zdir=‘x’):在x=0的yz平面绘制曲线。zdir也可以为’y’
      • ax3d.plot(y,z,2,zdir=‘x’):在x=2的yz平面绘制曲线
    • 其他参数与二维坐标系ax.plot函数一致。注意三维plot不支持fmt参数。

ax3d.plot3D()与ax3d.plot完全相同。

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系theta = np.linspace(-2 * np.pi, 2 * np.pi, 100)
x = np.sin(theta)
y = np.cos(theta)
z = np.linspace(0.5, 1.5, 100)ax3d.plot(x,y,z)           #绘制3d螺旋线
ax3d.plot(x,y,zdir='z')    #绘制x,y平面图形
ax3d.plot(x,y,2,zdir='z')  #绘制x,y平面图形指定高度z为2
ax3d.plot(y,z,zdir='x')    #绘制y,z平面图
ax3d.plot(y,z,-2,zdir='x') #绘制y,z平面图,指定x坐标值为-2plt.show()

3d折线图

2.2 3d散点图

在三维坐标系可以用scatter函数绘制三维的散点图,还可以绘制平面散点图。

  • ax3d.scatter(x,y,z):绘制三维散点图。
    • 平面绘制散点图
      • ax3d.scatter(x,y,zdir=‘z’):在z=0的xy平面绘制散点图
      • ax3d.scatter(x,y,2,zdir=‘z’):在z=2的xy平面绘制散点图
      • ax3d.scatter(y,z,zdir=‘x’):在x=0的yz平面绘制散点图。zdir也可以为’y’
      • ax3d.scatter(y,z,2,zdir=‘x’):在x=2的yz平面绘制散点图
    • s,c,marker,ms等参数与二维坐标系参数相同。并且都可以是列表

其他参数与二维plot一致。注意三维plot不支持fmt参数。

ax3d.scatter3D()与ax3d.scatter完全相同。

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系x = np.random.randn(50)
y = np.random.randn(50)
z = np.random.randn(50)
s = np.random.randn(50)*100#ax3d.scatter(x,y,z)  #绘制3d散点图
#ax3d.scatter(x,y,z,marker=['*','o',...]) #设置不同的点样式
ax3d.scatter(x,y,z,s=s,c=s)  #绘制3d散点图
ax3d.scatter(x,y,-3,zdir='z',c='r') #3d坐标系绘制平面散点plt.show()

3d散点图

2.3 3d柱形图

在三维坐标系,绘制三尾柱形图。

  • ax3d.bar3d(x,y,z,dx,dy,dz):在x,y,z点绘制长、宽、高分别为dx,dy,dz的三维柱形图。
    • color参数:指定颜色;长度为N的颜色列表为每个柱形指定颜色;长度为6N的颜色列表为每个柱形的六个面(下,上,-Y,+Y,-X,+X)分别制定颜色。

ax3d.bar函数可以在三维坐标系里不同平面上绘制一系列二维柱形图。
注意ax3d.bar3d是小写3d,与ax3d.bar功能是不同的。

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系
np.random.seed(202201)x = np.arange(5)
y = np.arange(5)
z = np.zeros(5)  #柱子底部坐标
dx=1    #柱子平面宽度
dy=1    #柱子平面深度
dz=np.random.randint(1,15,5)    #柱子高度ax3d.bar3d(x,y,z,dx,dy,dz)  #绘制3d柱形图plt.show()

bar3d

2.4 3d火柴图

绘制三维坐标的火柴图。

  • ax3d.stem(x,y,z):绘制火柴图,在x,y,z坐标处会火柴头,火柴根在x,y平面,z=0坐标
  • ax3d.stem(x,y,z,orientation=‘x’,bottom=0):绘制火柴图,火柴根在y,z平面,x=0坐标

其他参数与二维stem一致。

ax3d.stem3D()与ax3d.stem完全相同。

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系
np.random.seed(202201)t=np.linspace(-np.pi,np.pi,50)
x = np.sin(t)
y = np.cos(t)
z = np.linspace(-2,2,50)ax3d.stem(x,y,z)  #绘制3d火柴图
#ax3d.stem(x,y,z,orientation="x", bottom=-2) #火柴根在yz平面plt.show()

stem3d

stem3d-x

2.5 3d误差图

  • ax3d.errorbar(x,y,z,zerr):根据x,y,z绘制曲线,并在x,y,z处根据zerr绘制误差线。zerr可以是数值也可以是数组
  • ax3d.errorbar(x,y,z,zerr,yerr,xerr):同时绘制x,y,z三个方向的误差线。注意是三根误差线分别绘制。
  • ax3d.errorbar(x,y,z,zerr,capsize=2,errorevery=2) :errorevery表示每两个数据点绘制一个误差线。

capsize, ecolor,fmt,elinewidth等参数与二维误差图相同。

注意,没有errorbar3D函数。

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系
np.random.seed(202201)t=np.linspace(-np.pi,np.pi,50)
x = np.sin(t)
y = np.cos(t)
z = np.linspace(-4,4,50)
zerr=np.random.randn(50)#ax3d.errorbar(x,y,z,zerr,capsize=2)  #只有z方向误差
#ax3d.errorbar(x,y,z,zerr,0.2,0.1,capsize=2)  #同时显示zerr,yerr,xerr,注意是三个误差线
ax3d.errorbar(x,y,z,zerr,capsize=2,errorevery=2) #每两个数据点绘制一个误差线。plt.show()

errorbar3d

3. 三维曲面

3.1 3d网格面

绘制三维网格曲面

  • ax3d.plot_wireframe(x,y,z):x,y,z均为二维数组,根据数据绘制网格面
  • ax3d.plot_wireframe(x,y,z,rstride=2,cstride=2):两行/列数据显示为一条线
  • ax3d.plot_wireframe(x,y,z,rcount=10,ccount=12):设置最大显示线条数

edgecolor, facecolor, linewidths, linestyles, capstyle, cmap等参数与二维绘图函数相同

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系x,y=np.mgrid[-2:2:0.2,-2:2:0.2]
z = x*np.exp(-x**2-y**2)#ax3d.plot_wireframe(x,y,z)
#ax3d.plot_wireframe(x,y,z,rstride=2,cstride=2)# 两条线合并为一条线
ax3d.plot_wireframe(x,y,z,rcount=10,ccount=12)#设置最大显示线条数plt.show()

wireframe

3.2 3d曲面

绘制三维曲面。‎默认情况下,它将以纯色的阴影着色,但它也通过提供‎‎cmap‎‎参数来支持颜色映射。‎

  • ax3d.plot_surface(x,y,z):x,y,z均为二维数组,根据数据绘制曲面

rcount,ccount,rstride,cstride参数和plot_wireframe相同。
color,cmap,facecolors,edgecolor, linewidths, linestyles, capstyle等参数与二维绘图函数相同。

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系x,y=np.mgrid[-3:3:0.2,-3:3:0.2]
z = x*np.exp(-x**2-y**2)#ax3d.plot_surface(x,y,z)
#ax3d.plot_surface(x,y,z,rstride=2,cstride=2)# 两条线合并为一条线
#ax3d.plot_surface(x,y,z,rcount=16,ccount=18)#设置最大显示线条数
#ax3d.plot_surface(x,y,z,cmap="YlOrRd")
ax3d.plot_surface(x,y,z,cmap="YlOrRd")plt.show()

surface

3.3 3d非结构化三角网格

  • ax3d.plot_trisurf(x,y,z):x,y,z均为一维数组,根据数据绘制三角曲面

cmap,facecolors,edgecolor, linewidths, linestyles, capstyle等参数与二维绘图函数相同。

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系
np.random.seed(202201)x=np.random.randn(200)*2
y=np.random.randn(200)*2
z = x*np.exp(-x**2-y**2)#ax3d.plot_trisurf(x,y,z)
ax3d.plot_trisurf(x,y,z,cmap="YlOrRd")plt.show()

trisurf

3.4 3d非结构化网格等值线

  • ax3d.tricontour(x,y,z):x,y,z为一维数组,根据x,y,z形成非结构化网格,绘制等高线
  • ax3d.tricontour(x,y,z,zdir=‘x’,levels=10) #x方向等值线
    • levels, cmap等参数与二维绘图函数相同
    • offset=0参数把等值线投影到指定坐标

ax3d.tricontourf为填充等值线。

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系
np.random.seed(202201)x=np.random.randn(200)*2
y=np.random.randn(200)*2
z = x*np.exp(-x**2-y**2)#ax3d.tricontour(x,y,z)
ax3d.tricontour(x,y,z,levels=10,cmap="coolwarm")
#ax3d.tricontour(x,y,z,zdir='x',levels=10,cmap="coolwarm") #绘制x方向等值线plt.show()

tricontour

4. 3d标量矢量场

4.1 3d等高线

  • ax3d.contour(x,y,z):x,y,z均为二维数组。显示等高线。
  • ax3d.contour(x,y,z,zdir=‘x’,levels=10) #x方向等值线
    • levels, cmap等参数与二维绘图函数相同
    • offset=0参数把等值线投影到指定坐标

ax3d.contourf(x,y,z)绘制填充等高线,用法与contour相同,填充方式仅仅是在等高线附近显示面,offset投影会比较有用。

ax3d.contour3D()与ax3d.contour完全相同。
ax3d.contourf3D()与ax3d.contourf完全相同。

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系x,y=np.mgrid[-3:3:0.2,-3:3:0.2]
z=x*np.exp(-x**2-y**2)#ax3d.contour(x,y,z)
ax3d.contour(x,y,z,levels=10,cmap="coolwarm")  #指定等高线数和颜色
#ax3d.contourf(x,y,z,levels=10,cmap="coolwarm") #填充等高线
#ax3d.contour(x,y,z,zdir='x',levels=10)  #x方向等高线#投影
#ax3d.contour(x,y,z,levels=10,zdir='x',offset=-3)
#ax3d.contour(x,y,z,levels=10,zdir='y',offset=3)
#ax3d.contour(x,y,z,levels=10,zdir='z',offset=-0.4)plt.show()

contour3d
3d等高线
contour3d-x
contour-offset
等值线投影到指定位置平面

x方向等值线
contourf3d
填充等值线,没什么意义,但是投影到x,y,z轴平面会比较好看

4.2 3d矢量图

  • ax3d.quiver(x,y,z,u,v,w):在每一个x,y,z坐标绘制矢量方向为u,v,w的箭头
    • x,y,z参数可以为一维、二维、三维数组。
    • length,colors,linewidths,facecolors等参数同二维绘图函数。

matplotlib的3d矢量图绘制功能略弱。比如不能设置uvw为箭头终点等等。

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系t=np.linspace(-np.pi,np.pi,20)
x=np.sin(t)
y=np.cos(t)
z=np.linspace(-1,1,20)
u=np.sin(t+0.1)-x
v=np.cos(t+0.1)-y
w=0.1
ax3d.quiver(x,y,z,u,v,w)  #在每一个x,y,z坐标绘制矢量方向为u,v,w的箭头plt.show()

矢量图

5. 其他

5.1 3d文本

  • ax3d.text(0.5,0.5,0.5,‘3dtext’):在指定坐标处绘制文本
    • zdir=‘z’:参数可以设置文本打印方向
    • color,fontsize,fontstyle,fontweight等参数也可以设置
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')  #创建3d坐标系ax3d.text(0.5,0.5,0.5,'3dtext',c='r')   #在指定坐标处绘制文本。文本永远朝向用户
ax3d.text(0.1,0.1,0.5,'3dtextz',c='r',zdir='z')  #文本沿z轴方向打印
#ax3d.text2D(0.1,0.1,'2dtext',c='b') #好像效果和官方文档不一致。plt.show()

text

5.2 图形旋转

  • ax3d.view_init(angle1, angle2):以度为单位设置视角的高度角和方位角。
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
X, Y, Z = axes3d.get_test_data(0.1)ax.plot_wireframe(X, Y, Z, rstride=5, cstride=5)# rotate the axes and update
for angle in range(0, 360):ax.view_init(30, angle)  #设置视角plt.draw()  #重绘图plt.pause(.1)   #暂停

显示效果为360度旋转看绘制的图形,即动画。

5.3 三维体元素

在指定位置绘制三维体元素(通常为六面体,六面体并非必须标准形状,六个面坐标可以指定)。

  • ax3d.voxels(filled):#filled为True的位置绘制六面体
  • ax3d.voxels(filled,facecolors=colors) #filled为True的位置绘制六面体,并设置颜色
    • facecolors:设置体元素表面颜色。
    • edgecolors:设置体元素表边颜色。
    • 注意facecolors和edgecolors颜色列表,颜色个数必须和filled数组一样。filled形状为(m,n,k)则颜色形状为(m,n,k,4)。
    • 参数color和cmap貌似都不起作用。颜色参数都不能赋值为浮点数映射colormap。
import numpy as np
import matplotlib.pyplot as pltfig = plt.figure()
ax3d = fig.add_subplot(121,projection='3d')#filled为bool类型数组,在True的元素下标位置绘制体元素
i,j,k=np.indices((3,3,3))
filled= (i==j) & (j==k)  #3行3列3层,对角线为True
c=plt.get_cmap('RdBu')(np.linspace(0,1,27)).reshape(3,3,3,4)#ax3d.voxels(filled)             #filled为True的位置绘制六面体
ax3d.voxels(filled,facecolors=c) #filled为True的位置绘制六面体,并设置颜色#
ax3d = fig.add_subplot(122,projection='3d')
#x,y,z=np.indices((3,4,5))
#ax3d.voxels(x,y,z,filled)plt.show()

voxels

  • ax3d.voxels(x,y,z,filled):在filled为True的位置绘制六面体,用x,y,z指定各个面的位置坐标。
    • x,y,z指定六面体的起始位置,所以x,y,z的3个维度长度都必须比filled大1。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax=fig.add_subplot(projection='3d')filled = np.ones((3,3,3))
filled[0,0,0]=False
x, y, z = np.indices((4,4,4))**1.2  #x,y,z的三个维度都必须比filled大1.
ax.voxels(x, y, z, filled, edgecolors='C1')plt.show()

voxels2

注意,因为设置了x,y,z坐标位置,所以六面体的尺寸并不相同。实际上还可以更加复杂的绘制多个六面体拼成圆环、球等形状。

参考文章

  • 官方示例
  • 官方教程
  • 官方API


Matplotlib系列目录


个人总结,部分内容进行了简单的处理和归纳,如有谬误,希望大家指出,持续修订更新中。

修订历史版本见:https://github.com/hustlei/AI_Learning_MindMap

未经允许请勿转载。

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

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

相关文章

matplotlib画三维图

matplotlib画三维图 要画三维图需要先导入from mpl_toolkits import mplot3d。导入这个子模块后,就可以在创建任意一个普通坐标轴的过程中添加projection3d参数,从而创建一个三维坐标轴。三维图的优点是在notebook中可以交互浏览。 from mpl_toolkits i…

说起刘慈欣,不要只知道《三体》和《流浪地球》

说起中国的科幻作家,恐怕没有人不知道刘慈欣。他从一个发电厂的计算机工程师,一跃成为了中国最成功的科幻小说家。 他的代表作《三体》深深影响了众多的年轻读者,“黑暗森林”、“降维打击” 等新奇的概念至今都被人津津乐道。 除了《三体》三…

空间点集的三角剖分工具——四面体生成器(TetGen)和三维三角剖分包(CGAL)

TetGen - Tetrahedral Generator TetGen是一款四面体网格生成器。它创建多面体域的三维三角剖分。它能生成具有良好形状的单元网格,单元大小适合于几何特征或用户提供的尺寸函数。它在科学计算的各种应用中都有应用,如计算机图形学(CG)、计算机辅助设计…

Python三维绘图——Matplotlib

菜鸡的第一篇博客。学习一下大佬的笔记。 1.创建三维坐标轴对象Axes3D 方法一、利用关键字“projection3D”来实现 #方法一、利用关键字”objection3d“ from matplotlib import pyplot as plt#定义坐标轴 figplt.figure() ax1plt.axes(projection3d) 方法二、利用三维轴通…

MATLAB-plot3/ezplot3三维绘图

(1) plot3是三维绘图的基本函数,调用格式如下。 1、 plot3( X,Y,Z):绘制简单的三维曲线,当X、Y、Z是长度相同的向量时,plot3命令将绘制以向量X、Y、Z为(x, y,z)坐标值的三维曲线;当X、Y、Z是mn矩阵时,plot3命令将绘制m…

Python三维绘图--Matplotlib

Python三维绘图 在遇到三维数据时,三维图像能给我们对数据带来更加深入地理解。python的matplotlib库就包含了丰富的三维绘图工具。 1.创建三维坐标轴对象Axes3D 创建Axes3D主要有两种方式,一种是利用关键字projection3dl来实现,另一种则是通…

MATLAB绘制三体图形

clf; [X,Y] meshgrid([-2:.2:2]); Z 4*X.*exp(-X.^2-Y.^2); Ggradient(Z); subplot(1,2,1); surf(X,Y,Z,G); subplot(1,2,2); hsurf(X,Y,Z,G); rotate(h,[-2,-2,0],30,[2,2,0]); colormap(jet)开发工具:MATLAB 2022b 微信AltA截屏工具 本程序摘自《MATLAB 2008图形与动画实例…

python (matplotlib)画三维图像

文章目录 1 三维图2 三维等高线3 二维等高线4 三维表面图上画曲线5 三维曲线投影到坐标轴 关于三维图像的内容很多博友已经写了 推荐: 三维绘图, 画三维图, 3d图-英文版, 中文版三维图 上面写的都非常详细,很推荐&…

matlab绘图(三)绘制三维图像

目录 一、绘制三维曲线 二、绘制三维曲面 1.meshgrid函数 2.mesh和surf函数 一、绘制三维曲线 1.最基本的绘制三维曲线的函数—plot3 plot3(x1,y1,z1, 选项 1,x2,y2,z2, 选项 2,…, xn,yn,zn , 选项 n) 其中,每一组 x , y , z 组成一组曲线…

PyOpenGL三体模拟

给定多星系统的初始状态,以一定的时间步,计算在引力作用下的星体运动,并使用openGL实时可视化。 实验环境 python37OpenGL https://www.cnblogs.com/GraceSkyer/p/9235582.html numpy PIL 初始条件 使用一个数组p表示多星系统的初始条件…

使用python进行字频统计和词频统计

问题描述 读取给定的语料库,根据制表符’\t’划分其文本与标签,将获得的文本仅保留汉字部分,并按字划分,保存在列表中,至少使用一种方法,统计所有汉字的出现次数,并按照从高到低的顺序排序&…

Imagenet VGG-19图片识别实例展示

资源: 1.相关的vgg模型下载网址 http://www.vlfeat.org/matconvnet/models/beta16/imagenet-vgg-verydeep-19.mat 2.ImageNet 1000种分类以及排列 https://github.com/sh1r0/caffe-Android-demo/blob/master/app/src/main/assets/synset_words.txt(如果…

外滩画报:揭秘全球电子垃圾坟墓

在西方发达国家,有这样一个不为人知的秘密:当你把电子垃圾送给回收商而不是扔进垃圾箱里后,很快,大约 80% 的电子垃圾就会被装上集装箱船,运往尼日利亚、印度、巴基斯坦和中国那些常年被毒烟笼罩的垃圾场。师从人道主义…

《荒野猎人》影评

如果没有小李子和奥斯卡数十年相爱相杀赚足眼球这件事,《荒野猎人》最大的看点应该是导演亚利桑德罗冈萨雷斯伊纳里图和摄影师艾曼努尔卢贝兹基的再度合作。 伊纳里图的电影履历如晴朗夏夜的星空一般漂亮璀璨,执导座《爱情是狗娘》一举拿下2000年东京国际…

印度之行(一) 印度是个很大的国家

(baidu真渣。。。) 首先,我们弄清了,老王吃了一个月咖喱的地方,下面是老王的咖喱味思考: 在印度浦内市(又译浦那市)待了5周,基本是在公司的浦内office做项目,…

HTML标签

HTML标签友情链接 如果在 HTML 中需要文字或者图片垂直居中时&#xff0c;可以使用 align "center"&#xff0c;可以对文字或着图片进行垂直居中&#xff01; 这是一个很好的例子&#xff1a; <!doctype html> <html lang"en"> <head&…

苏州免费景点

文章目录 苏州免费景点姑苏区相门古城墙平江历史街区曲园畅园七里山塘朴园五峰园拥翠山庄天香小筑明轩实样北寺塔定慧寺城隍庙神仙庙苏州博物馆忠王府苏州民俗博物馆中国昆曲博物馆苏州公园桂花公园桐泾公园 吴中区沐春园(原园博会苏州园)瑞园道勤小筑乡畦小筑石湖风景区灵岩山…

又一个程序员被判刑了!运维违规操作被判5年半,IT从业需要懂法律!

点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Sleeping is nice. You forget about everything for a little while. 还是睡觉好&#xff0c;能暂时忘掉一切烦恼。 每日掏心话 人生如梦&#xff0c;岁月匆匆&#x…

又背锅了,一个“锁表” 损失 800万,程序员被判5年半

图片来自 Pexels 出处&#xff1a;云头条&#xff0c;知乎综合整理, 51CTO 链接&#xff1a;https://www.zhihu.com/question/389167387/answer/1170852426 近日&#xff0c;云头条发布的“一个违规操作、损失 800 万、被判五年半&#xff1a;运维夏某某致郑大一附院智慧医院系…

一个“锁表”损失800万,运维被判5年半

“ 近日&#xff0c;云头条发布的“一个违规操作、损失 800 万、被判五年半&#xff1a;运维夏某某致郑大一附院智慧医院系统瘫痪 2 个小时&#xff0c;判破坏计算机信息系统罪”一文引发了技术圈的热议。 图片来自 Pexels 事件经过 夏某某任职北京中科某某科技有限公司&#x…