- Deprecated function: Use of "static" in callables is deprecated in Drupal\user\Entity\Role::postLoad() (line 172 of core/modules/user/src/Entity/Role.php).
Drupal\user\Entity\Role::postLoad(Object, Array) (Line: 423)
Drupal\Core\Entity\EntityStorageBase->postLoad(Array) (Line: 353)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 16)
Drupal\user\RoleStorage->isPermissionInRoles('access site in maintenance mode', Array) (Line: 112)
Drupal\Core\Session\UserSession->hasPermission('access site in maintenance mode') (Line: 105)
Drupal\Core\Session\AccountProxy->hasPermission('access site in maintenance mode') (Line: 83)
Drupal\redirect\RedirectChecker->canRedirect(Object) (Line: 120)
Drupal\redirect\EventSubscriber\RedirectRequestSubscriber->onKernelRequestCheckRedirect(Object, 'kernel.request', Object)
call_user_func(Array, Object, 'kernel.request', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.request') (Line: 145)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1af9e428-221e-40ff-b5e0-3f8d21524565') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1af9e428-221e-40ff-b5e0-3f8d21524565') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1af9e428-221e-40ff-b5e0-3f8d21524565') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1af9e428-221e-40ff-b5e0-3f8d21524565') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-af083e49-fe13-4b84-ac53-ff2715671e76') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-af083e49-fe13-4b84-ac53-ff2715671e76') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-af083e49-fe13-4b84-ac53-ff2715671e76') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-af083e49-fe13-4b84-ac53-ff2715671e76') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-c41df780-44b3-42d3-9e13-473a8d4b497b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-c41df780-44b3-42d3-9e13-473a8d4b497b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-c41df780-44b3-42d3-9e13-473a8d4b497b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-c41df780-44b3-42d3-9e13-473a8d4b497b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a254065e-cb98-4865-ae7a-ba5e7687971b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a254065e-cb98-4865-ae7a-ba5e7687971b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a254065e-cb98-4865-ae7a-ba5e7687971b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a254065e-cb98-4865-ae7a-ba5e7687971b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6617bb05-066f-44c4-9937-1d432b687f72') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6617bb05-066f-44c4-9937-1d432b687f72') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6617bb05-066f-44c4-9937-1d432b687f72') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6617bb05-066f-44c4-9937-1d432b687f72') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-fc3d9104-0daa-4013-b2b9-37acb119c83f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-fc3d9104-0daa-4013-b2b9-37acb119c83f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-fc3d9104-0daa-4013-b2b9-37acb119c83f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-fc3d9104-0daa-4013-b2b9-37acb119c83f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-66914dfd-db9f-41cd-9290-6a0a1b5ed1a1') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-66914dfd-db9f-41cd-9290-6a0a1b5ed1a1') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-66914dfd-db9f-41cd-9290-6a0a1b5ed1a1') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-66914dfd-db9f-41cd-9290-6a0a1b5ed1a1') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Return type of Drupal\google_analytics\Component\Render\GoogleAnalyticsJavaScriptSnippet::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 10 of modules/contrib/google_analytics/src/Component/Render/GoogleAnalyticsJavaScriptSnippet.php).
include('/var/www/vhosts/interactivechaos.ovh/httpdocs/modules/contrib/google_analytics/src/Component/Render/GoogleAnalyticsJavaScriptSnippet.php') (Line: 578)
Composer\Autoload\ClassLoader::Composer\Autoload\{closure}('/var/www/vhosts/interactivechaos.ovh/httpdocs/modules/contrib/google_analytics/src/Component/Render/GoogleAnalyticsJavaScriptSnippet.php') (Line: 432)
Composer\Autoload\ClassLoader->loadClass('Drupal\google_analytics\Component\Render\GoogleAnalyticsJavaScriptSnippet') (Line: 372)
google_analytics_page_attachments(Array) (Line: 313)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}(Object, 'google_analytics') (Line: 405)
Drupal\Core\Extension\ModuleHandler->invokeAllWith('page_attachments', Object) (Line: 310)
Drupal\Core\Render\MainContent\HtmlRenderer->invokePageAttachmentHooks(Array) (Line: 288)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Use of "static" in callables is deprecated in Drupal\user\Entity\Role::postLoad() (line 172 of core/modules/user/src/Entity/Role.php).
Drupal\user\Entity\Role::postLoad(Object, Array) (Line: 423)
Drupal\Core\Entity\EntityStorageBase->postLoad(Array) (Line: 353)
Drupal\Core\Entity\EntityStorageBase->loadMultiple() (Line: 126)
eu_cookie_compliance_page_attachments(Array) (Line: 313)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}(Object, 'eu_cookie_compliance') (Line: 405)
Drupal\Core\Extension\ModuleHandler->invokeAllWith('page_attachments', Object) (Line: 310)
Drupal\Core\Render\MainContent\HtmlRenderer->invokePageAttachmentHooks(Array) (Line: 288)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 144)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 38)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 144)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 38)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'taxonomy_term') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('taxonomy_term_access') (Line: 145)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'taxonomy_term') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('taxonomy_term_access') (Line: 145)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)