这是一个由 3 部分组成的问题。
1) 首先,是否可以旋转水平 X 值。目前,当我尝试在 X 轴上显示一个月中的所有天(2015 年 4 月 1 日、2015 年 4 月 2 日等)时,它们都会聚集在一起并变得不可读。 有没有办法旋转 X 轴标签使其垂直?
<小时/>2)要设置视口(viewport),文档建议使用:
graphview.getViewport().setScalable(true); graphview.getViewport().setScrollable(true); // To set a fixed manual viewport use this: // set manual X bounds graph.getViewport().setXAxisBoundsManual(true); graph.getViewport().setMinX(0.5); graph.getViewport().setMaxX(3.5); // set manual Y bounds graph.getViewport().setYAxisBoundsManual(true); graph.getViewport().setMinY(3.5); graph.getViewport().setMaxY(8);
但是,getViewport().setMinX(...)
函数需要 double 值,而不是日期。 有没有办法滚动视口(viewport)以一次显示 3-5 个日期?
代码2):
GraphView graph = (GraphView) graphView.findViewById(R.id.graph);
DataPoint[] stockArr = new DataPoint[dplist.size()];
stockArr = dplist.toArray(stockArr);
LineGraphSeries<DataPoint> series = new LineGraphSeries<DataPoint>(stockArr);
graph.addSeries(series);
graph.setTitle("TEST GRAPH");
// set date label formatter
graph.getGridLabelRenderer().setLabelFormatter(new DateAsXAxisLabelFormatter(context));
graph.getViewport().setScalable(true);
graph.getViewport().setScrollable(true);
graph.getGridLabelRenderer().setNumHorizontalLabels(data.size()-1); // Approx 28-30
graph.getViewport().setXAxisBoundsManual(true);
graph.getViewport().setMinX(firstDate.getTime());
graph.getViewport().setMaxX(lastDate.getTime());
<小时/>
3) 有没有办法将项目符号点与日期标签对齐?我使用以下代码修改了我的 X 标签。然而,即使在改变之前,要点似乎也没有排列整齐。在下图中,1/1 应该是第一个点,1/2 应该是第二个点,1/3 应该是第三个点。有什么想法吗?
代码3):
graph.getGridLabelRenderer().setLabelFormatter(new DateAsXAxisLabelFormatter(context) {
@Override
public String formatLabel(double value, boolean isValueX) {
if (isValueX) {
// show normal x values
Calendar c = Calendar.getInstance();
// set time in milliseconds
c.setTimeInMillis(((long)value));
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
System.out.println((mMonth+1) + "/" + mDay);
// Return Month/Day
return (mMonth+1) + "/" + mDay;
//return super.formatLabel(newDate.toString(), isValueX);
} else {
// show currency for y values
return super.formatLabel(value, isValueX);
}
}
});
最佳答案
1) 目前不支持旋转标签。这已经存在一个问题,但我不能说何时实现。您可以在这里观看: https://github.com/jjoe64/GraphView/issues/293
如果您想自己实现它,您将在代码的这一点上执行此操作 - 它应该相对容易: https://github.com/jjoe64/GraphView/blob/master/src/main/java/com/jjoe64/graphview/GridLabelRenderer.java#L934
2) 视口(viewport)需要 double ,如果你想使用日期,你必须通过date.getTime()
将日期转换为以毫秒为单位的unix时间纪元。
如果我理解你的意思,你想一次显示 3 天的时间跨度。因此,您必须将水平标签的数量设置为 3,并将视口(viewport)的大小设置为 3 天。应该这样做:
graph.getViewport().setXAxisBoundsManual(true);
graph.getGridLabelRenderer().setNumHorizontalLabels(3);
graph.getViewport().setMinX(firstDate.getTime());
graph.getViewport().setMaxX(firstDate.getTime() + 3*24*60*60*1000); // + 3 days
关于java - GraphView : rotating horizontal date labels, 指定视口(viewport)的固定大小并将项目符号点与日期标签对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28641952/