{"id":167069,"date":"2026-01-28T13:01:40","date_gmt":"2026-01-28T12:01:40","guid":{"rendered":"https:\/\/liora.io\/es\/?p=167069"},"modified":"2026-02-26T14:30:30","modified_gmt":"2026-02-26T13:30:30","slug":"bokeh-la-biblioteca-de-visualizacion-python","status":"publish","type":"post","link":"https:\/\/liora.io\/es\/bokeh-la-biblioteca-de-visualizacion-python","title":{"rendered":"Bokeh: la biblioteca de visualizaci\u00f3n Python de nueva generaci\u00f3n"},"content":{"rendered":"\n<p><b>El an\u00e1lisis de datos ofrece muchas oportunidades. Sin embargo, interpretar los datos en bruto puede resultar dif\u00edcil para los usuarios no t\u00e9cnicos de una empresa. Al presentar la informaci\u00f3n relevante de forma clara y expl\u00edcita, la Data Visualisation pone remedio a ese problema y permite que cualquiera pueda sacarle partido al Big Data.<\/b><\/p>\n\n\n\n<p>Si ya est\u00e1s familiarizado con bibliotecas de Data Visualisation como <a href=\"https:\/\/liora.io\/es\/todo-sobre-matplotlib-2\">Matplotlib<\/a> o <a href=\"https:\/\/liora.io\/es\/seaborn-la-herramienta-de-data-visualization-python\">Seaborn<\/a>, hoy vamos a ver por qu\u00e9 tienes que a\u00f1adir <b>Bokeh<\/b> a tu kit de herramientas de Data Visualisation.<\/p>\n\n\n\n<p>Al igual que sus bibliotecas hermanas, Bokeh es una biblioteca de Python de Data Visualisation que permite crear gr\u00e1ficos y objetos visuales elegantes y de aspecto profesional, como diagramas de l\u00edneas, de barras, histogramas, distribuciones, etc. con leyendas, texto u otras anotaciones. Pero en lo que Bokeh se diferencia es en <b>la interactividad de sus gr\u00e1ficos, su representaci\u00f3n multiplataforma y su grado de personalizaci\u00f3n.<\/b><\/p>\n\n\n\n<p>\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]&gt;a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-por-que-es-bokeh-una-biblioteca-interactiva\">\u00bfPor qu\u00e9 es Bokeh una biblioteca interactiva?<\/h2>\n\n\n\n<p>Con unas pocas l\u00edneas de <b>c\u00f3digo Python<\/b>, Bokeh <b>crea gr\u00e1ficos alimentados por Javascript<\/b> que proporcionan una interactividad y un dinamismo sin precedentes.<\/p>\n\n\n\n<p>El proceso de ejecuci\u00f3n del c\u00f3digo de Bokeh tiene dos vertientes: en primer lugar, elegimos un bloque de entre los bloques preconstruidos de Bokeh para crear nuestra visualizaci\u00f3n y, a continuaci\u00f3n, se a\u00f1ade c\u00f3digo adicional para personalizar estos bloques de forma y que <b>se ajusten al m\u00e1ximo a nuestras necesidades<\/b>.<\/p>\n\n\n\n<p>A partir de nuestro c\u00f3digo Python, Bokeh convertir\u00e1 este <b>c\u00f3digo a JSON<\/b> y lo pasar\u00e1 a <b>BokehJS<\/b>, una biblioteca Javascript, que a su vez pasar\u00e1 esta informaci\u00f3n a los navegadores web modernos para su visualizaci\u00f3n en una pesta\u00f1a web.<\/p>\n\n\n\n<p>Las funcionalidades de interacci\u00f3n en nuestro gr\u00e1fico son nativas de Bokeh, es decir, incluso el gr\u00e1fico m\u00e1s simple presenta estas funcionalidades en lo que llamaremos una <b>caja de herramientas <\/b>en el lateral (derecho por defecto) del gr\u00e1fico:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-not-rounded\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/11\/image11.png\" alt=\"\" style=\"width:32px;height:auto\" \/><\/figure>\n\n\n\n<p>Desplazarse por el gr\u00e1fico para seleccionar un \u00e1rea<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-not-rounded\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/11\/image1-2.png\" alt=\"\" \/><\/figure>\n\n\n\n<p>Hacer zoom en una zona definida del gr\u00e1fico<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-not-rounded\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/11\/image3.png\" alt=\"\" \/><\/figure>\n\n\n\n<p>Hacer zoom con el rat\u00f3n<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-not-rounded\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/11\/image16.png\" alt=\"\" \/><\/figure>\n\n\n\n<p>Guardar el gr\u00e1fico en un archivo PNG<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-not-rounded\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/11\/image10.png\" alt=\"\" \/><\/figure>\n\n\n\n<p>Restablecer la configuraci\u00f3n por defecto del gr\u00e1fico<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-not-rounded\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/11\/image15.png\" alt=\"\" \/><\/figure>\n\n\n\n<p>Ventana de ayuda para aprender a utilizar la caja de herramientas de interacci\u00f3n<\/p>\n\n\n\n<p>Podemos a\u00f1adir nuevas herramientas a esta caja de herramientas utilizando el m\u00e9todo <b><i>add_tools()<\/i><\/b> donde, por ejemplo, puedes a\u00f1adir funcionalidades al pasar el rat\u00f3n por encima utilizando la clase <b>HoverTool<\/b>.<\/p>\n\n\n\n<p>Desde un punto de vista m\u00e1s pr\u00e1ctico, Bokeh es f\u00e1cil de utilizar. Funciona con el <b>sistema de capas adicionales<\/b> que se van a\u00f1adiendo a medida que se ejecuta el c\u00f3digo. As\u00ed, despu\u00e9s de crear nuestra figura, podemos a\u00f1adir un nuevo tipo de gr\u00e1fico, superponiendo esta nueva capa sobre el gr\u00e1fico existente.<\/p>\n\n\n\n<p>permite mostrar en una nueva pesta\u00f1a del navegador, un <b>archivo HTML<\/b> que contiene:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2023\/03\/Ejemplo-de-visualizacion-de-multiples-capas.jpg\" alt=\"Ejemplo de visualizaci\u00f3n de m\u00faltiples capas\" style=\"width:auto;height:550px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/es\/formacion-data-analyst\">Empezar un curso de Data Analyst<\/a><\/div>\n<\/div>\n\n\n\n<p>Por otra parte, Bokeh ofrece la posibilidad de crear y utilizar widgets en nuestro gr\u00e1fico, prometiendo un visual din\u00e1mico y m\u00e1s interactivo que nunca.<\/p>\n\n\n\n<p>De hecho, gracias a la clase <b>CustomJS<\/b> del subm\u00f3dulo bokeh.models, la actualizaci\u00f3n de valores mediante sliders, casillas de verificaci\u00f3n o campos de formulario se convierte en un juego de ni\u00f1os. Los objetos <b>CustomJS<\/b> permiten establecer el v\u00ednculo entre los <b>objetos Python<\/b> manipulados y los <b>objetos Javascript<\/b> que Bokeh utiliza para generar y mostrar las figuras. Muy cercanos al lenguaje Javascript en su dise\u00f1o de widgets, suponen una aut\u00e9ntica revoluci\u00f3n para la <a href=\"https:\/\/liora.io\/es\/dataviz-definicion-objetivos-y-usos\"><b>visualizaci\u00f3n de datos<\/b><\/a> pasando de visualizaciones 2D est\u00e1ticas a visualizaciones interactivas, din\u00e1micas, modificables y adaptables a todas las necesidades.<\/p>\n\n\n\n<p>Adem\u00e1s, combinando esta funcionalidad de Bokeh con la que permite elegir el tipo de visualizaci\u00f3n entre una <b>imagen PNG<\/b>, un <b>notebook<\/b> o un <b>archivo web en formato HTML<\/b>, nos damos cuenta de que Bokeh es mucho m\u00e1s que una librer\u00eda de visualizaci\u00f3n, ya que casi permite crear aplicaciones web de visualizaci\u00f3n de datos, como muestra<a href=\"https:\/\/demo.bokeh.org\/movies\"> <b>este ejemplo<\/b><\/a> extra\u00eddo directamente de la documentaci\u00f3n de Bokeh.<\/p>\n\n\n\n<p>Bokeh est\u00e1 a medio camino entre la biblioteca de visualizaci\u00f3n habitual y una biblioteca de creaci\u00f3n de aplicaciones de datos como <b>Streamlit<\/b>.<\/p>\n\n\n\n<p>A\u00fan mejor, para conseguir la aut\u00e9ntica representaci\u00f3n de una aplicaci\u00f3n web de visualizaci\u00f3n de datos, Bokeh permite mostrar y recopilar datos visualizados a partir de un Streaming de datos, en tiempo real, procedentes de fuentes como mercados financieros, sensores f\u00edsicos o IOT.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/12\/ajax_streaming-1-1.gif\" alt=\"\" title=\"\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-bokeh-una-biblioteca-personalizable\">Bokeh, una biblioteca personalizable<\/h2>\n\n\n\n<p>Por otro lado, Bokeh permite una personalizaci\u00f3n <b>casi infinita<\/b> del resultado. Si nos fijamos en el \u00faltimo gr\u00e1fico, es posible <b>modificar cada uno<\/b> de los diferentes aspectos mostrados para obtener una representaci\u00f3n \u00fanica a\u00f1adiendo capas de especificaciones seg\u00fan se desee.<\/p>\n\n\n\n<p>A\u00f1adiendo unas pocas l\u00edneas m\u00e1s de especificaci\u00f3n al c\u00f3digo anterior, tendremos:<\/p>\n\n\n\n<p>Si los gr\u00e1ficos se multiplican, tambi\u00e9n tenemos <b>la posibilidad de mostrar esos gr\u00e1ficos en filas<\/b>, columnas o en diferentes pesta\u00f1as dentro de la misma figura. Esto puede ser muy relevante cuando queremos diferenciar los gr\u00e1ficos por categor\u00eda o tipo de valor.<\/p>\n\n\n\n<p>Hemos visto lo bien que puede trabajar Bokeh con listas de <a href=\"https:\/\/liora.io\/es\/python-un-zoom-en-el-lenguaje-mas-popular\"><b>Python<\/b><\/a>, tablas de<a href=\"https:\/\/liora.io\/numpy\"> <b>NumPy<\/b><\/a>, series de <a href=\"https:\/\/liora.io\/es\/pandas-python\"><b>Pandas<\/b><\/a>, etc. Lo que no sab\u00edamos hasta ahora es que esas entradas se convierten a un <b>Column DataSource<\/b>, un tipo de datos exclusivo de Bokeh. Este tipo de datos es el objeto fuente de datos central utilizado en Bokeh. Aunque Bokeh suele crearlos por nosotros de manera transparente, hay ocasiones en las que es \u00fatil crearlos expresamente, especialmente con <b>Panda Dataframes<\/b>.<\/p>\n\n\n\n<p>En el ejemplo de abajo, vamos a coger de un Dataframe de Pok\u00e9mon, dos fuentes de datos, que usaremos en 2 pesta\u00f1as diferentes, una para mostrar Pok\u00e9mon legendarios y otra pesta\u00f1a para Pok\u00e9mon no legendarios.<\/p>\n\n\n\n<p>F\u00edjate que tambi\u00e9n hemos creado una <b>herramienta Hover<\/b> (pasar el rat\u00f3n por encima), que hemos a\u00f1adido a nuestra caja de herramientas, que al pasar el rat\u00f3n por encima de un punto concreto, nos da informaci\u00f3n sobre ese punto, como el nombre, los puntos de defensa y de ataque.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2023\/03\/Ejemplo-de-visualizacion-de-multiples-capas-2-1.jpg\" alt=\"Ejemplo de visualizaci\u00f3n de m\u00faltiples capas - 1\" style=\"width:auto;height:600px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-bokeh-una-biblioteca-especializada\">Bokeh, \u00bfuna biblioteca especializada?<\/h2>\n\n\n\n<p>Por \u00faltimo, si a\u00fan no est\u00e1s convencido de la capacidad de Bokeh, debes saber que esta biblioteca puede ser muy \u00fatil para abordar problemas especializados como la visualizaci\u00f3n de <b>datos geogr\u00e1ficos<\/b> o la de gr\u00e1ficos implementados con NetworkX, por ejemplo. El siguiente c\u00f3digo permite visualizar un gr\u00e1fico <b>NetworkX<\/b> especificando propiedades en los nodos y aristas del gr\u00e1fico.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized is-style-not-rounded\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2023\/03\/image5-1024x953.jpg\" alt=\"\" style=\"width:auto;height:500px\" \/><\/figure>\n\n\n\n<p>Si la simple visualizaci\u00f3n de un gr\u00e1fico no es necesariamente muy relevante u original, s\u00ed que ser\u00e1 el caso de las caracter\u00edsticas asociadas a Bokeh, como resaltar los <b>nodos adyacentes (vecinos).<\/b><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-resized is-style-not-rounded\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2023\/03\/image2-1011x1024.jpg\" alt=\"gr\u00e1fico2\" style=\"width:auto;height:550px\" \/><\/figure>\n\n\n\n<p>En resumen, Bokeh es una <b>biblioteca Python<\/b> que permite crear representaciones interactivas, din\u00e1micas y personalizables a partir de diversas fuentes de datos que pueden visualizarse en diferentes plataformas.<\/p>\n\n\n\n<p>A medio camino entre una biblioteca cl\u00e1sica de <a href=\"https:\/\/liora.io\/es\/dataviz-definicion-objetivos-y-usos\">Data Visualisation<\/a> y una biblioteca que genera una aplicaci\u00f3n web, Bokeh se est\u00e1 abriendo camino como la biblioteca de <b>Data Visualization de nueva generaci\u00f3n<\/b> y puede utilizarse tanto para fines generales como espec\u00edficos.<\/p>\n\n\n\n<p>Si te interesa Bokeh y la Data Visualisation, <b>puedes optar por nuestro curso de Data Analyst<\/b>, en el que la Data Visualisation dejar\u00e1 de tener secretos para ti.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/es\/formacion-data-analyst\">Descubrir el curso de Data Analyst<\/a><\/div>\n<\/div>\n\n\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfPor qu\u00e9 es Bokeh una biblioteca interactiva?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Bokeh crea gr\u00e1ficos con Javascript mediante c\u00f3digo Python, ofreciendo interactividad y dinamismo. Funciona en dos vertientes: elegir bloque preconstruido, personalizarlo con c\u00f3digo adicional. Bokeh convierte c\u00f3digo Python a JSON, BokehJS (biblioteca Javascript) lo pasa a navegadores web. Herramientas nativas: desplazarse, zoom \u00e1rea definida, zoom rat\u00f3n, guardar PNG, restablecer, ayuda. add_tools() a\u00f1ade funcionalidades (ej. HoverTool). Sistema de capas permite superponer gr\u00e1ficos. Soporta widgets con CustomJS (bokeh.models) para sliders, casillas, formularios, vinculando Python con Javascript. Permite visualizaciones din\u00e1micas en PNG, notebook o HTML (casi aplicaciones web). Soporta streaming datos tiempo real (mercados financieros, sensores, IoT).\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Bokeh, una biblioteca personalizable\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Personalizaci\u00f3n casi infinita: modificar cada aspecto a\u00f1adiendo capas de especificaciones. Posibilidad mostrar gr\u00e1ficos en filas, columnas o pesta\u00f1as dentro misma figura. Usa Column DataSource (tipo datos exclusivo Bokeh) \u2013 convierte listas Python, NumPy, Pandas. \u00datil crear expl\u00edcitamente con Pandas DataFrames para diferentes pesta\u00f1as (ej. Pok\u00e9mon legendarios vs no legendarios). Herramienta Hover a\u00f1adible para mostrar informaci\u00f3n al pasar rat\u00f3n (nombre, puntos ataque\/defensa).\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Bokeh, \u00bfuna biblioteca especializada?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Bokeh \u00fatil para visualizaci\u00f3n datos geogr\u00e1ficos y gr\u00e1ficos NetworkX (especificando propiedades nodos\/aristas). Resalta nodos adyacentes (vecinos). A medio camino entre biblioteca cl\u00e1sica DataViz y generaci\u00f3n de aplicaciones web \u2013 biblioteca de nueva generaci\u00f3n para fines generales y espec\u00edficos.\"\n      }\n    }\n  ]\n}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>El an\u00e1lisis de datos ofrece muchas oportunidades. Sin embargo, interpretar los datos en bruto puede resultar dif\u00edcil para los usuarios no t\u00e9cnicos de una empresa. Al presentar la informaci\u00f3n relevante de forma clara y expl\u00edcita, la Data Visualisation pone remedio a ese problema y permite que cualquiera pueda sacarle partido al Big Data.<\/p>\n","protected":false},"author":85,"featured_media":167071,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2440],"class_list":["post-167069","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-ia"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/167069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/users\/85"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/comments?post=167069"}],"version-history":[{"count":4,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/167069\/revisions"}],"predecessor-version":[{"id":184512,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/167069\/revisions\/184512"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/media\/167071"}],"wp:attachment":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/media?parent=167069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/categories?post=167069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}