gnuplot против Matplotlib
Matplotlib = простота использования, Gnuplot = (немного лучше) производительность
Я знаю, что это старое сообщение, и gnuplot я ответил на него, но я проходил matplotlib мимо и хотел вложить свои python-interpreter два цента. Вот мой вывод: если python у вас не очень большой набор plt данных, вам следует использовать pythonic Matplotlib. Так проще и лучше py выглядит. Однако, если вам plt действительно нужна производительность, вы python-shell можете использовать Gnuplot. Я py добавил код, чтобы протестировать pythonista его на вашем компьютере и py убедиться, действительно python-interpreter ли он имеет значение (это plt не настоящий тест производительности, но python-shell он должен дать первое представление).
На logging следующем графике показано pylab необходимое время (в секундах), чтобы:
- Постройте график случайного рассеяния.
- Сохранить график в файл PNG.
Конфигурация:
- gnuplot: 5.2.2
- gnuplot-py: 1.8
- matplotlib: 2.1.2
Я matplotlib помню, что разрыв в производительности logger был намного больше при работе pythonic на старом компьютере со старыми gnuplot версиями библиотек (разница pythonic ~ 30 секунд для большой диаграммы pythonic разброса).
Более того, как pythonista уже упоминалось в комментариях, вы logging можете получить сюжеты аналогичного logger качества. Но вам придется plt приложить больше усилий, чтобы log сделать это с помощью Gnuplot.
Here's the code to generate the graph, если logger вы хотите попробовать его log на своем компьютере:
# -*- coding: utf-8 -*-
from timeit import default_timer as timer
import matplotlib.pyplot as plt
import Gnuplot, Gnuplot.funcutils
import numpy as np
import sys
import os
def mPlotAndSave(x, y):
plt.scatter(x, y)
plt.savefig('mtmp.png')
plt.clf()
def gPlotAndSave(data, g):
g("set output 'gtmp.png'")
g.plot(data)
g("clear")
def cleanup():
try:
os.remove('gtmp.png')
except OSError:
pass
try:
os.remove('mtmp.png')
except OSError:
pass
begin = 2
end = 500000
step = 10000
numberOfPoints = range(begin, end, step)
n = len(numberOfPoints)
gnuplotTime = []
matplotlibTime = []
progressBarWidth = 30
# Init Gnuplot
g = Gnuplot.Gnuplot()
g("set terminal png size 640,480")
# Init matplotlib to avoid a peak in the beginning
plt.clf()
for idx, val in enumerate(numberOfPoints):
# Print a nice progress bar (crucial)
sys.stdout.write('\r')
progress = (idx+1)*progressBarWidth/n
bar = "▕" + "▇"*progress + "▁"*(progressBarWidth-progress) + "▏" + str(idx) + "/" + str(n-1)
sys.stdout.write(bar)
sys.stdout.flush()
# Generate random data
x = np.random.randint(sys.maxint, size=val)
y = np.random.randint(sys.maxint, size=val)
gdata = zip(x,y)
# Generate string call to a matplotlib plot and save, call it and save execution time
start = timer()
mPlotAndSave(x, y)
end = timer()
matplotlibTime.append(end - start)
# Generate string call to a gnuplot plot and save, call it and save execution time
start = timer()
gPlotAndSave(gdata, g)
end = timer()
gnuplotTime.append(end - start)
# Clean up the files
cleanup()
del g
sys.stdout.write('\n')
plt.plot(numberOfPoints, gnuplotTime, label="gnuplot")
plt.plot(numberOfPoints, matplotlibTime, label="matplotlib")
plt.legend(loc='upper right')
plt.xlabel('Number of points in the scatter graph')
plt.ylabel('Execution time (s)')
plt.savefig('execution.png')
plt.show()
python
logging
matplotlib
gnuplot
graphing
gnuplot против Matplotlib
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.