我已经尝试了一周的不同事情,包括设置粒度以及轴的最小值和最大值。看看 y 轴上的值分布得多么整齐,间隔固定为 40,数字总是以数字 0 结尾。我什至不需要做任何事情就可以使 y 轴像这样,默认是这样的。我希望 x 轴的分布类似,例如会出现 6 个值 [11:20 11:30 11:40 11:50 12:00 12:10],然后当您放大时它们可能会显示为这样 [ 11:20 11:25 11:30 11:35 11:40 11:45]
这是我的代码:
XAxis xAxis = averageEventRateLineChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setDrawGridLines(false);
xAxis.setDrawAxisLine(true);
xAxis.setDrawGridLinesBehindData(false);
xAxis.setAxisLineColor(mContext.getResources().getColor(R.color.graph_line_color));
xAxis.setTextSize(10f);
xAxis.setAxisLineWidth(1f);
xAxis.setTextColor(mContext.getResources().getColor(R.color.grey_text_color));
xAxis.setTypeface(ResourcesCompat.getFont(mContext, R.font.open_sans_regular));
xAxis.setValueFormatter(new MyValueFormatter());
YAxis leftAxis = averageEventRateLineChart.getAxisLeft();
leftAxis.setDrawGridLines(false);
leftAxis.setDrawAxisLine(true);
leftAxis.setDrawGridLinesBehindData(false);
leftAxis.setAxisLineColor(mContext.getResources().getColor(R.color.graph_line_color));
leftAxis.setAxisLineWidth(1f);
leftAxis.setAxisMinimum(0);
leftAxis.setTextSize(10f);
leftAxis.setTextColor(mContext.getResources().getColor(R.color.grey_text_color));
leftAxis.setTypeface(ResourcesCompat.getFont(mContext, R.font.open_sans_regular));
时间格式化类:
public class MyValueFormatter extends ValueFormatter {
private final SimpleDateFormat formatHours = new SimpleDateFormat("HH:mm", Locale.ENGLISH);
private final SimpleDateFormat formatDays = new SimpleDateFormat("MMM d", Locale.ENGLISH);
private final SimpleDateFormat formatMonths = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
public MyValueFormatter(LineChart lineChart) {
}
@Override
public String getFormattedValue(float value) {
long dataRange = (long) (mLineChart.getHighestVisibleX() - mLineChart.getLowestVisibleX());
if (dataRange < TimeUnit.HOURS.toMillis(24)) {
return formatHours.format(new Date((long) value));
} else if (dataRange < TimeUnit.DAYS.toMillis(7)) {
return formatDays.format(new Date((long) value));
} else {
return formatMonths.format(new Date((long) value));
}
}
}
我不知道MPAndroidChart,但你绝对需要一个能够在你指定的时间点在水平轴上设置时间标签的地图库(否则你的目标无法实现)。在这种假设下,您将必须自己进行一些计算,我将使用徒步旅行的海拔图来解释这一点:
舍入为您在时间轴上所需的时间间隔(例如 1、2、5、15 或 30 分钟、1、2、5 小时等,您将需要多个 if
命令)。就我而言,Δ = 1 小时。
Δ*Math.ceil((531)/Δ)
],并在时间9:00的位置创建标签9:00(以及垂直网格线)轴。