发现忘了上传图,就重发一次。
结果图:
原子半径:原子半径表示孤立的电中性原子的大小。
Covalent Radii:原子间形成化学键的时候,键的长度大体相当于这两个原子的共价半径之和。
Van-der-Waals Radii:范德华半径由接触分子中未结合原子之间的接触距离确定。
Atomic-Ionic Radii:这些是原子的“较为真实”半径,从真实晶体和分子的键长测量,并考虑到一些原子会带电的事实。例如,氯(Cl-)的原子离子半径大于其原子半径。原子A和B之间的键长是原子半径的总和, dAB=rA+rB
Crystal Radii:也许最权威和最受尊敬的原子半径集是Shannon和Prewitt(1969)出版的“晶体”半径,其值后来由Shannon(1976)修订。
关于原子颜色定义:
# 设置一个字典存储相关原子颜色信息
atom_color = {'C':'#8B0000',
'H':'#FFFFFF',
'O':'#FF0000',
'N':'#0000FF',
'S':'#FFFF00',
'P':'#800080',
'M':'#C0C0C0',
'Halogen':'#008000'
}
# 设置一个字典存储相关原子半径信息
# 卤素原子使用Cl替代
# 金属原子使用Ag替代
# 半径单位为埃,1埃=0.1纳米
# 半径依次为:原子半径,离子半径,共价半径,范德华半径,晶体半径
atom_rdii= {
'C':[0.67,0.70,0.77,1.70,0.29],
'H':[0.53,0.25,0.37,1.20,0.10],
'O':[0.48,0.60,0.73,1.52,1.21],
'N':[0.56,0.65,0.75,1.55,0.30],
'S':[0.88,1.00,1.02,1.80,0.43],
'P':[0.98,1.00,1.06,1.80,0.31],
'M':[1.65,1.60,1.53,1.72,1.29],
'Halogen':[0.79,1.00,0.99,1.75,1.67]
}
import numpy as np
z=np.linspace(1,20,5)
coord=[]
for n in z:
coo = [0,10,n]
coord.append(coo)
#coord = [[1,1,1]]
coord=coord*8
id_list = [241,242,243,244,245,246,247,248]
#id_list = [581,582,583,584,585,586,587,588,589,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840]
import matplotlib.pyplot as plt
import numpy as np
def plot_atom_surface(a,b,c,radius,color):
#fig_m = plt.figure()
# ax = fig_m.add_subplot(id,projection='3d')
# Make data
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = radius * np.outer(np.cos(u), np.sin(v)) + a
y = radius * np.outer(np.sin(u), np.sin(v)) + b
z = radius * np.outer(np.ones(np.size(u)), np.cos(v)) + c
# Plot the surface
#ax.plot_surface(x, y, z, color = color)
ax.scatter(a,b,c, marker="8",c=color)
ax.plot_wireframe(x, y, z, rstride=10, cstride=10,color = color)
#plt.show()
anno_li = ['Atom','Atomic-Ionic','Covalent','Vdw','Crystal']
import matplotlib.pyplot as plt
import numpy as np
fig_m = plt.figure()
#fig_m.canvas.mpl_connect()
fig_m.set_facecolor('white')
#ax = fig_m.add_subplot(projection='3d')
#atom_ori = [0,0,0]
n=0
m=0
for i in atom_color:
# atom_now = [atom_ori[0] + 5 , 0 ,0]
# atom_now_2 = [atom_ori[0] + 5 , 0 ,0]
ax = fig_m.add_subplot(id_list[m], projection='3d')
m = m+1
h=0
ax.set_title(i+' Atom')
for radi in atom_rdii[i]:
# atom_now_2 = [atom_now[0] + 5 , atom_now[1] + 5,atom_now[2]+5]
# print(atom_now )
atom_now=coord[n]
print(i,radi)
print(coord[n])
x=coord[n][0]
y=coord[n][1]
z=coord[n][2]
#ax.scatter(atom_now[0],atom_now[1],atom_now[2], marker="8",c=atom_color[i])
#plot_atom_surface(atom_now[0],atom_now[1],atom_now[2],radi,atom_color[i])
#ax.scatter(x,y,z, marker="8",c=atom_color[i])
plot_atom_surface(x,y,z,radi,atom_color[i])
ax.text(x+2,y,z,anno_li[h])
ax.text(x-5,y-5,z,radi)
n=n+1
ax.grid(False)
ax.set_xlim(-10,10)
ax.set_ylim(0, 20)
ax.set_zlim(0, 20)
# 加一些label相关标记
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
h=h+1
plt.show()
代码:
国外 github仓库:https://github.com/ZeroDesigner/MatplotMol
国内 gitee仓库:https://gitee.com/zerodesigner/MatplotMol