我目前正面临使用JFreeChart的问题。我需要2个相关的域轴,例如:
|
|
|
|
|
|
| _________ | _________ | ____________ (第一轴)
8:00 - 9:00 9:01 - 10:00 10:01 - 11:00
| ______ | ________ |(第一轴下方的第二轴)
第1阶段第2阶段
也就是说,第1阶段实际上对应于8:00到8:45(第1轴)和第2阶段8:46到9:20。
我可以通过以下代码取得一定程度的成功
private ChartPanel createChart(CategoryDataset dataset, CategoryDataset phaseDataset){
JFreeChart chart = ChartFactory.createBarChart(
"",
"",
"Numbers",
dataset,
PlotOrientation.Vertical,
true,
true,
false);
CategoryPlot plot = chart.getCategoryPlot();
NumberAxis rangeAxis = (NumberAxis)plot.getRangeAxis();
rangeAxis.setStandTickUnits(NumberAxis.createIntegerTickUnits());
CategoryAxis domainAxis = plot.getDomainAxis();
// some paint settings to be done to domainAxis
CategoryAxis axis2 = new CategoryAxis()
plot.setDomainAxis(1, axis2);
plot.setDataset(1, phaseDataset);
plot.mapDatasetToRangeAxis(1,1);
plot.setDomainAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT);
ChartPanel panel = new ChartPanel(chart);
return panel;
}
我的第二轴(相位)的刻度标签似乎位于顶部,而不是底部。
我怎么能做到这一点?对不起蹩脚的图纸,低代表附加图像......
另一个问题 - 我如何设置CategoryAxis的范围?我希望所有类别都出现在我的图表中,但似乎该类别中没有数据,它将不会出现?
回到设计基础?我是否正在使用正确的域轴?
@EDIT我注意到我添加的第二个轴无法显示刻度,第二组数据集实际出现在第一个轴上......
答案 0 :(得分:2)
我也遇到了这个问题,在经过API的漫长而乏味的搜索后,我设法找到了解决方案。这是我必须构建的图表中的代码片段,它有3个x轴彼此叠加:
Dim yourBindingSource = dataGridView1.DataSource As BindingSource
SDA1.Update(yourBindingSource.DataSource as DataTable)
作为一个答案,它有点晚了,但希望这将为其他人节省我为找到修复而付出的艰苦努力!