Color de fondo para múltiples paneles Highchart, en la aplicación Vue


8

Estoy usando Highcharts en una aplicación Vue usando highcharts-vue

Estoy configurando mi plantilla así

<highcharts class="vessChart" ref="chart" style="width:100%"  :callback="chartcallback" :options="options"    ></highcharts>  

y luego configuro las opciones del gráfico en el Vue

            yAxis:[],
        series:[],     
        background:[],
        options: {              
          chart: {
            borderWidth: 1,
            marginLeft: 40,
            marginRight: 2,
            type:'line',
            zoomType: 'x',
            title: {
                text: ''
            },
            panning:true
            /*backgroundColor:'lightgrey'*/
          },
          title: {
            text: ''
          },
          pane:{
            background:[]
          },
          time:{
            useUTC:true
          },  
          credits:{
            enabled:false
          },
          tooltip: {
            shared: true
          },
          title:{
            text:null
          },
          rangeSelector: {
            inputEnabled: false
          },
          xAxis:{
            type:'datetime',
            title:
            {
              align:'high'
            }, 
            labels: {
              padding: 50,
              format: '{value:%e %b %Y}',
              style: {
                fontSize: '10px'
              }
            },
            crosshair: {
                enabled: true,
                width: 2,
                color: '#000'
            },
          },
          yAxis: [],   
          plotOptions: {
            series: {
              animation: false
            }
          },
          ,series: []
        }

y luego, cuando tengo datos para agregar, inserto datos en yAxis, series y matrices de fondo en consecuencia

                this.data.titles.forEach(title => {
              this.yAxis.push(
                  {
                    title: {
                      text: title.title,
                      margin:20,
                      fontSize:"15px"
                    },
                    labels: {
                      enabled:true,
                      align: 'left',
                      padding:15
                    },
                    alignTicks:'left', 
                    textAlign:'left',
                    align:'middle',
                    height: chartHeight+'%',
                    top:topStep+'%',
                    opposite:false, 
                    offset:0
                  }
              );
              this.background.push({backgroundColor: "red"});
              topStep = topStep + chartHeight + 5; 
              this.series.push({
                    yAxis:counter,
                    name:title.title,
                    data:[]
              });
              counter++;
            });//foreach 
            this.options.yAxis = this.yAxis;
            this.options.series = this.series;
            this.options.pane = this.background;

Traté de importar highcharts-more haciendo

    import highchartsmore from './highcharts-more.js'     

pero no funciona, la página se vuelve blanca. También intenté importarlo yendo a index.html de Vue y agregando<script src="https://code.highcharts.com/highcharts-more.js"></script>

No hay error en la página, pero los paneles aún no tienen color.

* Si esto no es posible, ¿puedo al menos agregar una línea entre los paneles de alguna manera?

Gracias

EDITAR

Las áreas rojas son los "paneles". Graciasingrese la descripción de la imagen aquí


Es difícil depurarlo así. Si puede proporcionar un violín con su código, sería útil.
Junaid se precipitó

Reproduzca su código en línea en el que podría trabajar. Aquí hay una plantilla que puede usar: codesandbox.io/s/nw750l07nj
Sebastian Wędzel

@ SebastianWędzel Comprueba esto. Si elimina el código relacionado con el panel y presiona "Actualizar gráfico", debería traer nuevos datos. codesandbox.io/s/vue-template-40b4z
codebot

Me temo que esta demostración no funciona bien. ¿Podrías arreglarlo?
Sebastian Wędzel

@ SebastianWędzel Hola de nuevo. Por favor, mira esto https://codesandbox.io/s/vue-template-m6fse ahora funciona. Cuando presiona el botón Actualizar gráfico, crea 2 paneles diferentes en el mismo gráfico. Ahora, quiero que esos 2 paneles tengan un color de fondo de alguna manera. Gracias
codebot

Respuestas:


3

Puede usar la propiedad chart.plotBackgroundColor para cumplir sus requisitos.

Demostración: https://codesandbox.io/s/vue-template-pt9jp

Y debido a que su gráfico se representa dinámicamente, animo a deshabilitar la animación:

chart: {
  type: "spline",
  title: "Hassaan",
  animation: false
},

API: https://api.highcharts.com/highcharts/chart.plotBackgroundColor


Esta cerca, pero no es lo que quiero. Quiero que los paneles sean blancos y el fondo aún negro.
codebot

No entiendo: ¿tiene una imagen que describa cómo debería verse el gráfico?
Sebastian Wędzel

Comprueba mi pregunta original, cargué una imagen, las áreas rojas son los paneles. Esos paneles deben tener un color diferente por sí mismos.
codebot

Entonces, ¿te gustaría lograr algo como esto? codesandbox.io/s/vue-template-umuhv
Sebastian Wędzel

Sí, pero no puede ver dónde comienza un panel y dónde termina el otro. Por lo tanto, el espacio entre ellos también debe ser negro, para que pueda distinguirlos fácilmente. El espacio entre 7.5 y 0
codebot

2

Por lo que veo que usted tiene que hacer el estilismo de css página Docs , hay un ejemplo vivo aquí

@import 'https://code.highcharts.com/css/highcharts.css';

.highcharts-plot-background {
	fill: #efffff;
}
.highcharts-plot-border {
	stroke-width: 2px;
	stroke: #7cb5ec;
}

Editar: Encontré una solución sobre este tema, puede cambiar el color de fondo para un panel de rango específico usando plotBands:

e.g. yAxis : {[ ... plotBands : {color : '#f7d724', from : -50, to : 50}, ... ]}

En su caso, debe establecer los valores para el primero y el último.


Esto está más cerca de lo que quiero, pero quiero que el panel tenga un color diferente y no puedo ver ninguna regla css solo para los paneles del gráfico. Gracias
codebot

No estoy seguro de lo que quiere decir con panel, pero encontré esta propiedad en API Reference
Bernardo Marques

Mira la foto en mi pregunta original, las áreas rojas son los paneles. Gracias
codebot

Intenté pane:{ background:{ backgroundColor:"#000000" } }dentro de las opciones de gráfico json y dentro del "gráfico" de las mismas opciones y no hizo nada ...
codebot

0

Una forma complicada de hacerlo sería inyectar un rect en el svg.

document.getElementsByClassName("highcharts-root")[0].innerHTML += '<rect width="100%" x="0" y="40" height="150" fill="#ff0000"></rect>';
document.getElementsByClassName("highcharts-root")[0].innerHTML += '<rect width="100%" x="0" y="200" height="150" fill="#ff0000"></rect>';
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.