Java JFreeChart数据单元工作不正常
我正在为用户提供过滤图形结果的更改功能。例如,用户可以选择显示2天的结果。然后TimeUnitType为天,timeAmount为2。但这不能正常工作。在这种情况下,它必须只有2个厚单位。与第一天相关的日期必须以相关的勾号单位显示。与第2天相关的另一个数据必须以第二个厚单位显示 例如,默认情况下选择1天。它在域轴下显示一条黑线 我选择1个月的间隔。DomainAxis不显示任何间隔Java JFreeChart数据单元工作不正常,java,jfreechart,Java,Jfreechart,我正在为用户提供过滤图形结果的更改功能。例如,用户可以选择显示2天的结果。然后TimeUnitType为天,timeAmount为2。但这不能正常工作。在这种情况下,它必须只有2个厚单位。与第一天相关的日期必须以相关的勾号单位显示。与第2天相关的另一个数据必须以第二个厚单位显示 例如,默认情况下选择1天。它在域轴下显示一条黑线 我选择1个月的间隔。DomainAxis不显示任何间隔 private void customizeGraphView(JFreeChart chart, Ti
private void customizeGraphView(JFreeChart chart, TimeUnitType timeUnit, Integer timeAmount) {
CombinedRangeXYPlot combinedPlot = (CombinedRangeXYPlot) chart.getPlot();
@SuppressWarnings("unchecked")
/** read 2 subplot*/
List<XYPlot> subPlots = combinedPlot.getSubplots();
for (int plotIndex = 0; plotIndex < subPlots.size(); plotIndex++) {
/** get plot */
XYPlot plot = subPlots.get(plotIndex);
plot.setDomainGridlinesVisible(false);
// plot.setRangeGridlinesVisible(false);
XYItemRenderer itemRenderer = plot.getRenderer();
/** if line and shape rendere */
if (itemRenderer instanceof StandardXYItemRenderer) {
StandardXYItemRenderer renderer = (StandardXYItemRenderer) itemRenderer;
/** show shapes in time series */
renderer.setBaseShapesVisible(true);
/** fill shapes in time series */
renderer.setBaseShapesFilled(true);
renderer.setBaseFillPaint(Color.BLACK);
// addItemLabels(renderer);
}
/** change DateAxis specific vaues */
DateAxis dateAxis = (DateAxis) plot.getDomainAxis();
/** change Date Axis Time Unit format */
dateAxis.setTickLabelsVisible(true);
/** add severity bar */
if (plotIndex == 0) {
dateAxis.setAutoRange(true);
if(getFirstGraphMinRange() != null && getFirstGraphMaxRange() != null)
{
dateAxis.setRange(getHistoryGraphMinRange(), getHistoryGraphMaxRange());
dateAxis.setTickUnit(new DateTickUnit(getTickUnitType(timeUnit), timeAmount));
}
} else {
dateAxis.setDateFormatOverride(new SimpleDateFormat("HH:mm", Locale.getDefault()));
dateAxis.setRange(getSecondGraphMinRange(), getSecondGraphMaxRange());
dateAxis.setTickUnit(new DateTickUnit(DateTickUnitType.MINUTE, 5));
}
}
}
/**
* @param timeUnit
* @return
*/
private DateTickUnitType getTickUnitType(TimeUnitType timeUnit) {
DateTickUnitType unitType = null;
switch (timeUnit) {
case HOUR:
unitType = DateTickUnitType.HOUR;
break;
case DAY:
unitType = DateTickUnitType.DAY;
break;
case MONTH:
unitType = DateTickUnitType.MONTH;
break;
default:
break;
}
return unitType;
}
private void customizeGraphView(JFreeChart图表、TimeUnitType timeUnit、整数timeAmount){
CombinedRangeXYPlot combinedPlot=(CombinedRangeXYPlot)chart.getPlot();
@抑制警告(“未选中”)
/**读取2个子批次*/
List subplot=combinedPlot.getsubplot();
对于(int plotIndex=0;plotIndex
很难找到您发布的内容的问题,因为还有其他参数可能会影响该行为
例如,如果您使用的时间线不包括某些日期,它可能会解释为什么您看不到刻度。
例如,如果使用1个月的时间单位并使用不包括星期日的时间线,则从星期日开始的所有月份都将不有一个刻度。
您可以尝试使用包含所有日期的时间线来查看问题是否仍然发生
编辑
根据您的评论,您正在尝试使用日期范围为几个小时的图表将tickunit设置为4天。我不确定这样一个seutp的预期行为是什么。如果我在这样的图表上复制这些参数,我也不会在日期轴上看到任何记号。如果我将滴答声设置为10分钟(例如),我可以再次看到滴答声
我想结论是,你的tickunit必须足够精细,以便你的图表上至少有1个勾号,以确保它被看到(换句话说,2个勾号之间的持续时间必须小于日期范围)
如果您希望对域轴进行更多控制,您可能更喜欢使用自定义数字轴而不是日期轴(请参见示例)。我没有使用时间轴。我使用的是带有TimeSeries集合的DateAxis。我有一个问题。如果我将TimeUnit设置为DAY,则时间序列中的所有数据项都必须是new DAY()格式?因此对于TimeUnit MONTH,timeseriesdatatem timeDataItem=new timeseriesdatatem(new Month(new Date(),0.3);我没有看到任何明显的东西……您是否检查(printf)了这两行上的参数值:
dateAxis.setRange(getHistoryGraphMinRange(),getHistoryGraphMaxRange());
和dateAxis.settickunitunit(new datetickunittype(时间单位,时间量);
您是否尝试过删除以下其他以查看当您仅更改绘图(0)
和/或将绘图>1的日期轴设置为绘图(0)的日期轴时它是否有效?这是println的结果。已正确设置最小日期:Fri Feb 17:36:11 EET 2012年最大日期:Fri Feb 17 18:43:00 EET 2012 DateTickUnitType.DAY 4请编辑您的问题,以包括显示您描述的问题的。