前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matplotlib-原子半径

Matplotlib-原子半径

作者头像
DrugSci
发布2021-07-20 11:26:47
8410
发布2021-07-20 11:26:47
举报
文章被收录于专栏:FindKeyFindKey

发现忘了上传图,就重发一次。

结果图:

原子半径:原子半径表示孤立的电中性原子的大小。

Covalent Radii:原子间形成化学键的时候,键的长度大体相当于这两个原子的共价半径之和。

Van-der-Waals Radii:范德华半径由接触分子中未结合原子之间的接触距离确定。

Atomic-Ionic Radii:这些是原子的“较为真实”半径,从真实晶体和分子的键长测量,并考虑到一些原子会带电的事实。例如,氯(Cl-)的原子离子半径大于其原子半径。原子A和B之间的键长是原子半径的总和, dAB=rA+rB

Crystal Radii:也许最权威和最受尊敬的原子半径集是Shannon和Prewitt(1969)出版的“晶体”半径,其值后来由Shannon(1976)修订。

关于原子颜色定义:

代码语言:javascript
复制
# 设置一个字典存储相关原子颜色信息
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

参考

  1. 原子配色:https://zh.wikipedia.org/zh-hans/CPK配色
  2. matplot颜色对照表:https://zhuanlan.zhihu.com/p/65220518
  3. 原子半径:www.crystalmaker.com/support/tutorials/atomic-radii/index.html
  4. 原子半径:http://sobereva.com/255
  5. Shannon RD Prewitt CT (1969) Acta Crystallographica B25:925-946
  6. Shannon RD (1976) Acta Crystallographica A23:751-761

附加材料

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FindKey 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考:
  • 附加材料:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档