DC.js - Gráfico de Barras
O gráfico de barras é um dos tipos de gráfico mais comumente usados e são usados para exibir e comparar o número, frequência ou outra medida (por exemplo, média) para diferentes categorias ou grupos discretos. O gráfico é construído de forma que as alturas ou comprimentos das diferentes barras sejam proporcionais ao tamanho da categoria que representam.
O eixo x (o eixo horizontal) representa as diferentes categorias sem escala. O eixo y (eixo vertical) tem uma escala e isso indica as unidades de medida. As barras podem ser desenhadas vertical ou horizontalmente, dependendo do número de categorias e do comprimento ou complexidade da categoria.
Métodos de gráfico de barras
Antes de passar para desenhar um gráfico de barras, devemos entender o dc.barChartclasse e seus métodos. O dc.barChart usa mixins para obter a funcionalidade básica de desenhar um gráfico. Os mixins usados pelo dc.barChart são os seguintes -
- dc.stackMixin
- dc.coordinateGridMixin
O diagrama de classe completo do dc.barChart é o seguinte -
O dc.barChart obtém todos os métodos dos mixins especificados acima. Além disso, ele também possui seus próprios métodos para desenhar o gráfico de barras. Eles são explicados a seguir -
alwaysUseRounding ([round])
Este método é usado para obter ou definir se o arredondamento está habilitado quando as barras estão centralizadas.
barPadding ([pad])
Este método é usado para obter ou definir o espaçamento entre as barras como uma fração do tamanho da barra. Os valores de preenchimento possíveis estão entre 0-1.
centerBar ([centerBar])
Este método é usado para definir a barra, centralizada em torno da posição dos dados no eixo x.
gap ([gap])
Este método é usado para definir um intervalo fixo entre as barras.
outerPadding ([pad])
Este método é usado para definir o preenchimento externo em um gráfico de barras ordinal.
Desenhe um gráfico de barras
Vamos desenhar um gráfico de barras em DC. Para fazer isso, devemos seguir as etapas abaixo -
Etapa 1: definir uma variável
Vamos definir uma variável de gráfico conforme mostrado abaixo -
var chart = dc.barChart('#bar');
Aqui, a função dc.barChart é mapeada com um contêiner tendo bar como o id.
Etapa 2: leia os dados
Leia os dados do arquivo people.csv.
d3.csv("data/people.csv", function(errors, people) {
var mycrossfilter = crossfilter(people);
}
Se os dados não estiverem presentes, ele retornará um erro. Agora, atribua os dados ao Crossfilter. Para este exemplo, usaremos o mesmo arquivo people.csv, que tem a seguinte aparência -
id,name,gender,DOB,MaritalStatus,CreditCardType
1,Damaris,Female,1973-02-18,false,visa-electron
2,Barbe,Female,1969-04-10,true,americanexpress
3,Belia,Female,1960-04-16,false,maestro
4,Leoline,Female,1995-01-19,true,bankcard
5,Valentine,Female,1992-04-16,false,
6,Rosanne,Female,1985-01-05,true,bankcard
7,Shalna,Female,1956-11-01,false,jcb
8,Mordy,Male,1990-03-27,true,china-unionpay
..................
..................
..................
Etapa 3: crie uma dimensão de idade
Agora, crie uma dimensão para a idade, conforme mostrado abaixo -
var ageDimension = mycrossfilter.dimension(function(data) {
return ~~((Date.now() - new Date(data.DOB)) / (31557600000))
});
Aqui, atribuímos a idade dos dados do Crossfilter. O ~~ é um operador duplo NOT bit a bit. É usado como um substituto mais rápido para oMath.floor() função.
Agora, agrupe-o usando o reduceCount() função que é mostrada abaixo -
var ageGroup = ageDimension.group().reduceCount();
Etapa 4: gerar um gráfico
Agora, gere um gráfico de barras usando a codificação fornecida abaixo -
chart
.width(800)
.height(300)
.x(d3.scale.linear().domain([15,70]))
.brushOn(false)
.yAxisLabel("Count")
.xAxisLabel("Age")
.dimension(ageDimension)
.group(ageGroup)
.on('renderlet', function(chart) {
chart.selectAll('rect').on('click', function(d) {
console.log('click!', d);
});
});
chart.render();
Aqui,
A largura do gráfico é 800 e a altura é 300.
A função d3.scale.linear é usada para construir uma nova escala linear com o intervalo de domínio especificado [15, 70].
Em seguida, definimos o valor brushOn como false.
Atribuímos o rótulo do eixo y como contagem e o rótulo do eixo x como idade.
Por fim, agrupe a idade usando a função ageGroup.
Etapa 5: Exemplo de trabalho
A lista de códigos completa é a seguinte. Crie uma página da webbar.html e adicione as seguintes alterações a ele.
<html>
<head>
<title>DC Bar chart Sample</title>
<link rel = "stylesheet" type = "text/css" href = "css/bootstrap.min.css">
<link rel = "stylesheet" type = "text/css" href = "css/dc.css"/>
<script src = "js/d3.js"></script>
<script src = "js/crossfilter.js"></script>
<script src = "js/dc.js"></script>
</head>
<body>
<div>
<div id = "bar"></div>
</div>
<script language = "javascript">
var chart = dc.barChart('#bar');
d3.csv("data/people.csv", function(errors, people) {
var mycrossfilter = crossfilter(people);
var ageDimension = mycrossfilter.dimension(function(data) {
return ~~((Date.now() - new Date(data.DOB)) / (31557600000))
});
var ageGroup = ageDimension.group().reduceCount();
chart
.width(800)
.height(300)
.x(d3.scale.linear().domain([15,70]))
.brushOn(false)
.yAxisLabel("Count")
.xAxisLabel("Age")
.dimension(ageDimension)
.group(ageGroup)
.on('renderlet', function(chart) {
chart.selectAll('rect').on('click', function(d) {
console.log('click!', d);
});
});
chart.render();
});
</script>
</body>
</html>
Agora, solicite o navegador e veremos a seguinte resposta.