Как использовать Matplotlib для сохранения изображения, созданного с помощью ggplot?

Пока эта часть работает

import matplotlib.pyplot as plt
from ggplot import *
import numpy as np
import pandas as pd

df = pd.DataFrame({'Height':np.random.randn(10),
                   'Weight':np.random.randn(10),
                   'Gender': ["Male","Male","Male","Male","Male",
                              "Female","Female","Female","Female","Female"]})
p=ggplot(aes(x='Height', y='Weight', color='Gender'), data=df)  + geom_point()
p.make()
fig = plt.gcf()
ax = plt.gca()
fig.set_figwidth(25, forward=True)
plt.show()

когда я пытаюсь сохранить изображение, оно с треском проваливается, генерируя пустое изображение.

plt.savefig("image.tiff", dpi=300)

Есть идеи? Спасибо!

3 ответа

Решение

Я успешно сохранил рисунок в файл, используя объект ggplot saveметод. Вот пример:

p.save('image.tiff', width=12, height=8, dpi=144)

Для получения дополнительной информации см. Комментарий @Johan в этом ответе SO, найденный здесь исходный код или пример в ggplot | документы найдены здесь.

С точки зрения установки размера на экране, кажется, что это невозможно с текущим API. Возможный взлом состоит в том, чтобы клонировать репо и изменить строку 624 так, чтобы она была следующей:

self.fig, self.subplots = plt.subplots(subplot_kw=subplot_kw, figsize=(my_x, my_y)

где my_x и my_y - это размеры x и y, которые вы хотели бы видеть на экране. Затем используйте show метод:

p.show()

Спасибо всем комментариям - это то, что в итоге получилось. Небольшое повторение в коде, но оно наконец работает.

import matplotlib.pyplot as plt
from ggplot import *
import numpy as np
import pandas as pd

df = pd.DataFrame({'Height':np.random.randn(10),
                   'Weight':np.random.randn(10),
                   'Gender': ["Male","Male","Male","Male","Male",
                              "Female","Female","Female","Female","Female"]})
p=ggplot(aes(x='Height', y='Weight', color='Gender'), data=df)  + geom_point()
p.make()
fig = plt.gcf()
ax = plt.gca()

w,h=25,10 #set width and height for both screen and file size

#this part prints on screen the chart
fig.set_figwidth(w, forward=True)  #screen
fig.set_figheight(h, forward=True) #screen
plt.show()

#this part saves it to file
p.save(filename, width=w, height=h, dpi=300) #file

Ты пробовал с ggsave(plot = p, filename = 'image.tiff') или же p.save('image.tiff')?

EDIT ggsave был удален из ggplot, используйте второе решение вместо.

Другие вопросы по тегам