Добро пожаловать в Engee
Построение графиков
Цель: Научиться визуализировать переменные с использованием функций вывода графиков.
using CSV, DataFrames, Plots;
cd(@__DIR__);
default(fmt = :png); # Все графики должны иметь формат PNG
data = CSV.read("datafile.csv", DataFrame, header=0)
sample = data[:,1];
𝜌 = data[:,2];
v1 = data[:,3];
v2 = data[:,4];
mass1 = 𝜌 .* v1;
mass2 = 𝜌 .* v2;
display(data)
Упражнение 1: Строим графики
Задача 1
Два вектора одинаковой длины можно вывести на график, используя их как координаты точек, при помощи функции plot.
plot(x,y)
sample по оси X и mass1 по оси Y.
Подсказка
Передайте аргументы sample и mass1 в функцию plot.
Решение
plot(sample, mass1)
Задача 2
Дальнейшими аргументами в функцию plot можно передать еще много параметров, устанавливающих цвет и стиль линий и маркеров.
plot(x, y, color=:red, linestyle=:dash, markershape=:o)
Указанная команда выводит пунктирную линию (linestyle=:dash) красного цвета (color=:red) с маркерами в виде кругов (marker=:o).
У всех аргументов есть укороченные версии команд, и такой же график можно построить другим образом:
plot(x, y, c=:red, s=:dash, m=:o)
mass2 (ось Y) в зависимости от вектора sample (ось X). Установите вывод в виде красных (c=:red) крестиков (m=:xcross) в качестве маркеров размером 10 (ms=10) и с прозрачной линией между ними (la=0).
Подсказка
Передайте параметры sample и mass2 в функцию plot. Красные маркеры в виде крестиков размером 10 и без линии создаются следующим набором аргументов: plot(x, y, c=:red, la=0, m=:xcross, ms=10).
Решение
plot(sample, mass2, c=:red, la=0, m=:xcross, ms=10)
Задача 3
Как вывести на одном графике сразу несколько зависимостей? Можно вызвать несколько команд plot подряд. Но чтобы каждый новый график строился на уже существующем графическом полотне, его построение нужно осуществлять при помощи модифицированной команды: после нее должен стоять восклицательный знак (!).
plot(x1,y1) # Создать полотно
plot!(x2,y2) # Нанести ещё один график
mass1 (ось Y) от sample (ось X) при помощи черных (c=:black) квадратов (m=:square), без линий между ними (la=0).
Для этого необязательно повторять команду вывода первого графика. Функция plot! копирует уже созданное полотно в текущую ячейку и продолжает дополнять его уже в ней.
Подсказка
Дополните команду plot из предыдущего упражнения аргументами sample и mass1. Черные квадратные маркеры создаются последним аргументом marker=:square.
Решение
plot!(sample, mass1, c=:black, la=0, marker=:square)
Задача 4
Если отправить на вывод один вектор в качестве единственного аргумента, Julia выведет его значения по оси Y вдоль их порядковых номеров по оси X.
plot(y)
v1.
Подсказка
Передайте переменную v1 в функцию plot.
Решение
plot(v1)
Задача 5
Как вы уже знаете, дополнительные аргументы для функции plot пишутся в форме название = значение.
plot(y, linewidth=5)
Эта команда выведет на графике толстую линию (толщиной 5).
v1, использовав линию толщиной 3.
Подсказка
Добавьте к функции вывода графиков аргумент linewidth с нужным значением, чтобы изменить толщину линии.
Решение
plot(v1, linewidth=3)
Задача 6
v1 (ось Y) от sample (ось X) при помощи красных (c=:red) маркеров в виде круга (m=:o), соединенных сплошной линией. Установите толщину линии, равную 4.
Подсказка
Красные круги в качестве маркеров, со сплошной линией между ними, можно задать набором аргументов c=:red, m=:o. Следующим аргументом добавьте свойство linewidth или lw, указав через знак "равно" нужную толщину линии.
Решение
plot(sample, v1, c=:red, m=:o, lw=4)
Задача 7*
Итак, функция plot создает графики (линии и/или маркеры). В Julia есть много других функций для вывода графиков.
У каждой функции вывода есть свои дополнительные настройки. Попробуйте вывести гистограмму переменной v1 при помощи функции histogram. Установите желтый в качестве цвета столбцов гистограммы c=:yellow.
Упражнение 2: Создаем подписи к графикам
Задача 1
Прописать заголовок графика (и другие параметры аннотации) можно при помощи дополнительных аргументов функции plot либо через функции-модификаторы. Например, через параметр title или через функцию title!. Этой функции нужно передать текст заголовка графика как аргумент. Текстовые строки в Julia хранятся в двойных кавычках (").
title!( "Заголовок графика" )
plot(sample, [mass1 mass2], c=[:red :black], la=0, m=[:xcross :square], ms=[10 5])
"Масса образцов".
Подсказка
Вызовите функцию title с аргументом "Масса образцов", как выше в примере.
Решение
title!("Масса образцов")
Задача 2
Примените функцию ylabel!(...), чтобы добавить подпись Масса (г) на ось Y.
Подсказка
Передайте строку "Масса (г)" как аргумент для функции ylabel!.
Решение
ylabel!("Масса (г)")
Задача 3
Команды аннотации можно писать как в теле функции plot, так и отдельно (как модификаторы, со знаком !).
plot, задав следующие подписи для графиков: ["Эксперимент 1" "Эксперимент 2"]. Для этого:
- Скопируйте строчку вывода графика (
plot(...)) из начала упражнения; - Передайте в нее дополнительный параметр
label; - Добавьте еще один параметр
legend=:topleft, чтобы указать место расположения подписей на графике.
Подсказка
Передайте аргументы "Эксперимент 1" и "Эксперимент 2" в качестве значения параметра label. Поместите аргументы в квадратные скобки и разделите пробелом ( ).
Решение
plot(sample, [mass1 mass2],
c=[:red :black], la=0, m=[:xcross :square], ms=[10 5],
label=["Эксперимент 1" "Эксперимент 2"], legend=:topleft)
Задача 4*
В библиотеке Plots, которую мы подключили в начале упражнения, имеется еще много других графиков. Работа с ними может отличаться от работы с функцией plot. Попробуйте следующий синтаксис:
bar( data[:,3] )
title!("Параметры образца №" * string(sample[3]))
Функция bar(x,y) строит график в виде прямоугольников высотой y, середины которых расположены в точках с абсциссами x. При отсутствии первого аргумента середины прямоугольников располагаются в точках 1, 2, 3 и т.д.
Заметьте, мы использовали значение одной из переменных в заголовке графика, объединив ее с началом строки при помощи оператора *.
Больше о построении графиков в Julia вы можете прочитать в документации.