Связанный .lib-файл связан с .dll
У меня была такая же проблема. Скажем, у меня есть проекты MyProject и TestProject. Я эффективно связал файл lib для MyProject с TestProject. Однако этот файл lib был создан, так как была построена DLL для MyProject. Кроме того, я не содержал исходный код для всех методов в MyProject, но только доступ к точкам входа DLL.
Чтобы решить проблему, я построил MyProject как LIB и связал TestProject с этим .lib-файлом (скопируйте вложенный файл .lib в папку TestProject). Затем я смогу снова создать MyProject как DLL. Он компилируется, поскольку lib, с которым связан TestProject, содержит код для всех методов в классах MyProject.
Если вы хотите сохранить фигуру после ее отображения, вам нужно удержать экземпляр фигуры. Причина, по которой 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')
pyplot.show блокирует и разрушает график при закрытии. Вы можете использовать
plt.show(block=False)
, после чего будет сохранено сохранение в fig2.pdf, или вы можете его распечатать еще до сохранения
plt.plot(x,y)
plt.savefig('fig2.pdf')
Я должен был запустить plt.cla()
и plt.clf()
перед построением второго. Очистить текущие оси и график четкого тока соответственно.