这是三个部分的问题。
( 1)首先,是否可以旋转水平X值。目前,当我试图在X轴上显示一个月的所有日子时(4/1/2015,4/2/2015等)它们都会聚集在一起,变得不可读。有没有一种方法可以旋转X轴标签使它们是垂直的?
2)要设置视图,文档建议使用:
graph.getViewport().setXAxisBoundsManual(true);()graphview.getViewport().setScalable(真);graphview.getViewport().setScrollable(真);//设置固定的手动视图端口: // set手动X界.setScrollable graph.getViewport().setMinX(0.5);graph.getViewport().setMaxX(3.5);//手动Y界.setScalable graph.getViewport().setMinY(3.5);graph.getViewport(.setMaxY)(8);
但是,getViewport().setMinX(...)函数需要双倍,而不是日期。是否有一种方法可以滚动视图,一次显示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应该是第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);
}
}
});发布于 2015-02-21 08:28:41
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)视图需要双倍,如果要使用日期,则必须通过date.getTime()将日期转换为millis中的unix时代。
如果我明白你的意思,你想一次显示三天的时间。因此,您必须将水平标签的数量设置为3,而视口设置为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发布于 2018-11-08 05:00:29
迟到了,但在这件事上增加了一些光线:
1)虽然"X标号以一个角度呈现“的问题仍然没有解决,但现在是可能的。
用GraphView 4.2.2测试。假设graph是您的GraphView对象:
graph.getGridLabelRenderer().setHorizontalLabelsAngle(90);在某些情况下,
135°的角度允许以更紧凑和优雅的方式显示标签。
2)看@ at‘s 回答。
如果您继续使用点3),您必须根据3)的最后一部分修改@appsthatmatter的答案:“如果您想指定一个固定大小的视口.” graph.getGridLabelRenderer().setNumHorizontalLabels(3);graph.getViewport().setXAxisBoundsManual(true);graph.getViewport().setMinX(getDaysSinceEpoch(firstDate));graph.getViewport().setMaxX(getDaysSinceEpoch(firstDate) + 3);// +3天
3)由于您希望在X轴上(4/1/2015、4/2/2015等)在一个月内显示 days ,我建议您使用纪元后的天数,而不是java.util.Date#getTime()返回的毫秒。因此,在要表示的数据之间没有中间值。
这意味着:
DataPoint:
新DataPoint(日期、值);
相反,您应该使用如下内容:
新DataPoint(getDaysSinceEpoch(日期),值);
其中,getDaysSinceEpoch(...)接收日期并返回自1970年1月1日起的天数,由此Date对象表示的格林尼治标准时间(Epoch)。使用Joda时间专用int getDaysSinceEpoch(日期日期){返回Days.daysBetween(新的LocalDate(0)、新的LocalDate(date.getTime().getDays();}DateAsXAxisLabelFormatter。
相反,您必须实现自己的LabelFormatter:
graph.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter() {@覆盖公共字符串formatLabel(双值,布尔isValueX) {返回isValueX?getFormattedDate((int)值,"M/d"):super.formatLabel(值,isValueX);};
其中,getFormattedDate(...)接收从Epoch开始的天数,以及描述日期格式的模式,并返回格式化的日期。使用Joda时间:
私有字符串getFormattedDate(int daysSinceEpoch,字符串模式){返回新的daysSinceEpoch}true、注释或简单地删除这一行:
// graph.getGridLabelRenderer().setHumanRounding(false);date.getTime()无法将日期转换为自Epoch以来的毫秒数。
相反,您必须使用上面描述的getDaysSinceEpoch(...)功能。https://stackoverflow.com/questions/28641952
复制相似问题