我正在尝试使用以下属性绘制步骤图: 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格式的时间戳吗?
答案 0 :(得分:2)
看起来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);
你知道然后得到这张图表:
答案 1 :(得分:1)
仅供参考,每当您遍历Map而不是遍历keySet()然后获取每个键的值时,请使用 entrySet()。