¿Cómo rotar las etiquetas de grupo cuando se usa un GroupedStackedBarRenderer en JFreeChart?


He seguido la demostración de JFreeChart ( StackedBarChartDemo5 ) para crear un diagrama que me permita usar el GroupedStackedBarRenderer.

Básicamente, estoy trazando tiempos aéreos para cada estación (representa una pila en una barra), conectada a una radio (representa una barra en la trama), tanto para recibir como para transmitir (RX y TX).
La trama se parece a esto: ingrese la descripción de la imagen aquí

Hay dos categorías (RX y TX) y varios grupos (radios). Como puede ver, actualmente, los MAC de radio no se pueden leer. Me gustaría rotar estas etiquetas para que la trama sea legible.
He utilizado el siguiente fragmento de código para intentar rotar las etiquetas: subCategoryAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 4));
esto solo rotó las etiquetas de las categorías (RX y TX) en lugar de las etiquetas de los grupos (MAC de radio): ingrese la descripción de la imagen aquí

También he intentado varios otros enfoques, todos los cuales conducen a ninguna parte ... ¿Cómo giro estos subetiquetas?

Aquí está el código subyacente que usé para llenar las etiquetas:

SubCategoryAxis subCategoryAxis = new SubCategoryAxis("Radio MACs (separate Rx and Tx plots)");
subCategoryAxis.setCategoryMargin(0.05D);  

    // subCategoryAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 4));

    KeyToGroupMap keyToGroupMap = null;
    final Set<String> radios = Sets.newHashSet();
    for (Entry<XRadio, Triplet<XStation, Double, Double>> entryMap: channelTimes.entries()) {
        final String radioMac = entryMap.getKey().getMac();
        if (keyToGroupMap == null)
            keyToGroupMap = new KeyToGroupMap(radioMac);

        if (!radios.contains(radioMac)) {
            subCategoryAxis.addSubCategory(radioMac);
            radios.add(radioMac);
        }

        final Triplet<XStation, Double, Double> chTriplet = entryMap.getValue();                           
        final String seriesKey = radioMac + ":" + chTriplet.a.getMac();
        keyToGroupMap.mapKeyToGroup(seriesKey, radioMac);                                
        model.getDataset().addValue(chTriplet.b, seriesKey, "Rx");
        model.getDataset().addValue(chTriplet.c, seriesKey, "Tx");
    }

    if (keyToGroupMap == null)
        return;

    groupedStackedBarRenderer.setSeriesToGroupMap(keyToGroupMap);                
    groupedStackedBarRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());      
    groupedStackedBarRenderer.setBaseItemLabelsVisible(true);                    
    groupedStackedBarRenderer.setItemMargin(0.1D); // 10 %
    groupedStackedBarRenderer.getPlot().setDomainAxis(subCategoryAxis);
Respuesta 1

Estoy usando un fragmento para comprender cassandra y la sintaxis: import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Row; import com.datastax ....

Estoy importando datos de cotizaciones de acciones utilizando HibernateTemplate + SpringFramework Format de los datos AAPL, 09-jun-2010 09: 00,251.47,251.47,251.39,251.39,640 AAPL, 09-jun-2010 09: 01,251.4,251.4,251.05,251.26. ..

Soy muy nuevo en acceleo, para la generación de texto (para lenguaje java) estoy usando un archivo ecore y un módulo .mtl. en mi aplicación hay necesidad de anotaciones, por lo que he declarado anotaciones en mi modelo ecore. pero ...

Me tropecé con este extraño error. Parece que Collections.sort () no modifica la lista ordenada de una manera que permite la detección de modificaciones concurrentes cuando también se repite en la misma lista. ...