Морской спасательные пустые графы [дубликат]

Связанный .lib-файл связан с .dll

У меня была такая же проблема. Скажем, у меня есть проекты MyProject и TestProject. Я эффективно связал файл lib для MyProject с TestProject. Однако этот файл lib был создан, так как была построена DLL для MyProject. Кроме того, я не содержал исходный код для всех методов в MyProject, но только доступ к точкам входа DLL.

Чтобы решить проблему, я построил MyProject как LIB и связал TestProject с этим .lib-файлом (скопируйте вложенный файл .lib в папку TestProject). Затем я смогу снова создать MyProject как DLL. Он компилируется, поскольку lib, с которым связан TestProject, содержит код для всех методов в классах MyProject.

32
задан andreasdr 19 February 2014 в 18:24
поделиться

3 ответа

Если вы хотите сохранить фигуру после ее отображения, вам нужно удержать экземпляр фигуры. Причина, по которой plt.savefig не работает после вызова show, заключается в том, что текущий показатель был сброшен.

pyplot отслеживает, какие цифры, оси и т. Д. Являются «текущими» (т.е. имеют пока не отображается с show) за кадром. gcf и gca получают текущие экземпляры фигур и текущих осей соответственно. plt.savefig (и, по существу, любой другой метод pyplot) просто выполняет plt.gcf().savefig(...). Другими словами, получите текущий экземпляр фигуры и вызовите его метод savefig. Аналогично plt.plot в основном выполняет plt.gca().plot(...).

После вызова show список «текущих» фигур и осей пуст.

В общем, вы лучше прямое использование экземпляров фигур и осей для создания / сохранения / показа / etc, вместо использования plt.plot и т. д., чтобы неявно получить текущую цифру / оси и график на ней. Нет ничего плохого в использовании pyplot для всего (особенно в интерактивном режиме), но это облегчает стрельбу в ногу.

Используйте pyplot для plt.show() и для создания фигуры и объекта (ов) осей, но затем используйте методы с цифрами или осями напрямую. (например, ax.plot(x, y) вместо plt.plot(x, y) и т. д.) Основное преимущество этого заключается в том, что оно явное. Вы знаете, на каких объектах вы работаете, и не нужно рассуждать о том, что делает машина состояния pyplot (хотя и не так сложно понять интерфейс состояния и машины).

As пример «рекомендуемого» способа делать что-то вроде:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 100)
y = x**2

fig, ax = plt.subplots()
ax.plot(x, y)
fig.savefig('fig1.pdf')
plt.show()
fig.savefig('fig2.pdf')

Если вы предпочитаете использовать интерфейс pyplot для всего, то просто возьмите экземпляр фигуры, прежде чем вы вызовете show. Например:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 100)
y = x**2

plt.plot(x, y)
fig = plt.gcf()
fig.savefig('fig1.pdf')
plt.show()
fig.savefig('fig2.pdf')
40
ответ дан Joe Kington 25 August 2018 в 21:12
поделиться

pyplot.show блокирует и разрушает график при закрытии. Вы можете использовать

plt.show(block=False)

, после чего будет сохранено сохранение в fig2.pdf, или вы можете его распечатать еще до сохранения

plt.plot(x,y)
plt.savefig('fig2.pdf')
3
ответ дан miles82 25 August 2018 в 21:12
поделиться

Я должен был запустить plt.cla() и plt.clf() перед построением второго. Очистить текущие оси и график четкого тока соответственно.

1
ответ дан Nick Desaulniers 25 August 2018 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: