java - 在 JFreeChart 中使用 GroupedStackedBarRenderer 时如何旋转组标签?

标签 java jfreechart


我遵循 JFreeChart ( StackedBarChartDemo5 ) 的演示,以便创建一个允许我使用 GroupedStackedBarRenderer 的绘图。

基本上,我正在绘制连接到 radio (代表图中的条)的每个电台(代表条中的堆栈)的广播时间,用于接收和传输(RX 和 TX)。
情节看起来像这样: enter image description here

有两个类别(RX 和 TX)和多个组( radio )。如您所见,目前 radio MAC 无法读取。 我想旋转这些标签,以使情节清晰。
我使用了以下代码来尝试旋转标签: subCategoryAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI/4));
这仅旋转类别(RX 和 TX)的标签,而不是组( radio MAC)的标签: enter image description here

我还尝试了其他几种方法,但所有这些方法都无济于事......我如何旋转这些子标签?

这是我用来填充标签的底层代码:

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);

最佳答案

您可以以弧度为单位设置 CategoryAxis 的旋转:

subCategoryAxis.setLabelAngle(-Math.PI/2);

编辑: 看来 SubCategoryAxis 忽略了子标签的旋转。

SubCategoryAxis#drawSubCategoryLabels 方法中,使用 angle=0 调用 TextUtilities.drawRotatedString()

注意:示例来自 1.13。

正确的解决方案是制作一个补丁来修复该问题并将该补丁提交给开发人员。

要针对您的情况修复它,您可以扩展 SubCategoryAxis 并使用正确的角度调用 TextUtilities.drawRotatedString()

关于java - 在 JFreeChart 中使用 GroupedStackedBarRenderer 时如何旋转组标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7240771/

相关文章:

java - 如何将ChartFrame(JFreeChart库)添加到JFrame(javax.swing库)?

java - 如何使用 Morphia 通过 HashMap 值查询 MongoDB?

java - JFreechart多边形外填充颜色

java - 获取与 jfreechart 中的值相对应的类别图中的 Java2D y 坐标

java - 如果 TimeSeries 仅包含一个值,则不会显示任何值

java - 如何连接两个 arraylist<String> 并存储到第三个 arraylist<String> 中?

Java 使用 JPA 2.1 和 @ManyToOne 上的 hibernate 部分加载实体

java - 方法不覆盖或实现父类(super class)型的方法 - 覆盖

java - 导致崩溃的setText

java - 与jfreechart设置相同长度的ValueAxis