Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

149
Views
La barra apilada de Recharts está pintando muchas etiquetas cuando representa un valor total para todas las barras apiladas en una fila/columna. ¿Cómo hacer que renderice solo uno?

Tengo una estructura de datos de matriz que pasé al componente Recharts BarChart. Todos los valores dataX para cada name se apilarían en la misma barra y quiero mostrar la cantidad total al final de la barra.

 const data = [ { name: 'nameA', data1: 30, data2: 30, total: 60, }, // ... ];

La forma en que estoy renderizando las barras:

 const valueAccessor = (item) => (item ? item.total : 0); const renderBars = () => { return parsedData.map(({name, dataKey, barName, color, renderShape}) => { <Bar key={`axis-${name}-${dataKey}`} dataKey={dataKey} stackId={barName} fill={color} shape={renderShape} > <LabelList valueAccessor={valueAccessor(barName)} position="right" /> </Bar> }); }

Tengo diferentes formas de representarlos con colores y probablemente no necesitaría otra estructura de datos (vea que renderBars usa parsedData en lugar de data , pero eso es algo adicional en lo que necesito trabajar).

La salida es esta:

imagen de barra apilada

Como puede ver, los números están en negrita y, al inspeccionarlos, veo que puedo eliminar el elemento y el número sigue ahí, ya que se representan 3 números en lugar de 1 (porque tengo 3 barras apiladas ).

¿Hay alguna forma de hacer que los gráficos reproduzcan solo una etiqueta por fila, en lugar de por barra apilada?

¡Gracias!

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Después de jugar un poco con la biblioteca, descubrí que es inevitable representar 1 etiqueta cuando se apilan 3 barras por fila/columna. La única forma de representar una etiqueta es establecer el componente LabelList como elemento secundario de un componente Bar .

Y si tiene 2 barras, entonces renderiza una etiqueta para la primera barra apilada y luego no renderiza una etiqueta para la segunda barra apilada, en mi caso, la etiqueta terminó sin renderizarse. Entonces, mi única solución sería simplemente representar una LabelList para la última barra apilada por fila/columna .

En el caso anterior, al tener 3 barras apiladas por fila/columna:

 const GROUPS = 3; const valueAccessor = (item) => (item ? item.total : 0); const renderBars = () => { return parsedData.map(({name, dataKey, barName, color, renderShape}) => { <Bar key={`axis-${name}-${dataKey}`} dataKey={dataKey} stackId={barName} fill={color} shape={renderShape} > {index % (parsedData.length / GROUPS) === (parsedData.length / GROUPS - 1) && <LabelList valueAccessor={valueAccessor(barName)} position="right" />} </Bar> }); }

La misma salida solo tiene 1 número por fila (puede ver que los números no están "en negrita")

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!