В настоящее время я выполняю тестовый проект, в котором я запускаю разные тесты и сохраняю их время выполнения в файлах. Затем я беру эти результаты и создаю график, который затем сравнивает тестовый прогон с его собственными более ранними результатами. Некоторые из кода довольно сложны, и я довольно долго озадачил меня, почему я иногда получаю больше сюжетов, чем должен. Я постараюсь предоставить всю необходимую информацию.Matplotlib иногда добавляет больше графиков к графику, чем он должен
Каждый тест имеет несколько наборов данных, и сохраняются в формате .txt, как это:
name: runtime
Example: dataset #1: 8198
Я нахожу все старые тесты с использованием glob.glob, и она работает просто отлично. Он находит более старые результаты только одного теста. Я знаю, что проблема заключается не в поиске результатов. Также результаты просто прекрасны, иногда есть неверный результат, но я отфильтровываю их просто отлично, поэтому используются только действительные результаты.
Я беру путь от результата, который я только что получил, и создаю график, найдя все более старые результаты. Я создаю пустой список (Called x) от 0 до n, который я использую для создания xticks, так как я хочу, чтобы пользовательские тики по оси x (имена коммитов).
# Get all older and current results from a given test
outputs = getValidResults(path)
# Stores the runs in a list like:
# [[dataset1 run1, dataset1 run2],[datset2 run1, dataset2 run2]]
runs = getAllRuns(outputs)
# Names used for xticks
commits = getAllCommits(path)
# Name of the test
testName = getTestName(path)
x = []
for m in range(0, len(outputs)):
x.append(m)
for n in range(0, dataset_amount):
y = []
for run in runs:
y.append(run[n])
plt.xticks(x, commits, rotation=70)
logger.debug('x is: {} and y is: {}'.format(x,y))
plt.plot(x, y, 'o-')
plt.ylabel('Build/run time in microseconds')
plt.xlabel('Commit')
lgd = plt.legend(datasets, bbox_to_anchor=(1, 0.5), loc='center left', fancybox=True)
plt.title(testName)
plt.grid(True)
plt.tight_layout()
plt.savefig(savePath, bbox_extra_artists=(lgd,), bbox_inches='tight')
Теперь вы заметите, что я регистрирую каждый раз, когда строятся значения x и y. И когда я смотрю в моем журнале я получаю, что он только пытался добавить участок один раз, и даже тогда оба были пусты:
[2016-06-02 11:29:16,684] - {DEBUG:htmlgen.py:197} - x is: [] and y is: []
Однако он по-прежнему сохраняет график, и график, который выходит это:
результаты все не так, во-первых, как вы можете увидеть в легенде этот тест имеет только один набор данных. У него не могло быть больше одного. Еще одна интересная вещь, которую следует отметить, заключается в том, что результаты на графике взяты из другого теста, который был создан непосредственно перед этим. Это заставляет меня поверить, что как-то он повторяет те же результаты, может быть, проблема памяти?
Я попытался войти каждую переменную, и все они пусты, ожидайте для набора данных, который является правильным:
[2016-06-02 11:29:16,650] - {DEBUG:htmlgen.py:167} - Average is: []
[2016-06-02 11:29:16,650] - {DEBUG:htmlgen.py:168} - Commits found: [].
[2016-06-02 11:29:16,650] - {DEBUG:htmlgen.py:169} - Datasets found: ['fluid-n_steps=1-n_solver_steps=40-grid_res=100.input:'].
[2016-06-02 11:29:16,650] - {DEBUG:htmlgen.py:170} - Dataset length: 1
[2016-06-02 11:29:16,650] - {DEBUG:htmlgen.py:171} - Outputs found: []
[2016-06-02 11:29:16,683] - {DEBUG:htmlgen.py:180} - Trying to create plot points...
[2016-06-02 11:29:16,684] - {DEBUG:htmlgen.py:197} - x is: [] and y is: []
[2016-06-02 11:29:16,686] - {DEBUG:htmlgen.py:199} - Successfully created plot points.
Он не находит никаких результатов на всех, но почему-то до сих пор делает граф, даже несмотря на то, что на самом деле ничего не сделано в коде.
Интересно также отметить, что первый график, который я делаю, всегда прекрасен. Однако со второго и на графиках повторно используются результаты из созданного графика.
Кто-нибудь испытал или увидел что-нибудь подобное? Где matplotlib повторно использует datapoints из графиков, созданных ранее, а не из фактического графика?
Спасибо, что на самом деле решили! – cenh