我正在尝试绘制一个具有以下属性的步进图:x轴:时间(ms)实际数据包含了一个双精度值y轴:另一个值存储为整数。
我按如下方式填充数据集:
private XYSeries populateStepChartDataSet(HashMap<Double, Integer> dataGrid){
XYSeries xySeries = new XYSeries("Step Plot", true, true);
if(dataGrid != null){
for (Double timeStamp : dataGrid.keySet()) {
xySeries.add(timeStamp, dataGrid.get(timeStamp));
}
}
return xySeries;
}我创建绘图的部分如下:
final XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(populateStepChartDataSet(dspDataGrid));
final JFreeChart chart = ChartFactory.createXYStepChart(
title,
xAxisLabel, yAxisLabel,
dataset,
PlotOrientation.VERTICAL,
true, // legend
true, // tooltips
false // urls
);我期望的是在x轴上以毫秒为单位显示时间的曲线图,但这个值正在转换为一些奇怪的时间。下面是这个图的样子

有人能帮我找回x轴的ms格式的时间戳吗?
发布于 2012-06-14 00:37:55
看起来x轴的格式是日期,解决这个问题的一种方法是提供一个NumberFormatOverride
在创建chart后添加以下代码:
XYPlot plot = (XYPlot)chart.getPlot();
plot.setDomainAxis(0, new NumberAxis());
NumberAxis axis = (NumberAxis) plot.getDomainAxis();
axis.setNumberFormatOverride( new NumberFormat(){
@Override
public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) {
return new StringBuffer(String.format("%f", number));
}
@Override
public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) {
return new StringBuffer(String.format("%9.0f", number));
}
@Override
public Number parse(String source, ParsePosition parsePosition) {
return null;
}
} );
axis.setAutoRange(true);
axis.setAutoRangeIncludesZero(false);然后你应该得到这个图表:

发布于 2012-08-07 23:51:11
仅供参考,每当迭代映射而不是迭代keySet()然后获取每个键的值时,请使用entrySet()。
https://stackoverflow.com/questions/11018446
复制相似问题