Ответ 1
В соответствии с docs savefig
принимает путь к файлу, поэтому все, что вам нужно, это указать полный (или относительный) путь вместо имени файла.
Вот простой код, который генерирует и сохраняет изображение графика в том же каталоге, что и в коде. Теперь, есть способ, которым я могу сохранить его в каталоге выбора?
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(100))
fig.savefig('graph.png')
В соответствии с docs savefig
принимает путь к файлу, поэтому все, что вам нужно, это указать полный (или относительный) путь вместо имени файла.
Если каталог, который вы хотите сохранить, является подкаталогом вашего рабочего каталога, просто укажите относительный путь до имени вашего файла:
fig.savefig('Sub Directory/graph.png')
Если вы хотите использовать абсолютный путь, импортируйте модуль os:
import os
my_path = os.path.abspath(__file__) # Figures out the absolute path for you in case your working directory moves around.
...
fig.savefig(my_path + '/Sub Directory/graph.png')
Если вы не хотите беспокоиться о ведущей косой черте перед именем подкаталога, вы можете объединить пути разумно следующим образом:
import os
my_path = os.path.abspath(__file__) # Figures out the absolute path for you in case your working directory moves around.
my_file = 'graph.png'
...
fig.savefig(os.path.join(my_path, my_file))
Здесь фрагмент кода, который сохраняет график в выбранном каталоге. Если каталог не существует, он создается.
import os
import matplotlib.pyplot as plt
script_dir = os.path.dirname(__file__)
results_dir = os.path.join(script_dir, 'Results/')
sample_file_name = "sample"
if not os.path.isdir(results_dir):
os.makedirs(results_dir)
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.savefig(results_dir + sample_file_name)
Вот простой пример для сохранения в каталоге (внешний USB-накопитель) с использованием Python версии 2.7.10 с редактором Sublime Text 2:
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256, endpoint = True)
C, S = np.cos(X), np.sin(X)
plt.plot(X, C, color = "blue", linewidth = 1.0, linestyle = "-")
plt.plot(X, S, color = "red", linewidth = 1.0, linestyle = "-")
plt.savefig("/Volumes/seagate/temp_swap/sin_cos_2.png", dpi = 72)
Вы можете указать имя каталога вместе с именем файла или сделать, как указано в предыдущих ответах
plt.savefig("/home/dir/subdir/filename.png")
В дополнение к уже предоставленным ответам, если вы хотите создать новый каталог, вы можете использовать эту функцию:
def mkdir_p(mypath):
'''Creates a directory. equivalent to using mkdir -p on the command line'''
from errno import EEXIST
from os import makedirs,path
try:
makedirs(mypath)
except OSError as exc: # Python >2.5
if exc.errno == EEXIST and path.isdir(mypath):
pass
else: raise
а затем:
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(100))
# Create new directory
output_dir = "some/new/directory"
mkdir_p(output_dir)
fig.savefig('{}/graph.png'.format(output_dir))