Как сохранить график в матлабе в виде картинки
Перейти к содержимому

Как сохранить график в матлабе в виде картинки

  • автор:

Научный форум 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 и сохранить видео в формате 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

Сохранить график в хорошем качестве

Author24 — интернет-сервис помощи студентам

Здравствуйте!
Может кто-нибудь сталкивался с проблемой, что при копировании графиков построенных в Matlab’е в отчеты/презентации с последующим уменьшением их размеров сильно ухудшается качество графиков (плывут штриховые линии, и т. д.). Каким образом улучшить качество графиков, которые строит программа?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Сма Vestel, Ищу фото модуля в хорошем качестве
Ищу фото модуля в хорошем качестве. Особенно области выделенной на фото. .

Нужен большой пакет красивых экзотических рыбок в хорошем качестве
Нужен большой пакет красивых экзотических рыбок в хорошем качестве. Кто знает где достать дайте.

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

Сохранить число в качестве текста в отдельном файле
Нужно сохранить число в качестве текста в отдельном файле. Не знаю что делать 🙁 Заранее спасибо!

5236 / 3564 / 378
Регистрация: 02.04.2012
Сообщений: 6,471
Записей в блоге: 17

Annza, когда я писал диплом, то для своих плакатов формата А1 графики сохранял в векторном формате wmf или emf, тогда они при масштабировании не искажаются

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *