无法在环形图中显示中心文本
Unable to display center text in ring chart
我正在尝试使用 jfree 图表库生成圆环图或环形图。 Ringchart 已成功生成,但唯一的问题是未显示环内的居中文本。以下是示例片段。
图表生成代码
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
不清楚您的片段哪里出错了,但是这个最小的完整示例给出了预期的结果。顺便说一句,为了清楚起见,请注意使用 Font.BOLD
并使用 deriveFont()
来最大程度地减少不幸 font substitution; see also *Initial Threads*.
的风险
pie.setCenterTextMode(CenterTextMode.VALUE);
pie.setCenterTextFont(pie.getCenterTextFont().deriveFont(Font.BOLD, 30f));
pie.setCenterTextColor(Color.getHSBColor(0, 1, 1));
I tried pie.setCenterText("Vijay");
而不是CenterTextMode.VALUE
;指定 CenterTextMode.FIXED
:
pie.setCenterTextMode(CenterTextMode.FIXED);
pie.setCenterText("Vijay");
The above code is not setting any value if the first dataset value is zero.
正确。 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
* @see
*/
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);
}
}
我正在尝试使用 jfree 图表库生成圆环图或环形图。 Ringchart 已成功生成,但唯一的问题是未显示环内的居中文本。以下是示例片段。 图表生成代码
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
不清楚您的片段哪里出错了,但是这个最小的完整示例给出了预期的结果。顺便说一句,为了清楚起见,请注意使用 Font.BOLD
并使用 deriveFont()
来最大程度地减少不幸 font substitution; see also *Initial Threads*.
pie.setCenterTextMode(CenterTextMode.VALUE);
pie.setCenterTextFont(pie.getCenterTextFont().deriveFont(Font.BOLD, 30f));
pie.setCenterTextColor(Color.getHSBColor(0, 1, 1));
I tried
pie.setCenterText("Vijay");
而不是CenterTextMode.VALUE
;指定 CenterTextMode.FIXED
:
pie.setCenterTextMode(CenterTextMode.FIXED);
pie.setCenterText("Vijay");
The above code is not setting any value if the first dataset value is zero.
正确。 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
* @see
*/
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);
}
}