android - 缩放 X 轴 MPAndroidCharts
问题描述
我有一个简单的折线图。我不知道如何使 x 轴值像 y 轴值一样正确缩放。无论我在图中输入什么值,x 值之间的距离始终是等距的。
通过添加整个折线图代码进行编辑。
setData();
Legend l = mChart.getLegend();
l.setForm(Legend.LegendForm.LINE);
mChart.setDragEnabled(true);
mChart.setScaleEnabled(true);
YAxis leftAxis = mChart.getAxisLeft();
leftAxis.removeAllLimitLines();
leftAxis.enableGridDashedLine(10f, 10f, 0f);
leftAxis.setDrawZeroLine(false);
leftAxis.setDrawLimitLinesBehindData(true);
mChart.getAxisRight().setEnabled(false);
mChart.animateX(2000, Easing.EasingOption.EaseInOutQuart);
mChart.invalidate();
return view;
}
private ArrayList<String> setXAxisValues(){
ArrayList<String> xVals = new ArrayList<String>();
xVals.add(String.valueOf(x1));
xVals.add(String.valueOf(x2));
xVals.add(String.valueOf(x3));
return xVals;
}
private ArrayList<Entry> setYAxisValues(){
ArrayList<Entry> yVals = new ArrayList<Entry>();
yVals.add(new Entry(0, y1));
yVals.add(new Entry(1, y2));
yVals.add(new Entry(2, y3));
return yVals;
}
private void setData() {
ArrayList<String> xVals = setXAxisValues();
ArrayList<Entry> yVals = setYAxisValues();
LineDataSet set1;
set1 = new LineDataSet(yVals, yTitle);
set1.setFillAlpha(110);
ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
dataSets.add(set1); // add the datasets
LineData data = new LineData(dataSets);
String[] values = new String[] {String.valueOf(x1), String.valueOf(x2), String.valueOf(x3)};
XAxis xAxis = mChart.getXAxis();
xAxis.setGranularity(1f);
mChart.setScaleEnabled(true);
xAxis.setValueFormatter(new MyXAxisValueFormatted(values));
mChart.getLegend().setTextColor(Color.WHITE);
mChart.getXAxis().setTextColor(Color.WHITE);
mChart.getAxisLeft().setTextColor(Color.WHITE);
mChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);
mChart.setData(data);
}
这是 XAxisValueFormatted 类,可能是问题的根源:
public class MyXAxisValueFormatted implements IAxisValueFormatter{
private String[] mValues;
public MyXAxisValueFormatted(String[] values){
this.mValues = values;
}
@Override
public String getFormattedValue(float value, AxisBase axis) {
return mValues[(int) value];
}
}
解决方案
这是解决方案,但首先是解释:
您的 x 轴值不知道“3”、“9”和“100”,因为它们都是字符串。但它从这里知道 0 1 和 2(x 值):
yVals.add(new Entry(0, y1));
yVals.add(new Entry(1, y2));
yVals.add(new Entry(2, y3));
这些值具有相同的间隔,这就是为什么您的格式化程序在字符串 3、9 和 100 之间给出相同的分隔符(空格)。
解决方案很简单,忘记(删除类)关于 value IAxisValueFormatter
,只需像这样初始化你的Entry
-s :
yVals.add(new Entry(3, 2));
yVals.add(new Entry(9, 1));
yVals.add(new Entry(100f, -90f));
一切都将自动完成,这是我从您的代码和值中得到的:
推荐阅读
- c++ - 带有自定义分配器的 unique_ptr
- javascript - 通过io.sockets.sockets解析时如何获取socket id
- autodesk-forge - 如何更改两个选定模型的几何形状?
- c - 如何实现 fsm
- android - Android onCreate 在退出后被调用两次
- css - 带有 Next.js 图像组件的线性渐变
- javascript - 为什么在收到新值后这个 var 不被传递?
- python - 如何使 SQLite 数据库文件作为文本文件可读?
- python - 快速API | 羽毛文件压缩下载(zl4 和 zstd)
- php - 上传文件到linux服务器,报错POST net::ERR_CONTENT_DECODEDING_FAILED 200 (OK)