当前位置: 首页 > 知识库问答 >
问题:

无法在环形图中显示居中文本

丌官承
2023-03-14

我试图使用jfree图表库生成一个圆环图或环形图。环形图已成功生成,但唯一的问题是环形内的居中文本未显示。以下是示例片段。图表生成代码

JFreeChart chart = ChartFactory.createRingChart(heading, dataSet, legend, tooltips, urls);

和水平居中相关的代码如下所示

RingPlot pie = (RingPlot) chart.getPlot();
pie.setBackgroundPaint(Color.WHITE);
pie.setOutlineVisible(false);
pie.setShadowPaint(null);
pie.setLabelGenerator(null);
pie.setCenterTextMode(CenterTextMode.VALUE);
Font font = new Font("Arial",1,30);
pie.setCenterTextFont(font);
pie.setCenterTextColor(Color.getHSBColor(222, 1, 1));
pie.setSectionDepth(0.1);
pie.setSectionOutlinesVisible(false);
pie.setSeparatorsVisible(false);
pie.setIgnoreZeroValues(false);

我用的是jfreechart verison 1.5.0

共有1个答案

匡玉堂
2023-03-14

目前尚不清楚您的片段在哪里出错,但这个最小的完整示例给出了预期的结果。顺便说一句,为了清楚起见,请注意使用 Font.BOLD,并使用派生字体()以最大程度地降低不幸替换字体的风险;另请参阅*初始线程*。

pie.setCenterTextMode(CenterTextMode.VALUE);
pie.setCenterTextFont(pie.getCenterTextFont().deriveFont(Font.BOLD, 30f));
pie.setCenterTextColor(Color.getHSBColor(0, 1, 1));

我试过pie.setCenterText("Vijay");

而不是< code>CenterTextMode。值;指定< code>CenterTextMode。固定:

pie.setCenterTextMode(CenterTextMode.FIXED);
pie.setCenterText("Vijay");

如果第一个数据集值为零,则上述代码不会设置任何值。

正确。< code > ring plot::drawItem()忽略中心文本,除非值超过呈现阈值;您可以指定一个超过阈值但在格式化时仍能正确显示的值:

dataset.setValue("Critical", RingPlot.DEFAULT_MINIMUM_ARC_ANGLE_TO_DRAW);
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CenterTextMode;
import org.jfree.chart.plot.RingPlot;
import org.jfree.data.general.DefaultPieDataset;

/**
 * @see https://stackoverflow.com/a/56672573/230513
 * @see https://stackoverflow.com/a/37414338/230513
 */
public class TestRing {

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("Critical", Integer.valueOf(42));
        dataset.setValue("Important", Integer.valueOf(21));
        dataset.setValue("Moderate", Integer.valueOf(7));
        dataset.setValue("Low", Integer.valueOf(3));
        JFreeChart chart = ChartFactory.createRingChart(
            "Test", dataset, false, true, false);
        RingPlot pie = (RingPlot) chart.getPlot();
        pie.setSimpleLabels(true);
        pie.setCenterTextMode(CenterTextMode.VALUE);
        pie.setCenterTextFont(pie.getCenterTextFont().deriveFont(Font.BOLD, 30f));
        pie.setCenterTextColor(Color.getHSBColor(0, 1, 1));
        f.add(new ChartPanel(chart){
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(400, 400);
            }
        });
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new TestRing()::display);
    }
}

 类似资料:
  • 我不知道如何在RMarkdown与MS Word输出中心的数字标题。我将Markdown文档指向参考Word模板,模板中的图形标题是正确的。问题是RMarkdown不知道标题应该是标题。它把它们当作普通文本。 我如何告诉RMarkdown“示例标题”实际上是图形文本而不仅仅是普通文本?

  • 我一直在尝试解决如何仅使用css在div中居中放置超大图像的问题。 我们使用的是流体布局,因此图像容器的宽度随着页面宽度的变化而变化(div的高度是固定的)。该图像位于一个div中,值为inset boxshadow,以便显示为您正在查看页面中的图像。 图像本身已经调整大小,以尽可能宽的值填充周围的div(设计有一个值)。 如果图像比周围的div小,这很容易做到: 但是当图像大于div时,它只是从

  • 我正在努力让Jasper在图表的条形图上显示值标签。我想生成什么: 我使用Jaspersoft Studio,并在“图表绘图”选项卡中选中了“显示标签”框。出于测试目的,我使用了某种红色和紫色作为项目标签的字体颜色和背景颜色,这在条形图上应该很明显。 我的jrxml文件如下所示: 我还尝试使用定制器,基于一些SO问题: 我没法让它工作,我有上面的条形图,但没有110/760标签。 为了显示这些值,

  • 我的.UI中有两个树视图。一个树视图是,另一个是。现在我已经编写了一个代码,它在`driveview中显示我的系统的驱动器。我是这样做的: 现在,当我单击中的特定驱动器时,它会显示其中的子文件夹。我基本上需要做的是迭代/遍历整个驱动器,并在里面搜索文件。基本上检查所有文件夹和子文件夹。一旦它找到文件,它就应该在我的另一个树视图中显示它们,即。我为它编写了如下代码: 每当我点击有mp3文件的子文件夹

  • 我有一堆标记,我可以在其中加载到谷歌地图上。我的问题是,相机不在标记之上。我可以将它集中在我所有的标记之上吗? 我正在使用以下代码添加标记: 我在堆栈上看了看,发现了这个问题,和我的问题一样: Android谷歌地图API V2中心标记 但它背后没有太多的背景,也不知道如何实现它。

  • 数据显示在logcat中,但不显示在文本视图中。我能做什么 这是我的日志