2017-04-15 50 views
1

基本上,我想完成的任務是使用for循環產生幾個地塊,然後我想將這些地塊組合成一個地塊。一旦我有多個地塊,我想將所有地塊合併成一個包含我之前地塊所有點和所有線性迴歸線的地塊。這裏是我的代碼,我一直在努力完成這一壯舉:使用一個循環來繪製多個地塊,然後合併這些地塊

import math 
import numpy as np 
from matplotlib import pyplot as plt 

uH2 = 1.90866638 
uHe = 3.60187307 
eH2 = 213.38 
eHe = 31.96 

R = float(uH2*eH2)/(uHe*eHe) 

Delta = [] 
C_Values = [] 
kHeST = [] 
J_f21 = [] 
data = np.genfromtxt("Lamda_HeHCL.txt", unpack=True); 
J_i1=data[1]; 
J_f1=data[2]; 
kHe=data[7] 

data = np.genfromtxt("Basecol_Basic_New_1.txt", unpack=True); 
J_i2=data[0]; 
J_f2=data[1]; 
kH2=data[5] 

print kHe 
print kH2 

kHe = map(float, kHe) 
kH2 = map(float, kH2) 

kHe = np.array(kHe) 
kH2= np.array(kH2) 

g = len(kH2) 

for i in range(20): 
    for n in range(0,g): 
     if J_f2[n] == i:  
       Jf21 = J_f2[n] 
       J_f21.append(Jf21) 
       ratio = kHe[n]/kH2[n] 
       C = (((math.log(float(kH2[n]),10)))-(math.log(float(kHe[n]),10)))/math.log(R,10) 
       C_Values.append(C) 
       St = abs(J_f1[n] - J_i1[n]) 
       Delta.append(St) 

fig, ax = plt.subplots() 
ax.scatter(Delta,C_Values) 

m, b = np.polyfit(Delta, C_Values, 1) 
x = np.linspace(0, 12, 50) # both 0 and 12 are from visually inspecting the plot 
plt.plot(x, np.poly1d(np.polyfit(Delta, C_Values, 1))(x), label = "y = {}*x + {}".format(m, b)) 
plt.xlim(0, 12) 
plt.ylim(-3, 3) 

for i, txt in enumerate(J_f21): 
    ax.annotate(txt, (Delta[i],C_Values[i])) 

plt.legend() 
plt.show() 

enter image description here

上面的影像是什麼代碼編譯和情節。但是,我想要有多個圖。我一直試圖用這條線if J_f2[n] == i:試圖讓它在我= 1到20的時候繪製多個圖。一旦我有了這些,我想把所有的圖用一個適當的圖例合併到一個圖上。

這裏是Basecol文件的一個片段:

2 1 1 1 5.536e-11 6.9932e-11 7.6179e-11 7.7972e-11 7.3478e-11 6.9928e-11 5.7645e-11 5.1923e-11 
3 1 1 1 2.0055e-11 2.1203e-11 2.1748e-11 2.2311e-11 2.2817e-11 2.3063e-11 2.4038e-11 2.5299e-11 
3 2 1 1 1.6342e-11 2.075e-11 2.373e-11 2.8027e-11 3.2632e-11 3.5054e-11 4.3652e-11 4.9243e-11 
4 1 1 1 9.307e-12 9.202e-12 9.0085e-12 8.7567e-12 8.6751e-12 8.723e-12 9.2386e-12 9.6497e-12 
4 2 1 1 1.0556e-11 1.135e-11 1.1889e-11 1.2677e-11 1.3755e-11 1.4523e-11 1.8932e-11 2.3811e-11 
4 3 1 1 7.649e-12 8.4137e-12 9.3186e-12 1.1427e-11 1.4925e-11 1.7296e-11 2.8093e-11 3.6589e-11 
5 1 1 1 4.9158e-13 4.7265e-13 4.8109e-13 5.3278e-13 6.5653e-13 7.6023e-13 1.4127e-12 2.1105e-12 
5 2 1 1 1.0458e-11 1.0189e-11 1.003e-11 0.998e-11 1.026e-11 1.0529e-11 1.1983e-11 1.3233e-11 
5 3 1 1 4.691e-12 4.9662e-12 5.2767e-12 5.9551e-12 7.0047e-12 7.76e-12 1.2318e-11 1.7668e-11 
5 4 1 1 1.1144e-11 1.0575e-11 1.0487e-11 1.1112e-11 1.3046e-11 1.4654e-11 2.3451e-11 3.1304e-11 
6 1 1 1 2.3703e-13 2.3679e-13 2.3847e-13 2.5019e-13 2.8183e-13 3.1013e-13 5.3148e-13 8.7515e-13 
6 2 1 1 8.4873e-13 8.2252e-13 8.2998e-13 8.9342e-13 1.0548e-12 1.1898e-12 2.0178e-12 2.8894e-12 

這裏是LAMDA的一個片段:

1 2 1 4.151E-12 4.553E-12 4.600E-12 4.852E-12 6.173E-12 7.756E-12 9.383E-12 1.096E-11 1.243E-11 1.379E-11 1.504E-11 1.619E-11 1.724E-11 2.139E-11 2.426E-11 2.791E-11 3.009E-11 3.152E-11 3.252E-11 3.326E-11 3.382E-11 3.426E-11 3.462E-11 3.572E-11 3.640E-11 3.698E-11 3.752E-11 
    2 3 1 1.433E-12 1.655E-12 1.907E-12 2.014E-12 2.282E-12 2.682E-12 3.159E-12 3.685E-12 4.246E-12 4.833E-12 5.440E-12 6.059E-12 6.688E-12 9.845E-12 1.285E-11 1.810E-11 2.238E-11 2.590E-11 2.886E-11 3.139E-11 3.359E-11 3.552E-11 3.724E-11 4.375E-11 4.832E-11 5.192E-11 5.486E-11 
    3 3 2 1.451E-11 1.661E-11 1.839E-11 1.828E-11 1.833E-11 1.904E-11 2.002E-11 2.111E-11 2.223E-11 2.334E-11 2.442E-11 2.546E-11 2.646E-11 3.071E-11 3.397E-11 3.860E-11 4.176E-11 4.407E-11 4.585E-11 4.728E-11 4.845E-11 4.944E-11 5.028E-11 5.326E-11 5.525E-11 5.681E-11 5.807E-11 
    4 4 1 9.498E-13 1.129E-12 1.315E-12 1.358E-12 1.414E-12 1.489E-12 1.560E-12 1.621E-12 1.671E-12 1.711E-12 1.745E-12 1.773E-12 1.797E-12 1.893E-12 1.994E-12 2.246E-12 2.528E-12 2.803E-12 3.060E-12 3.298E-12 3.518E-12 3.722E-12 3.914E-12 4.729E-12 5.370E-12 5.876E-12 6.268E-12 
    5 4 2 2.602E-12 2.885E-12 3.182E-12 3.254E-12 3.517E-12 3.972E-12 4.555E-12 5.230E-12 5.971E-12 6.763E-12 7.591E-12 8.444E-12 9.314E-12 1.371E-11 1.789E-11 2.517E-11 3.105E-11 3.586E-11 3.985E-11 4.325E-11 4.619E-11 4.879E-11 5.112E-11 6.031E-11 6.732E-11 7.317E-11 7.813E-11 
    6 4 3 1.383E-11 1.630E-11 1.850E-11 1.868E-11 1.913E-11 2.014E-11 2.136E-11 2.265E-11 2.396E-11 2.525E-11 2.650E-11 2.773E-11 2.891E-11 3.423E-11 3.866E-11 4.543E-11 5.015E-11 5.346E-11 5.581E-11 5.750E-11 5.876E-11 5.974E-11 6.053E-11 6.344E-11 6.611E-11 6.886E-11 7.155E-11 
    7 5 1 3.627E-13 4.225E-13 4.790E-13 4.952E-13 5.395E-13 6.089E-13 6.905E-13 7.757E-13 8.600E-13 9.414E-13 1.019E-12 1.092E-12 1.162E-12 1.451E-12 1.665E-12 1.965E-12 2.182E-12 2.367E-12 2.541E-12 2.711E-12 2.882E-12 3.052E-12 3.222E-12 4.046E-12 4.790E-12 5.431E-12 5.963E-12 
    8 5 2 4.752E-13 5.685E-13 6.563E-13 6.844E-13 7.533E-13 8.520E-13 9.663E-13 1.091E-12 1.224E-12 1.365E-12 1.513E-12 1.668E-12 1.829E-12 2.704E-12 3.646E-12 5.506E-12 7.179E-12 8.632E-12 9.893E-12 1.100E-11 1.197E-11 1.284E-11 1.362E-11 1.660E-11 1.868E-11 2.027E-11 2.155E-11 
    9 5 3 2.314E-12 2.672E-12 2.994E-12 3.069E-12 3.318E-12 3.740E-12 4.271E-12 4.876E-12 5.535E-12 6.236E-12 6.971E-12 7.734E-12 8.520E-12 1.264E-11 1.681E-11 2.466E-11 3.158E-11 3.760E-11 4.289E-11 4.756E-11 5.175E-11 5.552E-11 5.895E-11 7.257E-11 8.256E-11 9.049E-11 9.695E-11 
    10 5 4 1.337E-11 1.597E-11 1.820E-11 1.849E-11 1.920E-11 2.052E-11 2.209E-11 2.370E-11 2.528E-11 2.679E-11 2.823E-11 2.960E-11 3.090E-11 3.648E-11 4.090E-11 4.751E-11 5.224E-11 5.585E-11 5.878E-11 6.126E-11 6.344E-11 6.540E-11 6.719E-11 7.447E-11 8.003E-11 8.451E-11 8.812E-11 
    11 6 1 1.235E-13 1.397E-13 1.550E-13 1.603E-13 1.793E-13 2.101E-13 2.490E-13 2.940E-13 3.439E-13 3.980E-13 4.556E-13 5.161E-13 5.789E-13 9.136E-13 1.254E-12 1.880E-12 2.404E-12 2.836E-12 3.194E-12 3.497E-12 3.755E-12 3.979E-12 4.177E-12 4.924E-12 5.472E-12 5.935E-12 6.343E-12 
    12 6 2 2.320E-13 2.707E-13 3.068E-13 3.189E-13 3.550E-13 4.099E-13 4.757E-13 5.476E-13 6.230E-13 7.007E-13 7.796E-13 8.592E-13 9.394E-13 1.345E-12 1.759E-12 2.607E-12 3.463E-12 4.303E-12 5.113E-12 5.888E-12 6.626E-12 7.329E-12 7.998E-12 1.090E-11 1.323E-11 1.510E-11 1.659E-11 
+0

你有沒有興趣只是線性的,或者可能您還可以使用二次?我問,因爲數據看起來並不是直線,而且二次曲線應該更合適。 –

+0

二次方應該也適用於我正在做的事情。我只是不知道如何做到這一點。 – Cosmoman

+1

根據https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html上的numpy文檔,您可以用np.polyfit替換對np.polyfit(Delta,C_Values,1)的每個調用(Delta,C_Values,2)以適合2次多項式。現在將打印三個參數值。 –

回答

1

您可以通過使用plt.subplots()創建幾個次要情節。然後,您可以迭代子圖並將數據繪製到相應的子圖中,如下所示。

import numpy as np; np.random.seed(1) 
import matplotlib.pyplot as plt 

y = np.random.normal(size=(36,12)) 
x = np.random.rayleigh(size=(36,12)) 
x0 = np.linspace(0,3) 

fig, axes = plt.subplots(ncols=3, nrows=4, sharex=True, sharey=True, figsize=(7,7)) 

for i, ax in enumerate(axes.flatten()): 
    ax.scatter(x[:,i], y[:,i], s=10) 
    m, b = np.polyfit(x[:,i], y[:,i], 1) 
    ax.plot(x0, m*x0+b, lw=1., label="y={:.2f}x+{:.2f}".format(m,b)) 
    ax.legend() 

plt.tight_layout()  
plt.show() 

enter image description here

+0

我收到一個元組錯誤,當我嘗試修改這個到我的code.TypeError:列表索引必須是整數,而不是元組 – Cosmoman

+0

對於未知代碼中發生的錯誤,無法說出任何內容。當報告錯誤時,您當然應該提供重現錯誤的代碼(參見[mcve])以及發生錯誤的行顯而易見的完整回溯。 – ImportanceOfBeingErnest