萬分感謝!!!!
腳本如下
#coding: utf-8
import pprint
import re
import matplotlib.pyplot as plt
ZongBuShu = 1000000
filename = 'species.out'
wendu = 'PH 2200K'
dump = 400
timestep_start = 0
timestep_end = ZongBuShu
#拆分每個species的分子,保存成新的字典
def ChaiFenFenZiShi(FenZi):
i = len(FenZi)
FenZi_list = []
while i != 0:
result = re.match('[CHON][\d]*',FenZi)
FenZi_list.append(result.group())
Q = len(FenZi_list[len(FenZi_list)-1])
FenZi = FenZi[Q:]
i = len(FenZi)
return FenZi_list
#計算相對分子質量
def JiSuanFenZiZhiLiang(FenZi):
FenZi = ChaiFenFenZiShi(FenZi)
n = len(FenZi)
i = 0
fenzizhiliang = 0
yuanzizhiliang = 0
while i < n:
YuanZiZhongleiheshumu = FenZi[i]
yuanzizhonglei = YuanZiZhongleiheshumu[0]
if yuanzizhonglei == 'C':
yuanzizhiliang = 12
elif yuanzizhonglei == 'H':
yuanzizhiliang = 1
elif yuanzizhonglei == 'O':
yuanzizhiliang = 16
elif yuanzizhonglei == 'N':
yuanzizhiliang = 14
yuanzishu = YuanZiZhongleiheshumu.strip(yuanzizhonglei)
if len(yuanzishu) == 0:
yuanzishu =1
else:
yuanzishu = int(yuanzishu)
fenzizhiliang = fenzizhiliang + yuanzizhiliang*yuanzishu
i = i+1
return fenzizhiliang
#判斷每個species的種類,重油輕油還是氣體組分
def PanDuanZhongLei(FenZi):
FenZi = ChaiFenFenZiShi(FenZi)
n = len(FenZi)
i = 0
yuanzizhiliang = 0
while i < n:
YuanZiZhongleiheshumu = FenZi[i]
yuanzizhonglei = YuanZiZhongleiheshumu[0]
if yuanzizhonglei == 'C':
yuanzishu = YuanZiZhongleiheshumu.strip(yuanzizhonglei)
if len(yuanzishu) == 0:
yuanzishu = 1
else:
yuanzishu = int(yuanzishu)
if yuanzishu <= 4:
return '氣體組分'
break
elif yuanzishu > 4 and yuanzishu <= 13:
return '輕質焦油'
elif yuanzishu > 13 and yuanzishu <=39:
return '重質焦油'
elif yuanzishu > 39 :
return '半焦'
else:
pass
i = i+1
return '氣體組分'
#將輸入檔案轉化成兩個字典,bushu和ZiDian
def TongJiShengChengWu(filename):
file = open(filename)
content_partA = file.readline()
BANJIAO_ZHANBI_TOTAL = []
ZHONGZHIJIAOYOU_ZHANBI_TOTAL = []
QINGZHIJIAOYOU_ZHANBI_TOTAL = []
QITI_ZHANBI_TOTAL = []
while content_partA != '':
content_partB = file.readline()
A_LIST = content_partA.split()
B_LIST = content_partB.split()
TIMESTEP = B_LIST[0]
No_Moles = B_LIST[1]
No_Specs = B_LIST[2]
A_LIST = A_LIST[4:]
B_LIST = B_LIST[3:]
BANJIAO_ZUFEN = []
BANJIAO_NUMBER = []
ZHONGZHIJIAOYOU_ZUFEN = []
ZHONGZHIJIAOYOU_NUMBER = []
QINGZHIJIAOYOU_ZUFEN = []
QINGZHIJIAOYOU_NUMBER = []
QITI_ZUFEN = []
QITI_NUMBER = []
i = 0
FENZI_ZONGZHILIANG = - 450*18
BANJIAO_ZONGZHILIANG = 0
ZHONGZHIJIAOYOU_ZONGZHILIANG = 0
QINGZHIJIAOYOU_ZONGZHILIANG = 0
QITI_ZONGZHILIANG = 0
while i < len(A_LIST):
FENZI = A_LIST[i]
FENZI_NUMBER = B_LIST[i]
FENZI_ZHILIANG = JiSuanFenZiZhiLiang(FENZI)
FENZI_TYPE = PanDuanZhongLei(FENZI)
FENZI_ZONGZHILIANG = FENZI_ZONGZHILIANG + int(FENZI_ZHILIANG) * int(FENZI_NUMBER)
if FENZI_TYPE == '半焦':
BANJIAO_ZUFEN.append(FENZI)
BANJIAO_NUMBER.append(FENZI_NUMBER)
BANJIAO_ZONGZHILIANG = BANJIAO_ZONGZHILIANG + int(FENZI_ZHILIANG) * int(FENZI_NUMBER)
if FENZI_TYPE == '重質焦油':
ZHONGZHIJIAOYOU_ZUFEN.append(FENZI)
ZHONGZHIJIAOYOU_NUMBER.append(FENZI_NUMBER)
ZHONGZHIJIAOYOU_ZONGZHILIANG = ZHONGZHIJIAOYOU_ZONGZHILIANG + int(FENZI_ZHILIANG) * int(FENZI_NUMBER)
if FENZI_TYPE == '輕質焦油':
QINGZHIJIAOYOU_ZUFEN.append(FENZI)
QINGZHIJIAOYOU_NUMBER.append(FENZI_NUMBER)
QINGZHIJIAOYOU_ZONGZHILIANG = QINGZHIJIAOYOU_ZONGZHILIANG + int(FENZI_ZHILIANG) * int(FENZI_NUMBER)
if FENZI_TYPE == '氣體組分':
QITI_ZUFEN.append(FENZI)
QITI_NUMBER.append(FENZI_NUMBER)
QITI_ZONGZHILIANG = QITI_ZONGZHILIANG + int(FENZI_ZHILIANG) * int(FENZI_NUMBER)
i = i + 1
J1 = 0
while J1 < len(BANJIAO_ZUFEN):
J1 = J1 + 1
J2 = 0
while J2 < len(ZHONGZHIJIAOYOU_ZUFEN):
J2 = J2 + 1
J3 = 0
while J3 < len(QINGZHIJIAOYOU_ZUFEN):
J3 = J3 + 1
J4 = 0
while J4 < len(QITI_ZUFEN):
J4 = J4 + 1
BANJIAO_ZHANBI_TOTAL.append(BANJIAO_ZONGZHILIANG/FENZI_ZONGZHILIANG*100)
ZHONGZHIJIAOYOU_ZHANBI_TOTAL.append(ZHONGZHIJIAOYOU_ZONGZHILIANG/FENZI_ZONGZHILIANG*100)
QINGZHIJIAOYOU_ZHANBI_TOTAL.append(QINGZHIJIAOYOU_ZONGZHILIANG/FENZI_ZONGZHILIANG*100)
QITI_ZHANBI_TOTAL.append((FENZI_ZONGZHILIANG-QINGZHIJIAOYOU_ZONGZHILIANG-ZHONGZHIJIAOYOU_ZONGZHILIANG-BANJIAO_ZONGZHILIANG)/FENZI_ZONGZHILIANG*100)
content_partA = file.readline()
return BANJIAO_ZHANBI_TOTAL,ZHONGZHIJIAOYOU_ZHANBI_TOTAL,QINGZHIJIAOYOU_ZHANBI_TOTAL,QITI_ZHANBI_TOTAL
def GET_X(timestep_start,timestep_end,dump):
timestep_start = timestep_start
timestep_end = timestep_end
dump = dump
X_zuobiao = []
i = timestep_start
while i < timestep_end:
j = i/5000
X_zuobiao.append(j)
i = i + dump
return X_zuobiao
T = TongJiShengChengWu(filename)
X_zuobiao = GET_X(timestep_start,timestep_end,dump)
BANJIAO = T[0]
ZHONGZHIJIOAYOU = T[1]
QINGZHIJIAOYOU = T[2]
QITI = T[3]
#print(len(BANJIAO))
M1 = 0
SUM = 0
SUM_TOP = 0
BANJIAO_ZHONGZHIJIAOYOU = []
while M1 < len(BANJIAO):
SUM = BANJIAO[M1] + ZHONGZHIJIOAYOU[M1]
BANJIAO_ZHONGZHIJIAOYOU.append(SUM)
M1 = M1 + 1
N1 = 0
BANJIAO_ZHONGZHIJIAOYOU_QINGZHIJIAOYOU = []
while N1 < len(BANJIAO):
SUM_TOP = BANJIAO[N1] + ZHONGZHIJIOAYOU[N1] + QINGZHIJIAOYOU[N1]
BANJIAO_ZHONGZHIJIAOYOU_QINGZHIJIAOYOU.append(SUM_TOP)
N1 = N1 +1
print(BANJIAO[-5:-1])
BANJIAO_FILENAME = 'banjiao_' + filename
BANJIAO_FILE = open(BANJIAO_FILENAME,'w')
BANJIAO_FILE.write(str(BANJIAO))
BANJIAO_FILE.close()
plt.figure(figsize=(6,4))
plt.title(wendu,fontsize = '16',weight = 'bold')
plt.xlabel('Time(ps)',fontsize = '16',weight = 'bold')
plt.ylabel('Percent(%)',fontsize = '16',weight = 'bold')
plt.xticks(fontsize = '14',weight = 'bold')
plt.yticks(fontsize = '14',weight = 'bold')
width = 0.1
p1 = plt.bar(X_zuobiao, BANJIAO, width, color='blue', label = 'w')
p2 = plt.bar(X_zuobiao, ZHONGZHIJIOAYOU, width, bottom=BANJIAO,color='green',label = 'e')
p3 = plt.bar(X_zuobiao, QINGZHIJIAOYOU, width, bottom=BANJIAO_ZHONGZHIJIAOYOU,color='red',label = 'r')
p4 = plt.bar(X_zuobiao, QITI, width, bottom=BANJIAO_ZHONGZHIJIAOYOU_QINGZHIJIAOYOU,color='black',label = 't')
plt.subplots_adjust(left = 0.15)
plt.subplots_adjust(bottom = 0.15)
#plt.legend(bbox_to_anchor=[1, 1])
plt.savefig(wendu + '.png')
#plt.show()
[b]報錯如下[/b]
RESTART: C:\Users\84358\Desktop\zufen\2\species分析腳本3.0(PH組分演變).py ======
[219.22695738354804, 219.78196233894946, 223.21110009910802, 219.46481665014866]
Traceback (most recent call last):
File "C:\Users\84358\Desktop\zufen\2\species分析腳本3.0(PH組分演變).py", line 214, in <module>
p1 = plt.bar(X_zuobiao, BANJIAO, width, color='blue', label = 'w')
File "C:\Users\84358\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\pyplot.py", line 2472, in bar
**({"data": data} if data is not None else {}), **kwargs)
File "C:\Users\84358\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\__init__.py", line 1431, in inner
return func(ax, *map(sanitize_sequence, args), **kwargs)
File "C:\Users\84358\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\axes\_axes.py", line 2432, in bar
np.atleast_1d(x), height, width, y, linewidth)
File "<__array_function__ internals>", line 6, in broadcast_arrays
File "C:\Users\84358\AppData\Local\Programs\Python\Python37\lib\site-packages\numpy\lib\stride_tricks.py", line 258, in broadcast_arrays
shape = _broadcast_shape(*args)
File "C:\Users\84358\AppData\Local\Programs\Python\Python37\lib\site-packages\numpy\lib\stride_tricks.py", line 189, in _broadcast_shape
b = np.broadcast(*args[:32])
ValueError: shape mismatch: objects cannot be broadcast to a single shape
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/19825.html
上一篇:python pandas移動視窗函式rolling如何直接獲取視窗內的元素?
下一篇:關于python字典的問題求教
