我有幾個使用matplotlib創建的子圖。一旦我繪製數據,我需要返回並在for循環中的數據點之間畫線。我的數據文件很大,這需要蟒蛇很長一段時間...matplotlib加快循環中的繪圖線
有沒有辦法加快速度?這裏是我的代碼:
def generateHistogram(x, y, ax):
x = np.log10(x)
xerror = []
numData = len(x)
plt.rcParams['lines.solid_capstyle'] = 'butt'
for dataIndex in range(0, numData-1):
xerror.append(np.divide(np.subtract(x[dataIndex+1], x[dataIndex]), 2.0))
for errorIndex in range(0, len(x)):
if (errorIndex == 0):
ax.semilogx((np.power(10, (x[errorIndex]-xerror[errorIndex])), np.power(10, x[errorIndex])),
(y[errorIndex], y[errorIndex]), linewidth=2, color='k')
if (errorIndex == len(xerror)):
ax.semilogx((np.power(10, x[errorIndex]), np.power(10, (x[errorIndex]+xerror[errorIndex-1]))),
(y[errorIndex], y[errorIndex]), linewidth=2, color='k')
if (errorIndex < len(xerror)):
ax.semilogx((np.power(10, x[errorIndex]), np.power(10, (x[errorIndex]+xerror[errorIndex]))),
(y[errorIndex], y[errorIndex]), linewidth=2, color='k')
ax.semilogx((np.power(10, (x[errorIndex+1]-xerror[errorIndex])), np.power(10, x[errorIndex+1])),
(y[errorIndex+1], y[errorIndex+1]), linewidth=2, color='k')
verticleLineXPos = np.power(10, (x[errorIndex]+xerror[errorIndex]))
ax.semilogx((verticleLineXPos, verticleLineXPos), (y[errorIndex], y[errorIndex+1]),
linewidth=2, color='k')
return xerror;
這基本上借鑑了各自在我需要的位置次要情節(其中x軸是在semilogx規模)的線。你有任何改善表現的建議嗎?
你能否提供一個_minimal_例子,說明在這種情況下x和y是什麼樣的數據結構?如果這些是一維數組,你的第一個循環是'xerror = np.diff(x)/ 2'。你能發表你想要做什麼的照片嗎?你可能也想看看一個'LineCollection'藝術家。 – tacaswell
x,y和xerror數據結構都只是一個浮點列表。這些循環用於計算我需要繪製的線的長度和位置。這個細節對這個問題並不重要。 我在問如何在matplotlib的情節中高效地繪製多條線。 LineCollection實際上在繪製每個表現的過程中是否會提高性能?有沒有辦法讓速度更快? – grover
這可能會更好地放在http://codereview.stackexchange.com – tom