Ich erstelle ein paar pdf-Plots mit Matplotlib, die aus 400 Unterplots besteht. Jeder hat nur 5 Datenpunkte. Es dauert 420 s auf einem guten Computer, um 5 pdf-Bild zu speichern. Gibt es eine Möglichkeit, den Code zu optimieren, oder ist es nur normal für Matplotlib?Matplotlib sehr langsam. Es ist normal?
Teil des Codes für das Plotten:
plot_cnt = 1
for k in np.arange(K_min, K_max + 1):
for l in np.arange(L_min, L_max + 1):
ax = plt.subplot(grid[0], grid[1], plot_cnt)
plot_cnt += 1
plt.setp(ax, 'frame_on', False)
ax.set_ylim([-0.1, 1.1])
ax.set_xlabel('K={},L={}'.format(k, l), size=3)
ax.set_xlim([-0.1, 4.1])
ax.set_xticks([])
ax.set_yticks([])
ax.grid('off')
ax.plot(np.arange(5), (data['S1']['Azimuth'][:, k - 1, l + offset_l] + \
data['S1']['Delta Speed'][:, k - 1, l + offset_l] + \
data['S1']['Speed'][:, k - 1, l + offset_l])/3,
'r-o', ms=1, mew=0, mfc='r')
ax.plot(np.arange(5), data['S2'][case][:, k - 1, l + offset_l],
'b-o', ms=1, mew=0, mfc='b')
plt.savefig(os.path.join(os.getcwd(), 'plot-average.pdf'))
plt.clf()
print 'Final plot created.'
Schluss Bild:
400 Subplots scheint viel für mich. Selbst wenn Sie nicht viele Daten haben, kann matplotlib nicht optimiert werden, um diese Art von Gittern anzuzeigen. – Simon
@Simon, ist es möglich, mit einem großen Subplot zu plotten? Dann sollte jede fünf verbunden sein. Irgendeine Idee? – rowman
Ich habe nicht die richtige Umgebung, um die Tests durchzuführen, aber es gibt ein paar Dinge, die Sie tun können. Der erste Schritt besteht darin, den Profiler auf Ihrem Code auszuführen (siehe [hier] (http://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script) für weitere Informationen). Mit dieser können Sie feststellen, wo die Zeit verbracht wird. Die zwei Dinge, die Sie versuchen könnten, ist, eine Ressource zu finden, die bei jedem Schritt freigegeben wird, oder die Plots in mehreren Prozessen mit [Multiprocessing] zu erstellen (http://docs.python.org/library/multiprocessing.html). Wenn ich die Zeit finde, werde ich das versuchen, aber in diesem Stadium kann ich nichts garantieren – Simon