2017-05-07 87 views
0

我想在圖中感興趣的點註釋並繪製一條線。我已經爲它寫了一個代碼,它完成了這項工作。在圖中註釋興趣點(Matplotlib)

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
fsource=('/Users/Maxwell/Desktop/OES data.xlsx') 
df=pd.read_excel(fsource,header = 1, parse_cols = "C:D",names=['Wavelength','Intensity']) 
fig1 = plt.figure() 
f, ax = plt.subplots(1, figsize = (8,4)) 
ax.set_xlabel('Wavelength',fontsize=15) 
ax.set_ylabel('Intensity',fontsize=15) 
ax.plot(df['Wavelength'],df['Intensity'],color='red') 
ax.set_xlim(xmin=400,xmax=800) 
ax.set_ylim(ymin=0,ymax=5000) #Specify the max and min of y axis 
ax.tick_params(axis= 'both', labelsize=12) #fontsize of x & y ticks as 12 
ax.axvline(x= 604,color='black',ymin=0.05, ymax=0.5) #x=604 is my point of interest. 
ax.annotate('POF-1', xy=(604, 2400),fontsize=12) 
plt.show() 

我有一個關於這個方法/步驟一些問題:?

  1. 有沒有做同樣的工作更有效率/更好的辦法(任何改進的代碼等)

  2. 我的代碼僅適用於一個興趣點'POF-1'。如果我有幾個興趣點,我將不得不一一給它們編號,並且一次又一次地指定行的長度。我應該怎麼做才能使任務自動化,使註釋和線條同時出現在所有興趣點?(例如,用一些預定義文本註釋點x = 500,730,790等)。

的鏈接,原始文件是OES數據link

回答

0

您可以遍歷所有的點註釋:

xs = [500, 730, 790] 
texts = ["POF-1", "Some peak", "another peak"] 
for x, t in zip(xs, texts): 
    ax.axvline(x=x, color='black',ymin=0.05, ymax=0.5) 
    ax.annotate(t, xy=(x, 2400),fontsize=12)