Шаг 6. Построение графиков¶
CalculationPlotter (Core/Scripting/Plotting) — базовый,
представление-агностичный слой визуализации поверх Calculation (карта
класса — Скриптовый слой (Core/Scripting)). Каждая функция сама
берёт сетку из calculation.InitialConditions.Split и нужное поле из
calculation.CalculatedPhysicalProperties — строить график можно сразу
после CalculationRunner.Run, без ручного обращения к внутренним полям.
Один график¶
calculation = CalculationRunner.Run(cfg);
CalculationPlotter.PlotOrderParameter(calculation);
Без 'Axes' функция сама создаёт новую фигуру и оси и возвращает их —
удобно, если нужно донастроить график (заголовок, экспорт):
ax = CalculationPlotter.PlotOrderParameter(calculation);
title(ax, 'Мой расчёт');
exportgraphics(ax, 'order_parameter.png');
Доступные функции:
Функция |
Что рисует |
|---|---|
|
Δ(z) на последнем шаге |
|
Δ(z) по всем итерациям самосогласования - удобно проверить сходимость (см. FAQ и типичные ошибки, «Расчёт не сходится») |
|
карта N(z,ε) (только EnergyBased) |
|
N↑(ε)/N↓(ε) в точке с индексом |
|
M(z) (только EnergyBased) |
|
карта |σ(z,ω)| (только EnergyBased, нужна |
PlotOrderParameter/PlotOrderParameterHistory работают для любого
представления (EnergyBased и Matsubara) — остальные величины
сегодня считаются только в EnergyBased, см. Шаг 3. Какие величины считать.
Несколько графиков на одной фигуре¶
'Axes' принимает готовые оси — например, из tiledlayout:
figure;
t = tiledlayout(2, 2);
CalculationPlotter.PlotOrderParameter(calculation, 'Axes', nexttile(t));
CalculationPlotter.PlotDensityOfStates(calculation, 'Axes', nexttile(t));
CalculationPlotter.PlotMagnetization(calculation, 'Axes', nexttile(t));
CalculationPlotter.PlotConductivity(calculation, 'Axes', nexttile(t));
Сравнение серии на одном графике¶
Функции не вызывают hold сами (иначе второй вызов на тех же осях стёр
бы первый график) — для наложения нескольких расчётов включите hold
на осях перед циклом:
items = SeriesLoader.LoadForSeries(cfgs(1));
ax = CalculationPlotter.PlotOrderParameter(items(1).Calculation);
hold(ax, 'on');
for i = 2:numel(items)
CalculationPlotter.PlotOrderParameter(items(i).Calculation, 'Axes', ax);
end
legend(ax, [items.TaskName]);
Если нужно что-то не из этого базового набора¶
CalculationPlotter — это минимальный, общий для всех задач набор.
Специфичная стилизация под конкретную статью/задачу (свои цвета, разметка,
композиция из нескольких серий) — не в ядре, а на уровне
Metatron-Research: пишите свою функцию поверх
calculation.CalculatedPhysicalProperties и
calculation.InitialConditions.Split (см. их поля в
Физическая модель (Core/Model)), по образцу того, как устроены
функции самого CalculationPlotter.
Если нужного поля нет¶
Все функции проверяют, что расчёт запущен (calculation.IsCalculated) и
что конкретное поле результата не пусто, и бросают понятную ошибку вместо
пустого графика — например, если запросить PlotDensityOfStates для
Matsubara (эта величина там пока не считается, см.
Шаг 3. Какие величины считать) или для расчёта, где нужная процедура не была указана в
cfg.Procedures. Текст ошибки называет, какую процедуру добавить.