Android 字符串参数绘图
Android Plot for String Parameters
我的应用程序要求 Y 轴具有 'Charging'、'Discharging' 和 'Charging Failed' 等字符串。是否可以用这个绘制图表并根据 Android Plot?
上的这些字符串描述相关参数
我仍然不是 100% 确定我理解所需的可视化,但这里是我建议的基本步骤:
首先,您需要将 CSV 数据转换为 XYSeries 数据。为此,您需要将当前的 X/Y 字符串值映射到数字。我建议创建一个看起来像这样的方法:
// parses a CSV string into an XYSeries
// for example, DISCHARGE = 1, MPPT = 2
public XYSeries convertCSVToXYSeries(String csvContent) {...}
接下来,设置您的 Plot 等。与 Androidplot Quickstart Tutorial.
中显示的任何其他 XYPlot 几乎相同
当您将从 convertCSVToXYSeries 返回的 XYSeries 添加到绘图时,请使用 XYStepFormatter:
StepFormatter stepFormatter = new StepFormatter(Color.BLUE, Color.BLUE);
stepFormatter.setVertexPaint(null); // don't draw individual points
plot.addSeries(series, stepFormatter);
最后,添加一个自定义范围值格式化程序来打印您的状态字符串,而不是它们映射到的 int 值:
// create a custom getFormatter to draw our state names as range tick labels:
plot.setRangeValueFormat(new Format() {
@Override
public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) {
Number num = (Number) obj;
switch(num.intValue()) {
case 1:
toAppendTo.append("DISCHARGE");
break;
case 2:
toAppendTo.append("MPPT");
break;
default:
toAppendTo.append("Unknown");
break;
}
return toAppendTo;
}
@Override
public Object parseObject(String source, ParsePosition pos) {
return null;
}
});
我仍然不是 100% 确定我理解所需的可视化,但这里是我建议的基本步骤:
首先,您需要将 CSV 数据转换为 XYSeries 数据。为此,您需要将当前的 X/Y 字符串值映射到数字。我建议创建一个看起来像这样的方法:
// parses a CSV string into an XYSeries
// for example, DISCHARGE = 1, MPPT = 2
public XYSeries convertCSVToXYSeries(String csvContent) {...}
接下来,设置您的 Plot 等。与 Androidplot Quickstart Tutorial.
中显示的任何其他 XYPlot 几乎相同当您将从 convertCSVToXYSeries 返回的 XYSeries 添加到绘图时,请使用 XYStepFormatter:
StepFormatter stepFormatter = new StepFormatter(Color.BLUE, Color.BLUE);
stepFormatter.setVertexPaint(null); // don't draw individual points
plot.addSeries(series, stepFormatter);
最后,添加一个自定义范围值格式化程序来打印您的状态字符串,而不是它们映射到的 int 值:
// create a custom getFormatter to draw our state names as range tick labels:
plot.setRangeValueFormat(new Format() {
@Override
public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) {
Number num = (Number) obj;
switch(num.intValue()) {
case 1:
toAppendTo.append("DISCHARGE");
break;
case 2:
toAppendTo.append("MPPT");
break;
default:
toAppendTo.append("Unknown");
break;
}
return toAppendTo;
}
@Override
public Object parseObject(String source, ParsePosition pos) {
return null;
}
});