我有两个日期,根据这些日期,我必须绘制一个图表 x轴和Y轴上的日期我有购买。对于图表,我使用了 MpChart Lib 并且工作正常,但我不知道如何计算x轴的日期
示例:
第一种情况:如果我有2018-03-23和2018-03-28的日期,则差异以天为单位,因此应如何计算MpChart的x轴。
第二种情况:如果我有2017-12-23和2018-03-28的日期,则差异是几周,所以应该如何计算MpChart的x轴。
第3种情况:如果我有2017-01-01和2018-03-28的日期,那么差异就是年份,那么应该如何为MpChart计算x轴。
现在我有了这个:
private void setData(int count, float range) {
ArrayList<Entry> values = new ArrayList<Entry>();
for (int i = 0; i < 12; i++) {
values.add(new Entry(i, (int) (Math.random() * 65) + 40));
}
LineDataSet set1;
if (mChart.getData() != null &&
mChart.getData().getDataSetCount() > 0) {
set1 = (LineDataSet) mChart.getData().getDataSetByIndex(0);
set1.setValues(values);
mChart.getData().notifyDataChanged();
mChart.notifyDataSetChanged();
} else {
// create a dataset and give it a type
set1 = new LineDataSet(values, " ");
set1.setDrawIcons(false);
// set the line to be drawn like this "- - - - - -"
//set1.enableDashedLine(10f, 5f, 0f);
//set1.enableDashedHighlightLine(10f, 5f, 0f);
set1.setColor(Color.BLACK);
// set1.setCircleColor(Color.BLACK);
set1.setLineWidth(1f);
// set1.setCircleRadius(3f);
// set1.setDrawCircleHole(false);
set1.setDrawCircles(false);
set1.setValueTextSize(9f);
set1.setDrawFilled(true);
set1.setFormLineWidth(1f);
set1.setFormLineDashEffect(new DashPathEffect(new float[]{10f, 5f}, 0f));
set1.setFormSize(15.f);
set1.setDrawValues(false);
if (Utils.getSDKInt() >= 18) {
// fill drawable only supported on api level 18 and above
Drawable drawable = ContextCompat.getDrawable(this, R.drawable.fade_red);
set1.setFillDrawable(drawable);
} else {
set1.setFillColor(Color.BLACK);
}
ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
dataSets.add(set1); // add the datasets
// create a data object with the datasets
LineData data = new LineData(dataSets);
// set data
mChart.setData(data);
}
}
答案 0 :(得分:0)
MPAndroidChart库是一个非常好的图表/图形库,有许多格式化选项,是的,它可以选择将X轴数据格式化为日期值,甚至可以将其格式化为您想要的任何类型的数据。您只需创建自己的自定义XAxisValueFormatter类,它将实现IAxisValueFormatter接口,但请记住,您需要在时间戳中获取日期才能使用,并且将日期转换为时间戳非常容易。
以下是示例:MyXAxisValueFormatter.java
public class MyXAxisValueFormatter implements IAxisValueFormatter {
@Override
public String getFormattedValue(float value, AxisBase axis) {
try {
sdf = new SimpleDateFormat("MMM/yy"); // format your date the way you want
Long valueLong = (long) value; // cast your date value to long
return sdf.format(new Date(valueLong)); // return the formatted date
} catch (Exception e) {
return String.valueOf(value); // if any error occurs, return the value as it is
}
}
}
现在在您的主类中,添加以下行:
XAxis xAxis = mChart.getXAxis();
xAxis.setValueFormatter(new MyXAxisValueFormatter());
xAxis.setLabelCount(4, true); // it will force the chart to show only 4 date labels on X-Axis
这里setLabelCount方法会根据你的数据自动找到x轴的范围,所以你不必在setData方法中预先计算和定义它。