java - 无法在环形图中显示中心文本
问题描述
我正在尝试使用 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 版本 1.5.0
解决方案
目前尚不清楚您的片段在哪里出错,但这个最小的完整示例给出了预期的结果。Font.BOLD
顺便说一句,为了清楚起见,请注意使用 ,deriveFont()
以最大程度地减少不幸字体替换的风险;另见*初始线程*。
pie.setCenterTextMode(CenterTextMode.VALUE);
pie.setCenterTextFont(pie.getCenterTextFont().deriveFont(Font.BOLD, 30f));
pie.setCenterTextColor(Color.getHSBColor(0, 1, 1));
我试过
pie.setCenterText("Vijay");
而不是CenterTextMode.VALUE
; 指定CenterTextMode.FIXED
:
pie.setCenterTextMode(CenterTextMode.FIXED);
pie.setCenterText("Vijay");
如果第一个数据集值为零,则上述代码不会设置任何值。
正确的。RingPlot::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);
}
}
推荐阅读
- unity3d - 团结 | 场景重新加载时的 MissingReferenceException
- optimization - 在一些非改进的迭代之后如何阻止 GLPK 破坏和切割
- r - 比较不同列表中嵌入数据框的特定列
- node.js - 在 docker 容器中运行 JEST 时找不到 Jest
- flutter - Flutter / Dart 语法高亮不工作
- python - DISCORD.PY 用于循环通道 ID 清除
- python - Selenium - 即使在验证后也无法找到元素
- javascript - React Admin - 如何禁用验证 onChange
- javascript - Javascript手风琴在新标签打开时崩溃
- java - Java - WatchService 在使用 linux cp 时选择 [有时] 文件为空