Малювати графіки даних із датчиків, підключених до Інтернету речей (IoT), за допомогою SVG

Малювати графіки даних із датчиків, підключених до Інтернету речей (IoT), за допомогою SVG

Малювати графіки даних із датчиків, підключених до Інтернету речей (IoT), за допомогою SVG

У цій статті в серії про представлення графів даних в IoT Я пояснюю, як побудувати графіки за допомогою мова SVG. Як і в інших випадках, стаття також служить коротким вступом до мови.

Зміст

    Графіки даних від датчиків, підключених до контейнера Інтернету речей (IoT) у HTMLГрафіки даних датчиків, підключених до Інтернету речей (IoT), визначення зовнішнього вигляду в CSSГрафіки даних від датчиків, підключених до Інтернету речей (IoT), малювання за допомогою SVGГрафіки даних від датчиків, підключених до Інтернету речей (IoT). Генерація та модифікація за допомогою JavaScript

    Формат SVG

    SVG відповідає абревіатурі Scalable Vector Graphics (масштабована векторна графіка, англійською мовою). Це мова розмітки на якій базується XML і це дозволяє, головним чином, описати креслення за допомогою геометрії, яка його визначає; на відміну від матричного методу, який використовується, наприклад, для фотографії, який використовує сітку кольорових пікселів для її кодування.

    всередині малюнка SVG Зображення (матриця пікселів) також може бути включено, посилаючись на зовнішній документ або вбудоване в сам малюнок. SVG.

    Мовна версія, актуальна на момент написання цієї статті, — це SVG 1.1 хоча визначення версії вже розробляється SVG 2. Наскільки це можливо, я намагатимусь зробити те, що пояснюється у вступі, навіть якщо це стосується SVG 1.1 також служать для SVG 2.

    Якщо креслення SVG Він включений в окремий документ, а не в код HTML (моя пропозиція в цьому рішенні щодо представлення даних IoT вбудовує їх у код HTML) має очолюватися посиланням XML а визначення типу документа (DTD).

    У першому рядку попереднього коду повідомляється версія XML використовується (1.0) кодування символів (UTF-8) і вказує, чи потрібні вам зовнішні визначення (standalone="no") чи це окремий документ (standalone="yes"). Другий рядок виражає визначення типу документа (DTD), який не знадобиться в наступній версії SVG.

    Код, за допомогою якого визначається креслення, укладено між мітками <sgv> y </sgv> які також вказують, про що вже говорилося HTML-код, який діє як контейнер для графів даних в IoT, розміри, представлену частину загальної суми, пропорцію, а також тип і версію.

    Наведений вище приклад визначає малюнок шириною 500 пікселів і висотою 250 пікселів (вікно перегляду 500x250), яке буде обрізано прямокутником 460x80 (вікно перегляду 460x80), починаючи з координат 20,10, використовуючи весь простір, доступний у контейнері (елемент на веб-сторінці, у у нашому випадку) без дотримання початкової пропорції використання preserveAspectRatio="none". Крім того, тепер ви можете побачити перший вміст документа, включені до нього коментарі <!-- y --> як і в інших форматах на основі XML.

    Вибрана система координат SVG Він орієнтований горизонтально (вісь X) і вертикально (вісь Y), і позитивний напрямок відповідає західному письму, тобто значення осі X зростають вправо, а позитивні значення осі Y зростають вниз.

    Визначте графік за допомогою SVG

    Щоб визначити графічне зображення інформації, що зберігається нашими датчиками, підключеними до Інтернету речей, нам потрібно буде вказати тип намальованого об’єкта, його геометрію (координати, розміри...) і зовнішній вигляд (товщина, колір...) у приклад цієї статті — лінійний графік, який можна створити, з’єднавши відрізки лінії з об’єктом line, найбільш корисний для побудови незалежних елементів або об’єкта з багатосегментною лінією path, більш практичний для серії з’єднаних ліній.

    з елементом path Мета полягає в тому, щоб зробити малюнок, як на зображенні нижче, який складається із замкнутого контуру, заповненого більш світлим кольором, у верхній частині якого розташована відкрита лінія, без заливки та намальована товстою лінією.

    Для опису лінії використовується вираз типу:

    У якому X1,Y1 — координати першої точки на прямій, а X2,Y2 — координати другої. Використано атрибут stroke-width щоб визначити товщину. Існує кілька способів визначення зовнішнього вигляду об'єктів SVG, з його індивідуальними властивостями, як і попередній, або з властивістю style який об’єднує їх усіх і який метод буде використано в пропозиції статті.

    Наведений вище код приєднується до власності style значення stroke (колір обведення), stroke-width (товщина лінії) і stroke-opacity (непрозорість об'єкта)

    Опис об'єкта path має форму

    Наведений вище код використовує операції SVG M, L y Z всередині власності d, що означає відповідно «moveto» (перейти до), «lineto» (рядок до) і «closepath» (закрити шлях). Вони можуть бути виражені у верхньому або нижньому регістрі, щоб вказати абсолютне або відносне значення, де це доречно (у випадку Z, наприклад, не має значення). Є багато інших операцій, за допомогою яких, наприклад, ми можемо малювати кругові криві, еліптичні криві, криві Безьє... які нам не знадобляться в цьому прикладі.

    Хоча ця пропозиція малює лінійні графіки, які можуть охоплювати область, може бути корисним малювати інші прості елементи для позначення точок або виділення областей. З наявних в SVG Цікавими можуть бути багатокутники (якими також можна малювати заливку), прямокутники (зручніше для конкретного випадку), еліпси та кола (як окремий випадок еліпсів). Синтаксис цих елементів можна побачити в наступному прикладі коду.

    Зовнішній вигляд попереднього коду буде схожий на наступне зображення (з певною хитрістю, щоб мати можливість повторно використовувати пункти з прикладу вище)

    Точки многокутника (polygon) вказані у власності points як пари координат x, y, розділених пробілами між ними. Щоб визначити еліпси (ellipse) використовуються властивості cx (х координата центру), cy (координата y центру), rx (ширина) і ry (високий). Замість двох значень радіуса (горизонтального і вертикального радіусу, rx y ry) коло (circle) визначається радіусом із властивістю r та координати центру с cx y cy. Щоб визначити прямокутник (rectangle) вказані координати лівого верхнього кута (x e y) Ширина (width) і високий (height)

    Нарешті, щоб включити текст, використовується об’єкт text наступним чином:

    Позиція тексту вказується координатами x і y, шрифт відповідає властивості font-family, розмір с font-size і колір з властивістю fill.

    HTML дозволяє інтегрувати малюнки SVG як ще один елемент сторінки. Як і інші об'єкти, ви можете використовувати власність ID щоб призначити їм унікальний ідентифікатор, за допомогою якого до них можна буде посилатися JavaScript маніпулювати ними. З точки зору HTML, об'єкт SVG матиме такий вигляд:

    Завдяки тому, що ми бачили досі, можна було б намалювати тип базового графіка, який шукаємо в цій пропозиції, але, щоб надати гнучкості зовнішньому вигляду контейнера (веб-сторінки), пропорція графіка буде змінена (наприклад preserveAspectRatio="none"), змінюючи його розмір, щоб адаптувати його до макета елементів у вікні браузера HTML.

    Загалом, існує два варіанти поведінки під час зміни розміру вікна браузера, яке відображає веб-сторінку, що містить діаграму: (1) зберегти розмір діаграми SVG залиште порожній простір, якщо є надлишок, або додайте смуги прокрутки, якщо вони відсутні, або (2) змініть розмір графіка SVG ритмічно змінювати розмір вікна браузера, у якому відображається Інтернет. Якщо ви виберете першу формулу, ви зможете передбачити величини та малювати з абсолютними вимірюваннями, хоча й з поправкою на основі вибраного розміру та значень на графіку. Якщо ви обираєте другий спосіб, який я пропоную, величини завжди є відсотками від представлених значень. Перевагою другого методу є його адаптованість до Інтернету, а недоліком — малювання елементів, які супроводжують графік, наприклад точок або тексту.

    Для виправлення деформації, яка могла виникнути в товщині ліній, використовується ефект. vector-effect="non-scaling-stroke" на маршрутах, які необхідні (ті, що мають значення stroke інакше як none). Для об'єктів text Немає порівнянного ефекту, тому необхідно деформувати їх (разом з тими, що з ними пов’язані) у протилежному напрямку до того, який створюється зміною розміру контейнера.

    Перетворення в SVG Їх можна застосувати до груп об’єктів, щоб кілька текстів та інших об’єктів у графіку можна було об’єднати в одну групу та, що зручніше, виконати перетворення для всіх них.

    Елементи, які входять до групи, включені до тегів <g> y </g>, для призначення перетворення використовується властивість transform і серія операцій, що актуально для нашого випадку scale, для якого вказано коефіцієнт горизонтального та вертикального збільшення. Якщо значення scale більше одиниці, розширює відповідну вісь, а якщо менше одиниці, відбувається зменшення розміру об’єктів уздовж цієї осі.

    У попередньому прикладі перший і другий текст змінено шляхом зменшення їхнього горизонтального вимірювання вдвічі та подвоєння вертикального вимірювання на значення 0.5 і 2.0, які використовуються в scale(0.5,2.0)

    Наступна стаття з циклу про представлення графіків даних від датчиків, підключених до IoT пояснює, як створювати або змінювати графіки в реальному часі за допомогою JavaScript що дозволить вам побачити анімацію графіка при представленні останніх значень, завантажених із сервера.

    Нижче наведено приклад того, як виглядатимуть графіки, створені за цією пропозицією.

    Дати коментар

    Можливо, ви пропустили