将日期/时间添加到JFreeChart图表 [英] Adding date/time to JFreeChart graph
问题描述
我目前有一个查询数据库值的方法,并将它们绘制成图形。唯一的问题是,时间
变量很长,导致我的图形看起来像这样:
I currently have a method which queries a database for values, and plots them to a graph. The only problem is, the time
variable is a long, and results in my graph looking like this:
< img src =https://i85.photobucket.com/albums/k52/Dommmminic/graph.jpgalt =graph>
我想转换它到日期格式,然后将其添加到图表中。
I want to convert it to a date format and then add it to the graph.
我该怎么做?
这是我的图表代码:
private Long time;
private Long intensity;
public XYSeries series = new XYSeries("Sensor");
private XYDataset xyDataset;
public JFreeChart chart;
xyDataset = new XYSeriesCollection(series);
chart = ChartFactory.createXYLineChart("Sensor Data", "Time", "Intensity", xyDataset, PlotOrientation.VERTICAL, true, true, false);
以下是我添加到图表的方法:
Here is my method for adding to the graph:
public void GetDustLevels() {
series.clear();
try {
currentSensor = Application.getInstance().getMinesite().getSensors().get(sensorID);
} catch (Exception e1) {
e1.printStackTrace();
}
if (currentSensor != null) {
sensorKDTree = currentSensor.getSensorData();
Iterator<Map.Entry<GenericPoint<Long>, String>> allPoints = sensorKDTree.iterator(sensorKDTree.getMin(null), sensorKDTree.getMax(null));
while (allPoints.hasNext()) {
GenericPoint<Long> timeIntensityPair = allPoints.next().getKey();
time = timeIntensityPair.getCoord(0);
intensity = timeIntensityPair.getCoord(1);
System.out.println("CURRENT SENSOR" + currentSensor);
System.out.println("TIME: " + time + " " + "INTENSITY: " + intensity);
series.add(time, intensity);
}
}
}
任何帮助都将非常感谢!谢谢!
Any help would be GREATLY appreciated! Thank you!
编辑:我已将我的代码更改为:
I have changed my code to this:
public TimeSeries series = new TimeSeries("Sensor", Date.class);
public JFreeChart chart;
private Long time;
private Long intensity;
TimeSeriesCollection xyDataset = new TimeSeriesCollection(series);
chart = ChartFactory.createTimeSeriesChart("Sensor Data", "Time", "Intensity", xyDataset, true, true, false);
我的新GetDustLevels()方法:
And my new GetDustLevels() method:
public void GetDustLevels() {
series.clear();
try {
currentSensor = Application.getInstance().getMinesite().getSensors().get(sensorID);
} catch (Exception e1) {
e1.printStackTrace();
}
if (currentSensor != null) {
sensorKDTree = currentSensor.getSensorData();
Iterator<Map.Entry<GenericPoint<Long>, String>> allPoints = sensorKDTree.iterator(sensorKDTree.getMin(null), sensorKDTree.getMax(null));
while (allPoints.hasNext()) {
GenericPoint<Long> timeIntensityPair = allPoints.next().getKey();
time = timeIntensityPair.getCoord(0);
intensity = timeIntensityPair.getCoord(1);
System.out.println("CURRENT SENSOR" + currentSensor);
System.out.println("TIME: " + time + " " + "INTENSITY: " + intensity);
XYPlot plot = (XYPlot) chart.getPlot();
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("dd-MMM-yyyy"));
series.add(new Date(time.longValue()), intensity);
}
}
}
推荐答案
没有 sscce 或所需的格式,我只是在猜测。
Without an sscce or the desired format, I'm just guessing.
XYPlot plot = (XYPlot) chart.getPlot();
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("dd-MMM-yyyy"));
附录:仔细观察,你正在使用 ChartFactory.createXYLineChart()
,为域创建 NumberAxis
。相反,使用 ChartFactory.createTimeSeriesChart()
,为域创建 DateAxis
。
Addendum: Looking closer, you're using ChartFactory.createXYLineChart()
, which creates a NumberAxis
for the domain. Instead, use ChartFactory.createTimeSeriesChart()
, which creates a DateAxis
for the domain.
附录:如果 time
表示与Java相同时期的毫秒 日期
,你可以使用新日期(time.longValue())
构建数据集的 RegularTimePeriod
。有一个相关的例子这里。
Addendum: If time
represents milliseconds from the same epoch as a Java Date
, you can use new Date(time.longValue())
to construct your dataset's RegularTimePeriod
. There's a related example here.
这篇关于将日期/时间添加到JFreeChart图表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!