{"id":212,"date":"2022-11-03T12:30:00","date_gmt":"2022-11-03T12:30:00","guid":{"rendered":"https:\/\/pacohunterdev.com\/blog\/?p=212"},"modified":"2022-11-03T01:32:01","modified_gmt":"2022-11-03T01:32:01","slug":"crear-grafica-con-chart-js-y-js","status":"publish","type":"post","link":"https:\/\/pacohunterdev.com\/blog\/2022\/11\/03\/crear-grafica-con-chart-js-y-js\/","title":{"rendered":"Crear gr\u00e1fica con Chart.js y JS"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En algunos de los sistemas que te he presentado he agregado gr\u00e1ficas usando Chart.js. En este ejemplo te mostrar\u00e9 como crear una gr\u00e1fica de barras, pie, dona y l\u00ednea, pues son las que m\u00e1s he empleado. Puedes ver la documentaci\u00f3n oficial en su <a href=\"https:\/\/www.chartjs.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">sitio web<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Importando Chart.js<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Puedes agregarlo de diferentes maneras, ya sea descargando el js, instal\u00e1ndolo con npm o con el cdn, en mi caso usar\u00e9 esta y solo lo agregar\u00e9 dentro del &lt;head>&lt;\/head><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@3.9.1\/dist\/chart.min.js\">&lt;\/script><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Contenedor de la gr\u00e1fica<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nuestra gr\u00e1fica se debe de mostrar dentro de un <code>&lt;canvas>&lt;\/canvas><\/code> a este debemos colocarle un<em><strong> id<\/strong><\/em>, pues con este sabremos en d\u00f3nde queremos dibujar la gr\u00e1fica. En mi caso voy a hacer diferentes gr\u00e1ficas. Las primeras van a ser con datos de un objeto predefinido y la otra para datos provenientes de una api. Entonces a cada canvas le colocar\u00e9 un id para saber qu\u00e9 grafica va a contener.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"738\" height=\"343\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/contenedores1.png\" alt=\"\" class=\"wp-image-213\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/contenedores1.png 738w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/contenedores1-300x139.png 300w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><figcaption class=\"wp-element-caption\">Contenedores para gr\u00e1ficas de objeto mascotas<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"676\" height=\"347\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/contenedores2.png\" alt=\"\" class=\"wp-image-214\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/contenedores2.png 676w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/contenedores2-300x154.png 300w\" sizes=\"auto, (max-width: 676px) 100vw, 676px\" \/><figcaption class=\"wp-element-caption\">Contenedores para gr\u00e1ficas de los datos de la api<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Funci\u00f3n para crear la gr\u00e1fica<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Primero voy a crear una funci\u00f3n que pueda utilizar para dibujar las gr\u00e1ficas. Esta funci\u00f3n va a recibir el tipo de gr\u00e1fica (lineal, barras, dona, pie), el contenedor (id del canvas), labels (las etiquetas), data (los valores de cada etiqueta), el label o etiqueta que dir\u00e1 y por \u00faltimo el tama\u00f1o, que se obtiene con la longitud del arreglo u objeto.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"831\" height=\"412\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/crear-grafica-1.png\" alt=\"\" class=\"wp-image-218\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/crear-grafica-1.png 831w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/crear-grafica-1-300x149.png 300w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/crear-grafica-1-768x381.png 768w\" sizes=\"auto, (max-width: 831px) 100vw, 831px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Primero cuando seleccionamos el canvas en el que se va a mostrar la gr\u00e1fica colocamos el <strong>id del contenedor que estamos recibiendo.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En type colocamos e<strong>l tipo de gr\u00e1fica que recibimos, lo mismo con los labels, data y label.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para el <strong>color <\/strong>se emplea otra funci\u00f3n que genera colores aleatorios dependiendo de la cantidad de colores que se necesiten, en este caso se usa el tamanio que recibimos. La funci\u00f3n para generar los colores es la siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"165\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/generar-colores.png\" alt=\"\" class=\"wp-image-219\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/generar-colores.png 700w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/generar-colores-300x71.png 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Gr\u00e1ficas con datos predefinidos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Como te mencione, primero voy a hacer las gr\u00e1ficas para los datos de un objeto. El objeto es el siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"664\" height=\"160\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/objeto.png\" alt=\"\" class=\"wp-image-215\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/objeto.png 664w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/objeto-300x72.png 300w\" sizes=\"auto, (max-width: 664px) 100vw, 664px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Lo que sigue es obtener los <strong>labels <\/strong>que ser\u00e1n los nombres de las mascotas  y <strong>data <\/strong>que ser\u00e1n las edades de las mascotas, que le pasaremos a la funci\u00f3n <strong>crearGrafica<\/strong>. Como es un objeto de tipo <strong>key: value<\/strong> para obtenerlos simplemente usamos Object.keys y Object.values respectivamente. Las puse por separado en funciones y se ven as\u00ed<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"688\" height=\"146\" data-id=\"220\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/funciones-objeto.png\" alt=\"\" class=\"wp-image-220\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/funciones-objeto.png 688w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/funciones-objeto-300x64.png 300w\" sizes=\"auto, (max-width: 688px) 100vw, 688px\" \/><\/figure>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Para dibujar las gr\u00e1ficas llamamos a la funci\u00f3n de <strong>crearGrafica <\/strong>y le pasamos los datos necesarios como se muestra a continuaci\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"88\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/creando-graficas-1-1024x88.png\" alt=\"\" class=\"wp-image-221\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/creando-graficas-1-1024x88.png 1024w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/creando-graficas-1-300x26.png 300w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/creando-graficas-1-768x66.png 768w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/creando-graficas-1.png 1067w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Como se ve primero va el tipo,  despu\u00e9s el id del contenedor, seguido las funciones para obtener los nombres (<strong>labels<\/strong>), las edades (<strong>data<\/strong>), el label que en este caso ser\u00e1 solo \u00ab<strong>Edad\u00bb <\/strong>y por ultimo el tama\u00f1o del objeto. Se llama 4 veces a la funci\u00f3n y en cada una cambia el tipo y el contenedor. El resultado es el siguiente<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"302\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/resultado-1-1024x302.png\" alt=\"\" class=\"wp-image-222\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/resultado-1-1024x302.png 1024w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/resultado-1-300x88.png 300w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/resultado-1-768x226.png 768w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/resultado-1.png 1185w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Gr\u00e1ficas con datos provenientes de una API<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No siempre vamos a poder definir los datos nostros, casi siempre estos provienen de una fuente externa y con estos datos se deben de crear las gr\u00e1ficas. Para este ejemplo emplear\u00e9 los datos de una API que obtiene la poblaci\u00f3n de Estados Unidos por a\u00f1o, puedes ver la documentaci\u00f3n <a rel=\"noreferrer noopener\" href=\"https:\/\/datausa.io\/about\/api\/\" target=\"_blank\">aqu\u00ed <\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los datos que obtengo son los siguientes:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"204\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/datos-recibidos.png\" alt=\"\" class=\"wp-image-223\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/datos-recibidos.png 778w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/datos-recibidos-300x79.png 300w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/datos-recibidos-768x201.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pero a m\u00ed lo que me interesa es el a\u00f1o y la poblaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entonces lo primero que hago es obtener los datos con <strong>fetch<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"903\" height=\"101\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image.png\" alt=\"\" class=\"wp-image-224\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image.png 903w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-300x34.png 300w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-768x86.png 768w\" sizes=\"auto, (max-width: 903px) 100vw, 903px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n, al igual que en el ejemplo anterior, voy a crear unas funciones para obtener los a\u00f1os y la poblaci\u00f3n que ser\u00e1n los labels y data respectivamente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-1.png\" alt=\"\" class=\"wp-image-225\" width=\"535\" height=\"207\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-1.png 582w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-1-300x116.png 300w\" sizes=\"auto, (max-width: 535px) 100vw, 535px\" \/><figcaption class=\"wp-element-caption\">Year y Population son las claves que me interesan<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando resuelvo la funci\u00f3n de <strong>obtenerDatosDeApi<\/strong>, primero obtengo el contenido de la propiedad <em>data<\/em>, pues ah\u00ed est\u00e1n los datos que me interesan y despu\u00e9s al igual que antes llamamos a la funci\u00f3n <strong>crearGrafica <\/strong>y le pasamos los datos necearios.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"83\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-2-1024x83.png\" alt=\"\" class=\"wp-image-226\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-2-1024x83.png 1024w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-2-300x24.png 300w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-2-768x63.png 768w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-2.png 1166w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El resultado es el siguiente<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"318\" src=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-3-1024x318.png\" alt=\"\" class=\"wp-image-227\" srcset=\"https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-3-1024x318.png 1024w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-3-300x93.png 300w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-3-768x238.png 768w, https:\/\/pacohunterdev.com\/blog\/wp-content\/uploads\/2022\/11\/image-3.png 1221w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Puedes ver el c\u00f3digo completo <a href=\"https:\/\/github.com\/pacohunterdev\/crear-grafica-chartjs\" target=\"_blank\" rel=\"noreferrer noopener\">aqu\u00ed <\/a>y la demostraci\u00f3n por <a href=\"https:\/\/pacohunterdev.github.io\/crear-grafica-chartjs\/\" target=\"_blank\" rel=\"noreferrer noopener\">aqu\u00ed<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En algunos de los sistemas que te he presentado he agregado gr\u00e1ficas usando Chart.js. En este ejemplo te mostrar\u00e9 como crear una gr\u00e1fica de barras, pie, dona y l\u00ednea, pues son las que m\u00e1s he empleado. Puedes ver la documentaci\u00f3n oficial en su sitio web. Importando Chart.js Puedes agregarlo de diferentes maneras, ya sea descargando el js, instal\u00e1ndolo con npm o con el cdn, en mi caso usar\u00e9 esta y solo lo agregar\u00e9 dentro del &lt;head>&lt;\/head> Contenedor de la gr\u00e1fica Nuestra gr\u00e1fica se debe de mostrar dentro de un &lt;canvas>&lt;\/canvas> a este debemos colocarle un id, pues con este sabremos&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[23],"class_list":["post-212","post","type-post","status-publish","format-standard","hentry","category-javascript","tag-javascript"],"_links":{"self":[{"href":"https:\/\/pacohunterdev.com\/blog\/wp-json\/wp\/v2\/posts\/212","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pacohunterdev.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pacohunterdev.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pacohunterdev.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pacohunterdev.com\/blog\/wp-json\/wp\/v2\/comments?post=212"}],"version-history":[{"count":2,"href":"https:\/\/pacohunterdev.com\/blog\/wp-json\/wp\/v2\/posts\/212\/revisions"}],"predecessor-version":[{"id":229,"href":"https:\/\/pacohunterdev.com\/blog\/wp-json\/wp\/v2\/posts\/212\/revisions\/229"}],"wp:attachment":[{"href":"https:\/\/pacohunterdev.com\/blog\/wp-json\/wp\/v2\/media?parent=212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pacohunterdev.com\/blog\/wp-json\/wp\/v2\/categories?post=212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pacohunterdev.com\/blog\/wp-json\/wp\/v2\/tags?post=212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}