【发布时间】:2019-08-17 16:17:50
【问题描述】:
在 JFreechart 中,我有一个带有日期(和时间)的 X 轴。
我如何要求 JFreechart 优化它们并充分利用它?
现在它包含比空间更多的标签,所有标签都被转换为'...'。
如果不是所有刻度都有标签,那完全没问题,但我想要尽可能多(如果它们适合并且可以完全显示)。
我怎样才能做到这一点?
更新1:
这里是重现截断标签的完整最小来源。 (也更新了截图)。 JFreechart 默认不处理优化:
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
public class LineChart_AWT extends ApplicationFrame {
public LineChart_AWT( String applicationTitle , String chartTitle ) {
super(applicationTitle);
JFreeChart lineChart = ChartFactory.createLineChart(
chartTitle,
"Dates","Temperature",
createDataset(),
PlotOrientation.VERTICAL,
true,true,false);
CategoryPlot plot = (CategoryPlot) lineChart.getPlot();
plot.getRangeAxis().setRange(25, 27);
ChartPanel chartPanel = new ChartPanel( lineChart );
chartPanel.setPreferredSize( new java.awt.Dimension( 560 , 367 ) );
setContentPane( chartPanel );
}
private DefaultCategoryDataset createDataset( ) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset( );
dataset.addValue( 26.44,"Temperature","2019-08-18 00:00");
dataset.addValue( 26.2,"Temperature","2019-08-18 01:00");
dataset.addValue( 25.93,"Temperature","2019-08-18 02:00");
dataset.addValue( 25.71,"Temperature","2019-08-18 03:00");
dataset.addValue( 25.54,"Temperature","2019-08-18 04:00");
dataset.addValue( 25.42,"Temperature","2019-08-18 05:00");
dataset.addValue( 25.25,"Temperature","2019-08-18 06:00");
dataset.addValue( 25.19,"Temperature","2019-08-18 07:00");
dataset.addValue( 25.25,"Temperature","2019-08-18 08:00");
dataset.addValue( 25.36,"Temperature","2019-08-18 09:00");
dataset.addValue( 25.52,"Temperature","2019-08-18 10:00");
dataset.addValue( 25.86,"Temperature","2019-08-18 11:00");
dataset.addValue( 26.51,"Temperature","2019-08-18 12:00");
dataset.addValue( 26.82,"Temperature","2019-08-18 13:00");
return dataset;
}
public static void main( String[ ] args ) {
LineChart_AWT chart = new LineChart_AWT(
"X-axis demo" ,
"X-axis labels are truncated");
chart.pack( );
RefineryUtilities.centerFrameOnScreen( chart );
chart.setVisible( true );
}
}
更新2:
我更喜欢 @trashgod 推荐的 X 轴标签 45° 旋转。 然而,当更多数据进入图片时,这种方法无法正常工作:
是否可以设置最大允许标签数?我会将其设置为一些默认值,例如 5 或 6。或者,如果这会隐藏周围环境,也可以定义边距或填充以增加可读性。
【问题讨论】:
-
由于默认设置会自动处理此问题,我猜您的代码会导致此问题。请edit 您的问题包含一个minimal reproducible example,以展示您说明的问题。
-
@trashgod:它不会自动处理 - 如屏幕截图所示。
-
您的minimal reproducible example 很好地说明了问题;我已经在下面详细说明了。
标签: jfreechart