Научный форум dxdy
Вывожу график на экран у матлабовского GUI есть кнопка сохранить как рисунок(Save figure) но мне надо сохранить не то что вижу, ибо мелко, а как если бы я увеличил область, но сохранить так весь график.
вообщем мне надо сохранить как картинку целиком увеличенный график.
например когда я вывожу точки на экран, мин расстояние(ну или среднее) между точками было скажем 2 пикселя пусть даже выходное изображение будет 5000х5000.
Re: matlab сохранение графика
20.09.2012, 15:35
| Экс-модератор |
не знаю, что там у Вас за графики — с матлабовским GUI мало работал, но если там стандартный график со стандартным меню, то тут два пути:
1) сохранять как векторный рисунок, а не растровый
2) предварительно выставив в опциях копирования, чтобы в буфер обмена копировало рисунок в векторном формате, скопировать его и вставить в какой-то редактор векторной графики (например, CorelDraw), а затем сохранить в удобный вам вескторный формат или экспортировав в растровый с нужным вам разрешением/размером
| Страница 1 из 1 | [ Сообщений: 2 ] |
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей
| Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
Сохранить график как изображение с помощью Matplotlib
Matplotlib — одна из наиболее широко используемых библиотек визуализации данных в Python. Обычно графики и визуализации Matplotlib делятся с другими.
В этой статье мы рассмотрим, как сохранить график в виде файла изображения с помощью Matplotlib.
Создание сюжета
Сначала создадим простой сюжет:
import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.sin(x) plt.plot(x, y) plt.show()
Здесь мы построили синусоидальную функцию, начиная с 0 и заканчивая 10 с шагом 0.1 . Выполнение этого кода дает:

Теперь давайте посмотрим, как мы можем сохранить эту фигуру как изображение.
Сохранить график как изображение в Matplotlib
В предыдущем примере мы сгенерировали график с помощью функции plot() , передав данные, которые мы хотели бы визуализировать.
Этот график создается, но не отображается нам, если мы не вызываем функцию show() . Функция show() , как следует из названия, показывает сгенерированный участок пользователю в окне.
После создания мы также можем сохранить этот рисунок / график как файл — используя функцию savefig() :
import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.sin(x) plt.plot(x, y) plt.savefig('saved_figure.png')
Теперь, когда мы запускаем код, вместо всплывающего окна с графиком у нас есть файл ( saved_figure.png ) в каталоге нашего проекта.
Этот файл содержит точно такое же изображение, которое мы бы показывали в окне:

Стоит отметить, что функция savefig() не уникальна для экземпляра plt . Вы также можете использовать его на объекте Figure :
import matplotlib.pyplot as plt import numpy as np fig = plt.figure() x = np.arange(0, 10, 0.1) y = np.sin(x) plt.plot(x, y) fig.savefig('saved_figure.png')
У функции savefig() есть обязательный аргумент filename . Здесь мы указали имя файла и формат.
Кроме того, она принимает другие варианты, такие как dpi , transparent , bbox_inches , quality и т.д.
В следующих разделах мы рассмотрим некоторые популярные варианты.
Настройка разрешения изображения
Параметр DPI определяет количество точек (пикселей) на дюйм. По сути, это разрешение создаваемого изображения. Давайте протестируем несколько разных вариантов:
import matplotlib.pyplot as plt import numpy as np fig = plt.figure() x = np.arange(0, 10, 0.1) y = np.sin(x) plt.plot(x, y) fig.savefig('saved_figure-50pi.png', dpi = 50) fig.savefig('saved_figure-100dpi.png', dpi = 100) fig.savefig('saved_figure-1000dpi.png', dpi = 1000)
Это приводит к появлению трех новых файлов изображений на нашем локальном компьютере, каждый с разным DPI:

Значение по умолчанию — 100 .
Сохраните прозрачное изображение с помощью Matplotlib
Аргумент transparent может быть использован для создания участка с прозрачным фоном. Это полезно, если вы будете использовать графическое изображение в презентации, на бумаге или хотите представить его в настройках индивидуального дизайна:
import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.sin(x) plt.plot(x, y) plt.savefig('saved_figure.png', transparent=True)
Если мы поместим это изображение на темный фон, это приведет к:

Изменение цвета графика
Вы можете изменить цвет подложки, используя аргумент facecolor . Он принимает color и по умолчанию white .
Изменим его на red :
import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.sin(x) plt.plot(x, y) plt.savefig('saved_figure-colored.png', facecolor = 'red')

Настройка границы изображения
Аргумент bbox_inches принимает строку и определяет границу вокруг граффика. Если мы хотим установить его так tight , то есть максимально обрезать рамку, мы можем установить аргументу bbox_inches значение ‘tight’ :
import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.sin(x) plt.plot(x, y) plt.savefig('saved_figure-tight.png', bbox_inches = 'tight', facecolor='red')
В результате получается плотно упакованная коробка. Это легче визуализировать, если для справки раскрасить края другим цветом:

Вывод
В этом уроке мы рассмотрели несколько способов сохранить график в виде файла изображения с помощью Matplotlib.
Как сделать анимацию в MATLAB и сохранить видео в формате mp4

Часто учёным намного проще анализировать данные, когда они представлены в виде анимации. Сегодня мы сделаем простую анимацию в MATLAB и сохраним её в виде видео-файла в формате MPEG-4.
Для построения картинок мы будем использовать NCEP/NCAR Reanalysis с этого сайта. Я скачал ежедневные значения температуры воздуха у поверхности для 2018 года. Если хотите себе такие же, прямая ссылка вот.
Для начала загрузим наши данные в рабочую область Matlab:
air = ncread('air.sig995.2018.nc','air')-273.15; lat = ncread('air.sig995.2018.nc','lat'); lon = ncread('air.sig995.2018.nc','lon');
Обратите внимание, что мы вычли 273.15 из значений температуры, для того чтобы перевести их в градусы Цельсия (исходные данные в Кельвинах). Для последующих построений нам нужно будет перевести векторы lat и lon в матрицы:
[lon,lat]=ndgrid(lon,lat);
Вектор с датами проще будет создать вручную:
t = datetime(2018,01,01):datetime(2018,12,31);
Теперь можно построить карту. Пока, всё что мы делаем и дальнейшие построения карт не должны вызывать сложностей, так как всё уже было описано здесь на сайте. Однако на всякий случай сделаю некоторые краткие комментарии.
Строим карту (подложку) и ориентируем её так, чтобы по центру располагался 180 градус долготы:
worldmap('world') setm(gca,'Origin', [0 180 0])
Строим карту распределения температуры для первой даты нашего массива и добавляем на рисунок colorbar:
geoshow(lat,lon,air(. 1),'displaytype','texture') colorbar
Строим для ориентировки береговую черту и закрашиваем её белым цветом (белый только контур, сами берега прозрачные):
geoshow('landareas.shp','FaceColor','none','EdgeColor','w')
В качестве заголовка к рисунку используем дату:
title(datestr(t(1)))
Ну и при желании заменяем цветовую шкалу (сработает только если у вас установлен пакет cmocean):
cmocean('thermal')
Все строки кода для построения выглядят так:
worldmap('world') setm(gca,'Origin', [0 180 0]) geoshow(lat,lon,air(. 1),'displaytype','texture') geoshow('landareas.shp','FaceColor','none','EdgeColor','w') cmocean('thermal') colorbar title(datestr(t(1)))
и приводят к следующему результату:

Допустим, вам нужно посмотреть на картину в динамике, т.е. в нашем случае — посмотреть, как изменяется температура со временем. Можно создать цикл и просто смотреть, как постепенно строятся картинки одна за одной. Если у вас не слишком мощный компьютер, то этот вариант будет выглядеть как анимация. Если же у вас мощный компьютер, которые строит карты слишком быстро, вы можете в середине цикла поставить паузу. Например, это может выглядеть так:
for n =1:365 worldmap('world') setm(gca,'Origin', [0 180 0]) geoshow(lat,lon,air(. n),'displaytype','texture') geoshow('landareas.shp','FaceColor','none','EdgeColor','w') caxis([-80 40]) cmocean('thermal') colorbar title(datestr(t(n))) pause(0.5) end
В данном коде pause(0.5) означает паузу 0.5 секунд. Кроме того, я добавил caxis([-80 40]) — это жёсткое ограчинение границ цветов, чтобы они не менялись от карты к карте.
Однако, такая анимация годится только для быстрого анализа при работе с данными. Если же вы хотите получить анимацию в виде видео-файла, то сделать это можно следующим образом. На каждом витке цикла построенная картинка записывается в виде отдельного кадра при помощи специальной функции getframe. Например, мы создадим переменную frame, куда запишем все 365 построенных карт.
for n =1:10 worldmap('world') setm(gca,'Origin', [0 180 0]) geoshow(lat,lon,air(. n),'displaytype','texture') geoshow('landareas.shp','FaceColor','none','EdgeColor','w') caxis([-80 40]) cmocean('thermal') colorbar title(datestr(t(n))) frame(n) = getframe(gcf); close(gcf) end
Обратите внимание, что кроме строки frame(n) = getframe(gcf) мы добавили ещё и close(gcf). В нашем случае это было делать не обязательно, так как функция worldmap закроет предыдущую карту в начале каждого цикла. Однако вы можете столкнуться с проблемой, когда все ваши кадры останутся открытыми, так что пусть будет.
Теперь, для того, чтобы записать анимацию в видео-файл нужно сделать следующее. Во-первых создать видеофайл и присвоить резултат этого действия какой-нибудь переменной (у нас это v), с помощью которой мы затем будем к нему обращаться:
v = VideoWriter('air_temp2018.mp4','MPEG-4');
При желании можно внести некоторые изменения в свойства файла, настроить всё под себя. Например, мне часто приходится менять частоту кадров:
v.FrameRate = 10; %10 frames per second
После всех настроек осталось открыть ваш созданный видео-файл, записать туда все кадры и закрыть файл:
open(v) writeVideo(v,frame) close(v)
Целиком весь код выглядит так:
for n =1:365 worldmap('world') setm(gca,'Origin', [0 180 0]) geoshow(lat,lon,air(. n),'displaytype','texture') geoshow('landareas.shp','FaceColor','none','EdgeColor','w') caxis([-80 40]) cmocean('thermal') colorbar title(datestr(t(n))) frame(n) = getframe(gcf); close(gcf) end v = VideoWriter('air_temp2018.mp4','MPEG-4'); v.FrameRate = 10; open(v) writeVideo(v,frame) close(v)

Чтобы не пропустить новые материалы с рецептами по работе с океанологическими данными, подпишитесь на канал в Telegram: https://t.me/koldunovaleksey
Данные для заметки:
NCEP Reanalysis data provided by the NOAA/OAR/ESRL PSD, Boulder, Colorado, USA, from their Web site at https://www.esrl.noaa.gov/psd/
Kalnay et al., The NCEP/NCAR 40-year reanalysis project, Bull. Amer. Meteor. Soc., 77, 437-470, 1996
Сохранить график в хорошем качестве

Здравствуйте!
Может кто-нибудь сталкивался с проблемой, что при копировании графиков построенных в Matlab’е в отчеты/презентации с последующим уменьшением их размеров сильно ухудшается качество графиков (плывут штриховые линии, и т. д.). Каким образом улучшить качество графиков, которые строит программа?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Сма Vestel, Ищу фото модуля в хорошем качестве
Ищу фото модуля в хорошем качестве. Особенно области выделенной на фото. .

Нужен большой пакет красивых экзотических рыбок в хорошем качестве
Нужен большой пакет красивых экзотических рыбок в хорошем качестве. Кто знает где достать дайте.
Обработка видео, как записать видео в хорошем качестве с минимальным размером?
Здравствуйте! Имеется видеозапись с текстом сверху и снизу. Можно ли как то убрать данный текст.

Сохранить число в качестве текста в отдельном файле
Нужно сохранить число в качестве текста в отдельном файле. Не знаю что делать 🙁 Заранее спасибо!
5236 / 3564 / 378
Регистрация: 02.04.2012
Сообщений: 6,471
Записей в блоге: 17
Annza, когда я писал диплом, то для своих плакатов формата А1 графики сохранял в векторном формате wmf или emf, тогда они при масштабировании не искажаются