Nano Hash - криптовалюты, майнинг, программирование

Сохранение рисунков Python SymPy с определенным разрешением/плотностью пикселей

Мне интересно, есть ли способ изменить плотность пикселей/разрешение симпатичных графиков. Например, давайте рассмотрим простой фрагмент кода ниже:

import sympy as syp

x = syp.Symbol('x')
miles_to_km = x * 1.609344
miles_to_km.evalf()

graph = syp.plot(miles_to_km, show=False)
graph.save('./figures/miles_to_km.png')
graph.show()

введите здесь описание изображения

Заметки:

  • Когда я попытался использовать graph.savefig, я получил AttributeError: 'Plot' object has no attribute 'saveimage'. Я наткнулся на метод saveimage в каком-то онлайн-ресурсе, и мне показалось, что это был распространенный подход — я думаю, API изменился?

  • graph.save('./figures/miles_to_km.png', dpi=300) выдает ошибку типа: TypeError: save() got an unexpected keyword argument 'dpi'

  • Использование атрибута dpi в plot не вызывает никаких ошибок, но и не влияет на качество изображения: graph = syp.plot(miles_to_km, dpi=300, show=False)

Я также пытался использовать бэкэнд matplotlib:

plt.figure()
graph = syp.plot(miles_to_km, show=False)
#graph.save('./figures/miles_to_km.png')
plt.savefig('./figures/miles_to_km.png')
graph.show()

где plt = matplotlib.pyplot. Однако холст пуст. Также актуальная информация может заключаться в том, что я запускаю ее в блокноте IPython с включенным %matplotlib inline.

  • Я использую SymPy версии 0.7.6.

обходной путь backend ниже показывает график в блокноте IPython, но также создает белый холст (как png)

graph = syp.plot(miles_to_km, show=False)
backend = graph.backend(graph)
backend.fig.savefig('ch01_2.png', dpi=300)
backend.show()

введите здесь описание изображения

ИЗМЕНИТЬ и решение:

Благодаря ответу Cody Piersall проблема теперь решена. Я обновился до IPython 4.0 (ноутбук Jupyter) и построил его следующим образом.

graph = syp.plot(miles_to_km, show=False)
backend = graph.backend(graph)
backend.process_series()
backend.fig.savefig('miles_to_km.png', dpi=300)
backend.show()
22.08.2015

Ответы:


1

Предполагая, что вы используете бэкэнд matplotlib, который используется по умолчанию, если у вас установлен matplotlib, вам просто нужно import matplotlib.pyplot и использовать pyplot.savefig.

Это работает, потому что sympy использует matplotlib для построения графиков, а поскольку matplotlib поддерживает состояние, он знает, с каким графиком вы работаете.

Вот ваш пример, но с помощью savefig для сохранения в png.

import sympy as syp

x = syp.Symbol('x')
miles_to_km = x * 1.609344
miles_to_km.evalf()

graph = syp.plot(miles_to_km, show=False)

# Does not work in IPython Notebook, but works in a script.
import matplotlib.pyplot as plt
plt.savefig('./figures/miles_to_km.png', dpi=300)

Если вы находитесь в блокноте IPython, вышеперечисленное не будет работать, но вы все равно можете сохранить их с указанным разрешением. Вы просто должны быть немного хитрыми об этом.

# works in IPython Notebook
backend = graph.backend(graph)
ackend.fig.savefig('300.png', dpi=300)
backend.fig.savefig('20.png', dpi=20)
22.08.2015
  • Спасибо, я забыл упомянуть, что тоже пробовал, но холст просто пустой. Даже если я создам экземпляр plt.figure() до симпатичного сюжета. Возможно, мне следует упомянуть, что я запускаю его в ноутбуке IPython, используя интерактивный режим. 22.08.2015
  • @SebastianRaschka А! Он работает всякий раз, когда он находится в сценарии, но я только что попробовал это и в блокноте IPython, и это не сработало. Я не уверен, почему... 22.08.2015
  • Хм, может это баг или еще одна особенность интерактивного режима. В любом случае, давайте посмотрим, есть ли у кого-то идеи, если нет, я открою вопрос в репозитории github. Сейчас это не так уж и важно, но мне было бы очень удобно. Я только начал работать над новой книгой, и мне нравится иметь блокноты IPython в качестве дополнительного ресурса для читателя, в то время как я хочу использовать изображения в самой книге. 22.08.2015
  • @SebastianRaschka У меня есть обходной путь, который вы можете использовать по своему желанию. 22.08.2015
  • Большое спасибо за быстрый совет, но у меня все еще есть проблема с пустым png, когда я использую этот подход. Может быть, я что-то упускаю? Я разместил код выше. 22.08.2015
  • @SebastianRaschka, может быть, перезапустить ядро ​​ноутбука? У меня это работает на Python 3.4 в Ubuntu, но я видел ту же проблему, что и вы, с пустыми png-файлами ранее. :/ 22.08.2015
  • Давайте продолжим обсуждение в чате. 22.08.2015
  • Ответ сработал отлично. Возможно, было бы полезно добавить решение и в ответ; Я пропустил это, когда читал вопрос :) 11.06.2018

  • 2

    Эта проблема была исправлена, теперь вы можете просто использовать это:

    graph = sympy.plot(f, show = False)
    graph.save('fig.png')
    

    К сожалению, кажется, что это не позволяет выбрать dpi.

    11.10.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..