D3.js - Introdução ao SVG
SVG significa Scalable Vector Graphics. SVG é um formato gráfico vetorial baseado em XML. Ele oferece opções para desenhar diferentes formas, como linhas, retângulos, círculos, elipses, etc. Portanto, projetar visualizações com SVG oferece mais poder e flexibilidade.
Recursos de SVG
Algumas das características mais importantes do SVG são as seguintes -
- SVG é um formato de imagem baseado em vetor e é baseado em texto.
- SVG é semelhante em estrutura ao HTML.
- SVG pode ser representado como um Document object model.
- As propriedades SVG podem ser especificadas como atributos.
- SVG deve ter posições absolutas em relação à origem (0, 0).
- O SVG pode ser incluído como está no documento HTML.
Um exemplo mínimo
Vamos criar uma imagem SVG mínima e incluí-la no documento HTML.
Step 1 - Crie uma imagem SVG e defina a largura como 300 pixels e a altura como 300 pixels.
<svg width = "300" height = "300">
</svg>
Aqui o svgtag inicia uma imagem SVG e tem largura e altura como atributos. A unidade padrão do formato SVG épixel.
Step 2 - Crie uma linha começando em (100, 100) e terminando em (200, 100) e defina a cor vermelha para a linha.
<line x1 = "100" y1 = "100" x2 = "200" y2 = "200"
style = "stroke:rgb(255,0,0);stroke-width:2"/>
Aqui o line tag desenha uma linha e seus atributos x1, y1 refere-se ao ponto de partida e x2, y2refere-se ao ponto final. O atributo de estilo define a cor e a espessura da linha usando ostroke e a stroke-width estilos.
x1 - Esta é a coordenada x do primeiro ponto.
y1 - Esta é a coordenada y do primeiro ponto.
x2 - Esta é a coordenada x do segundo ponto.
y2 - Esta é a coordenada y do segundo ponto.
stroke - Cor da linha.
stroke-width - Espessura da linha.
Step 3 - Crie um documento HTML, “svg_line.html” e integre o SVG acima conforme mostrado abaixo -
<!DOCTYPE html>
<html>
<head>
<script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
<style>
body { font-family: Arial; }
</style>
</head>
<body>
<div id = "svgcontainer">
<svg width = "300" height = "300">
<line x1 = "100" y1 = "100"
x2 = "200" y2 = "200" style = "stroke:rgb(255,0,0);
stroke-width:2"/>
</svg>
</div>
<p></p>
<p></p>
</body>
</html>
O programa acima produzirá o seguinte resultado.
SVG usando D3.js
Para criar SVG usando D3.js, vamos seguir as etapas fornecidas a seguir.
Step 1 - Crie um contêiner para armazenar a imagem SVG conforme mostrado abaixo.
<div id = "svgcontainer"></div>
Step 2- Selecione o contêiner SVG usando o método select () e injete o elemento SVG usando o método append (). Adicione os atributos e estilos usando os métodos attr () e style ().
var width = 300;
var height = 300;
var svg = d3.select("#svgcontainer")
.append("svg").attr("width", width).attr("height", height);
Step 3 - Da mesma forma, adicione o line elemento dentro do svg elemento como mostrado abaixo.
svg.append("line")
.attr("x1", 100)
.attr("y1", 100)
.attr("x2", 200)
.attr("y2", 200)
.style("stroke", "rgb(255,0,0)")
.style("stroke-width", 2);
O código completo é o seguinte -
<!DOCTYPE html>
<html>
<head>
<script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
<style>
body { font-family: Arial; }
</style>
</head>
<body>
<div id = "svgcontainer">
</div>
<script language = "javascript">
var width = 300;
var height = 300;
var svg = d3.select("#svgcontainer")
.append("svg")
.attr("width", width)
.attr("height", height);
svg.append("line")
.attr("x1", 100)
.attr("y1", 100)
.attr("x2", 200)
.attr("y2", 200)
.style("stroke", "rgb(255,0,0)")
.style("stroke-width", 2);
</script>
</body>
</html>
O código acima produz o seguinte resultado.
Elemento Retângulo
Um retângulo é representado pelo <rect> tag conforme mostrado abaixo.
<rect x = "20" y = "20" width = "300" height = "300"></rect>
Os atributos de um retângulo são os seguintes -
x - Esta é a coordenada x do canto superior esquerdo do retângulo.
y - Esta é a coordenada y do canto superior esquerdo do retângulo.
width - Isso denota a largura do retângulo.
height - Isso denota a altura do retângulo.
Um retângulo simples em SVG é definido conforme explicado a seguir.
<svg width = "300" height = "300">
<rect x = "20" y = "20" width = "300" height = "300" fill = "green"></rect>
</svg>
O mesmo retângulo pode ser criado dinamicamente conforme descrito abaixo.
<!DOCTYPE html>
<html>
<head>
<script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<div id = "svgcontainer"></div>
<script>
var width = 300;
var height = 300;
//Create SVG element
var svg = d3.select("#svgcontainer")
.append("svg")
.attr("width", width)
.attr("height", height);
//Create and append rectangle element
svg.append("rect")
.attr("x", 20)
.attr("y", 20)
.attr("width", 200)
.attr("height", 100)
.attr("fill", "green");
</script>
</body>
</html>
O código acima produzirá o seguinte resultado.
Elemento Círculo
Um círculo é representado pelo <circle> tag conforme explicado abaixo.
<circle cx = "200" cy = "50" r = "20"/>
Os atributos do círculo são os seguintes -
cx - Esta é a coordenada x do centro do círculo.
cy - Esta é a coordenada y do centro do círculo.
r - Isso denota o raio do círculo.
Um círculo simples em SVG é descrito abaixo.
<svg width = "300" height = "300">
<circle cx = "200" cy = "50" r = "20" fill = "green"/>
</svg>
O mesmo círculo pode ser criado dinamicamente conforme descrito abaixo.
<!DOCTYPE html>
<html>
<head>
<script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<div id = "svgcontainer"></div>
<script>
var width = 300;
var height = 300;
//Create SVG element
var svg = d3.select("#svgcontainer")
.append("svg")
.attr("width", width)
.attr("height", height);
//Append circle
svg.append("circle")
.attr("cx", 200)
.attr("cy", 50)
.attr("r", 20)
.attr("fill", "green");
</script>
</body>
</html>
O código acima produzirá o seguinte resultado.
Elemento Elipse
O elemento SVG Ellipse é representado pelo <ellipse> tag conforme explicado abaixo.
<ellipse cx = "200" cy = "50" rx = "100" ry = "50"/>
Os atributos de uma elipse são os seguintes -
cx - Esta é a coordenada x do centro da elipse.
cy - Esta é a coordenada y do centro da elipse.
rx - Este é o raio x do círculo.
ry - Este é o raio y do círculo.
Uma elipse simples no SVG é descrita abaixo.
<svg width = "300" height = "300">
<ellipse cx = "200" cy = "50" rx = "100" ry = "50" fill = "green" />
</svg>
A mesma elipse pode ser criada dinamicamente como abaixo,
<html>
<head>
<script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<div id = "svgcontainer"></div>
<script>
var width = 300;
var height = 300;
var svg = d3.select("#svgcontainer")
.append("svg")
.attr("width", width)
.attr("height", height);
svg.append("ellipse")
.attr("cx", 200)
.attr("cy", 50)
.attr("rx", 100)
.attr("ry", 50)
.attr("fill", "green")
</script>
</body>
</html>
O código acima produzirá o seguinte resultado.