Σημειώσεις D3. Προφανώς εάν προσθέταμε μία ή περισσότερες παραγράφους, πριν το script, θα άλλαζε το text στην πρώτη.

Σχετικά έγγραφα
Εργαστήριο #12. Βήμα 1 ο. Βήμα 2 ο. Βήμα 3 ο. Βήμα 4 ο.

DOM. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Π. Αγγελάτος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

ΕΠΛ 012. JavaScripts

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Προγραμματισμός Διαδικτύου Ασκήσεις Εργαστηρίου

2. Επιλέξτε την σωστή ετικέτα HTML που προσφέρει το μεγαλύτερο φόντο κειμένου. <head> <heading> <h6> <h1>

D3 Tips and Tricks. Το HTML μέρος του κώδικα

CSS Εργαστήριο 1. Εισαγωγή - Σύνταξη - Εφαρμογή στην HTML

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

Εργαστήριο Εκπαιδευτικού Υλικού και Εκπαιδευτικής Μεθοδολογίας (Ε.Ε.Υ.Ε.Μ.)

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Αντικειμενοστραφής Προγραμματισμός και JavaScript

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites

Τεχνολογίες Διαδικτύου (Εξασκηθείτε στην HTML)

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

ΤΕΙ Σερρών Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πληροφορικής & Επικοινωνιών. Επώνυμο Όνομα: Α.Μ. : Εξάμηνο : Αίθουσα

Σε αυτό το µάθηµα θα ασχοληθούµε µε τη βελτίωση της εµφάνισης ενός ιστοτόπου, αλλά και τον εύκολο χειρισµό όλων των αλλαγών στην εµφάνιση της σελίδας

Προγραμματισμός ΙI (Θ)

Εισαγωγη στην html. Η δομή μιας ιστοσελίδας (αρχείο html) Η βασική δομή ενός αρχείου html είναι η εξής: <html> <head>

1. <body> 2. <header> 3. <h1> My Page </h1> 4. </header> 5. <section>

Γιάννης Σαμωνάκης. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 4 - PHP)

Προγραμματισμός Διαδικτύου Ασκήσεις Εργαστηρίου

Προγραµµατισµός Ι (ΗΥ120)

Μέρος 3 ο : Βασικές Έννοιες για δυναμικές ιστοσελίδες

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

Πληρουορική Γ Γσμμασίοσ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #3

Περιεχόμενα. Πρόλογος...11

Εργαλεία Ανάπτυξης Εφαρμογών Internet. Δ.Ι.Ε.Κ. Γλυφάδας Τεχνικός Εφαρμογών Πληροφορικής

Εισαγωγή στην Γλώσσα Προγραμματισμού Python. 12/10/16 1

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Τα προγράμματα σε ASP που χρησιμοποιήθηκαν για την υλοποίηση της διαχείρισης των μαθημάτων.

Στην τεχνολογία των CSS, οι κανόνες στυλ (style

Βαρβάκειο Πρότυπο Γυμνάσιο

Γαβαλάς Δαμιανός

SVG Εργαστήριο 1. Εισαγωγή στα διανυσματικά γραφικά SVG

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΕΤΑΡΤΗ 20 ΙΟΥΝΙΟΥ 2018

ΕΝΤΟΛΕΣ. 7.1 Εισαγωγικό μέρος με επεξήγηση των Εντολών : Επεξήγηση των εντολών που θα

Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record)

Δημοσίευση στο Διαδίκτυο

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

Εργαστήριο 8. Προγραμματιστικές Εφαρμογές στο Διαδίκτυο

Διαδικασία καταχώρησης προϋπολογισμών από το web-rescom

Διάλεξη 2η Εισαγωγή στο CSS

Εισαγωγή στην πληροφορική

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Σχεδιασμός και Ανάπτυξη Ιστότοπων

Εισαγωγή στην PHP. ΕΣΔ 232 Διαχείριση Δεδομένων στη Κοινωνία της Πληροφορίας. Περιεχόμενα. Περιεχόμενα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ

ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

JAVASCRIPT 1. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Π. Αγγελάτος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Δομή Επανάληψης. Κεφάλαιο 7 Mike Trimos

ΠΡΟΣΟΧΗ: Οι απαντήσεις πολλαπλής επιλογής µόνο πάνω στο ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

Ένας προκαταρκτικός οδηγός για τη δημιουργία μιας ιστοσελίδας wiki. Hfr Φεβρουάριος 08

Ετικέτες HTML. <!-->: Τα σχόλια χρησιμοποιούνται για να γράφουμε σημειώσεις μέσα στον

Κατανεμημένα Συστήματα

Σύγχρονες Μέθοδοι Προγραμματισμού

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

JAVASCRIPT EVENTS. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Π. Αγγελάτος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

9. Εντολές επανάληψηςκαι η εντολή

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

(3) Από την εργαλειοθήκη επιλέξτε το εργαλείο «ετικέτας (Label)». Δημιουργήστε μια ετικέτα στην φόρμα σας.

Σχεδιασμός και Ανάπτυξη Ιστοτόπων. ΕΠΑ.Λ. ΑΛΙΜΟΥ Τομέας Πληροφορικής Κ. Φλώρος

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Nearest Neighbor Analysis

Όταν το πρόγραμμα φτάσει σε αυτή την εντολή και ο καταχωρητής PINA έχει την τιμή

TEC410 Ανάπτυξη Δικτυακών Τόπων (Δ εξάμηνο)

Δημιουργώντας μια εφαρμογή ζωγραφικής. 2 η Εργασία

ΠΡΟΣΟΧΗ: Οι απαντήσεις πολλαπλής επιλογής µόνο πάνω στο ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ

2. ΕΙΣΑΓΩΓΗ ΣΤΗΝ HTML ΓΙΩΡΓΟΣ ΓΙΑΝΝΑΚΑΚΗΣ, ΜΑΝΩΛΗΣ ΤΣΙΚΝΑΚΗΣ

Επεξεργασία πολλαπλών φύλλων εργασίας - Γραφημάτων Excel

Λίγα λόγια από το συγγραφέα Κεφάλαιο 1: Βάσεις δεδομένων και Microsoft Access Κεφάλαιο 2: Microsoft Access

Θέματα Προγραμματισμού Διαδικτύου ~ PHP ~

Περιεχόμενα. Πρόλογος... xiii

"Εθαξκνγέο Δηαδηθηύνπ"

Η Βίβλος των CSS - Μέρος 3 Το Box Model, τα Περιθώρια και τα Περιγράμματα

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΕΠΛ131 Αρχές Προγραμματισμού

Βαρβάκειο Πρότυπο Γυμνάσιο Εργαστήρι Πληροφορικής Σχολ. Έτος Φύλλο Εργασίας 5

Περιεχόμενα. Λίγα λόγια από το συγγραφέα... 7

7. Επαναλήψεις (Loops) Προγραμματισμός EV3 Ακαδημία Ρομποτικής 58

Γλώσσες Σήµανσης (Markup Languages) Τεχνολογία ιαδικτύου και Ηλεκτρονικό Εµπόριο

App Inventor 3ο Μάθημα (Ζάρια - επέκταση)

Εισαγωγή στην Αριθμητική Ανάλυση

Προγραμματισμός Ι (ΗΥ120)

Ενότητα 1: «Εισαγωγή στην Αλγοριθμική και τον Προγραμματισμό. Απλές ασκήσεις με γλώσσα Pascal»

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

ΜΑΘΗΜΑ Στοίχιση Παραγράφων. 2. Εσοχές Παραγράφων ΣΤΟΧΟΙ:

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Εισαγωγή στον Προγραμματισμό

Δημιουργία η-μαθήματος με τη. 3 ο Μέρος Εισαγωγή πληροφοριών: δημιουργία ιστοσελίδας

Σημειώσεις. Ο αριθμός των στοιχείων μίας λίστας μπορεί να βρεθεί με χρήση της συνάρτησης len:

03. Τροποποίηση σχεδιασμένων οντοτήτων

Transcript:

Σημειώσεις D3 Είδαμε ότι το D3 είναι μία JavaScript βιβλιοθήκη που μας επιτρέπει να επεξεργαζόμαστε δυναμικά στοιχεία του DOM. Το D3 δίνει την δυνατότητα στον προγραμματιστή να επιλέγει πολλά στοιχεία DOM με μία select. Με απλή JavaScript, χωρίς D3 μπορούμε να προσθέσουμε ένα div: var div = document.createelement("div"); div.innerhtml = "Hello, world!"; document.body.appendchild(div); Με την D3 μπορούμε να επιλέξουμε έναν ή πολλά υπαρκτά ή όχι στοιχεία του DOM. Στο παρακάτω παράδειγμα, η select καλείται να επιλέξει μία παράγραφο και να της αλλάξει το text. Eπειδή παράγραφος δεν υπάρχει στο DOM, το αποτέλεσμα είναι να μην κάνει τίποτα. <!doctype html> <html> <head> <title>d3 tutorial</title> <script src="d3/d3.min.js" charset="utf-8"> </head> d3.select("p").text("hello this is D3"); Προφανώς εάν προσθέταμε μία ή περισσότερες παραγράφους, πριν το script, θα άλλαζε το text στην πρώτη. <p>hello, world! <p>hello, to you too! <p> d3.select("p").text("hello this is D3"); 1

Το αποτέλεσμα είναι αυτό. Το κείμενο από την πρώτη παράγραφο αντικαθίσταται αμέσως από το text που ορίζεται στο D3 script. Η δεύτερη και η τρίτη παράγραφος παραμένουν όπως ορίστηκαν στην HTML. Η τρίτη είναι κενή. Αντικαθιστώντας την select με την selectall, αντικαθίσταται το text σε όλα τα στοιχεία του DOM: Με την append μπορούμε να προσθέσουμε νέα στοιχεία στην σελίδα μας: d3.select("body").append("p").text("hello this is D3"); Χρησιμοποιώντας αλυσίδες μεθόδων μπορούμε να γλυτώσουμε πολύ γράψιμο. Με τα method chains o παρακάτω κώδικας: var body = d3.select("body"); body.style("color", "black"); body.style("background-color", "white"); μπορεί να γραφεί καλύτερα έτσι: και: d3.select("body").style("color", "black").style("background-color", "white"); d3.select("body").append("p").style("color", "red").text("hello this is D3"); 2

Μπορούμε να προσθέσουμε γραφικά στοιχεία SVG στην σελίδα μας όπως στο επόμενο παράδειγμα: <!doctype html> <html> <head> <title>d3 tutorial 3a</title> <script type="text/javascript" src="d3/d3.min.js"> </head> var canvas = d3.select("body").append("svg").attr("width", "500").attr("height", "500"); var circle = canvas.append("circle").attr("cx", "250").attr("cy", "250").attr("r", 50).attr("fill", "red"); var rect = canvas.append("rect").attr("width", "100").attr("height", "50"); var line = canvas.append("line").attr("x1", "0").attr("y1", "100").attr("x2", "400").attr("y2", "400").attr("stroke", "green").attr("stroke-width","10"); Βλέπουμε ότι στο SVG αντί για style δηλώνουμε attibutes. Data Join Concept 1 Αν θέλουμε να κατασκευάσουμε μερικά circle elemets για να οπτικοποιήσουμε δεδομένα, θα διαπιστώσουμε ότι δεν υπάρχει στο D3 βασική εντολή για να δημιουργηθούν πολλαπλά DOM elements. Προφανώς υφίσταται η μέθοδος append, αλλά αυτή μας δίνει την δυνατότητα να κατασκευάσουμε ένα στοιχείο. svg.append("circle").attr("cx", d.x).attr("cy", d.y) 1 https://bost.ocks.org/mike/join/ 3

.attr("r", 2.5); Εάν θέλουμε να αποκτήσουμε την δυνατότητα να κατασκευάσουμε πολλούς κύκλους: έναν για κάθε δεδομένο, αντί να βάλουμε τον κώδικα μας μέσα σε ένα for ή while loop ακολουθούμε την παρακάτω προσέγγιση: svg.selectall("circle").data(data).enter().append("circle").attr("cx", function(d) { return d.x; }).attr("cy", function(d) { return d.y; }).attr("r", 2.5); Εδώ τα δεδομένα προέρχονται από ένα JSON array με x και y ιδιότητες: [{"x": 1.0, "y": 1.1}, {"x": 2.0, "y": 2.5}, ]. Ο κώδικας κατασκευάζει έναν κύκλο για κάθε στοιχείο του πίνακα, χρησιμοποιώντας τις ιδιότητες x και y για την τοποθέτηση τους. Το selectall( circle ) επιλέγει στοιχεία που δεν υπάρχουν ακόμα. Η προσέγγιση του D3 αντίθετα με πολλές τεχνικές προγραμματισμού που ο προγραμματιστής καθορίζει με εντολές πως πρέπει να γίνει μία διαδικασία, ζητάει από τον προγραμματιστή να πει τι θέλει. Εδώ θέλει ο κάθε κύκλος να αντιστοιχεί σε ένα ζεύγος δεδομένα. Αντί να καθοδηγήσουμε το D3 να κατασκευάζει κύκλους απλά του λέμε ότι η επιλογή circle αντιστοιχεί σε δεδομένα. Αυτή η τεχνική ονομάζεται Data Join. 4

Τα σημεία που ενώνονται με υπάρχοντα στοιχεία δημιουργούν την update (inner) selection. Όσα δεν έχουν ενωθεί παράγουν την enter selection, η οποία αντιπροσωπεύει στοιχεία που λείπουν. Και η επιλογή exit αντιπροσωπεύει τα στοιχεία που πρέπει να σβηστούν. 1. H svg.selectall( circle ) επιστρέφει μια κενή επιλογή, επειδή ο SVG container ήταν κενός. 2. Η πιο πάνω επιλογή ενώνεται με ένα array από data, με αποτέλεσμα να δημιουργηθούν τρεις νέες καταστάσεις: enter, update και exit. Επειδή η επιλογή ήταν αρχικά άδεια, οι επιλογές update και exit είναι επίσης άδειες. Η επιλογή enter περιέχει ένα placeholder για κάθε δεδομένο. 3. Η επιλογή update επιστρέφεται από το selection.data, ενώ οι επιλογές enter και exit εξαρτώνται από την update selection, ενώ η selection.enter επιστρέφει την επιλογή enter. 4. Τα στοιχεία που λείπουν προστίθενται στον SVG container καλώντας την selection.append μετά την enter selection. Έτσι προστίθεται ένας νέος κύκλος για κάθε data point στον SVG container. Το σκεπτικό των Joins είναι ο ορισμός μίας σχέσης μεταξύ της επιλογής και των δεδομένων και η υλοποίηση αυτής της σχέσης μέσω των τριών καταστάσεων: enter, update και exit. Θα μπορούσε εύκολα να υπάρχει ένα primitive (θεμελιακό στοιχείο) που να δημιουργεί πολλαπλά elements, αλλά το πλεονέκτημα της προσέγγισης μέσω Join είναι αποτελεί πιο γενικότερη λύση. Ο κώδικας πιο πάνω καλύπτει τις ανάγκες των στατικών οπτικοποιήσεων. Είναι όμως πολύ εύκολο να επεκταθεί με ελάχιστες προσθήκες έτσι ώστε να καλύπτει και τις ανάγκες των δυναμικών οπτικοποιήσεων για update και exit. Έτσι επιτρέπει διαδραστικές αναζητήσεις και οπτικοποιήσεις σε πραγματικό χρόνο καθώς και ομαλές εναλλαγές δεδομένων. Εδώ είναι ένα παράδειγμα που διαχειρίζεται και τις τρεις καταστάσεις: var circle = svg.selectall("circle").data(data); circle.exit().remove(); circle.enter().append("circle").attr("r", 2.5).merge(circle).attr("cx", function(d) { return d.x; }).attr("cy", function(d) { return d.y; }); Όταν τρέξει αυτός ο κώδικας, επανυπολογίζει το Join των δεδομένων και υποστηρίζει την αντιστοιχία μεταξύ στοιχείων και δεδομένων. Εάν το νέο dataset είναι μικρότερο από το προηγούμενο, όλα τα επιπλέον στοιχεία καταλήγουν στην επιλογή exit και διαγράφονται. Εάν το νέο dataset είναι μεγαλύτερο τα επιπλέον στοιχεία καταλήγουν στην enter επιλογή και νέοι κόμβοι προστίθενται. Εάν το 5

νέο dataset είναι ίδιου μεγέθους με το προηγούμενο, τότε όλα τα στοιχεία ενημερώνονται σε νέες θέσεις και δεν διαγράφεται ούτε προστίθεται τίποτα. Τα Joins επιτρέπουν τον κώδικα να είναι περισσότερο περιγραφικός: η διαχείριση των τριών καταστάσεων γίνεται χωρίς επιλογές (if) ή επαναλήψεις (for, while). Ο προγραμματιστής περιγράφει πως τα στοιχεία πρέπει να αντιστοιχούν σε δεδομένα. Εάν μία επιλογή enter, update ή exit τύχει να είναι κενή, τότε ο αντίστοιχος κώδικας είναι no-op. Ένα πολύ απλό παράδειγμα που δείχνει πως μπορεί να κατασκευαστεί ένα barchart όπως αυτό: Ο κώδικας: 1 <!doctype html> 2 <html> 3 <head> 4 <title>d3 tutorial</title> 5 <script src="d3/d3.min.js" charset="utf-8"> 6 </head> 7 8 9 10 11 var dataarray = [20, 40, 50]; 12 13 var canvas = d3.select("body") 14.append("svg") 15.attr("width", 500) 16.attr("height", 500); 17 18 var bars = canvas.selectall("rect") 19.data(dataArray) 20.enter() 21.append("rect") 22.attr("width", function(d) { return d * 10;}) 23.attr("height", 50) 24.attr("y", function(d, i) { return i * 100 }); 25 26 27 </html> Άσκηση: Να τροποποιήσετε τον κώδικα, έτσι ώστε οι μπάρες του ιστογράμματος να γίνουν πέντε και η κατεύθυνση τους να γίνει κάθετη. 6