Tôi đang tạo một vài ô pdf với matplotlib bao gồm 400 ô con. Mỗi người chỉ có 5 điểm dữ liệu. Phải mất 420 s trên một máy tính tốt để tiết kiệm 5 hình ảnh pdf. Có cách nào để tối ưu hóa mã hoặc nó chỉ là bình thường đối với matplotlib?matplotlib rất chậm. Nó có bình thường không?
Phần mã cho âm mưu:
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.'
Ảnh cuối cùng:
400 điểm phụ có vẻ là rất nhiều đối với tôi. Ngay cả khi bạn không có nhiều dữ liệu, matplotlib có thể không được tối ưu hóa để hiển thị loại lưới này. – Simon
@Simon, là nó có thể âm mưu bằng cách sử dụng một subplot lớn duy nhất? Sau đó, mỗi năm nên được kết nối. Bất kỳ ý tưởng? – rowman
Tôi không có môi trường phù hợp để chạy thử nghiệm, nhưng có một vài điều bạn có thể làm. Bước đầu tiên là chạy profiler trên mã của bạn (xem [here] (http://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script) để biết thêm thông tin). Với điều này, bạn có thể xác định vị trí thời gian được sử dụng. Hai điều bạn có thể thử là tìm một số tài nguyên để phát hành ở từng bước hoặc để tạo các ô trong một số quy trình bằng cách sử dụng [đa xử lý] (http://docs.python.org/library/multiprocessing.html). Nếu tôi tìm thấy thời gian tôi sẽ cố gắng này, nhưng ở giai đoạn này tôi không thể đảm bảo bất cứ điều gì – Simon