当条目太多时,MPAndroidChart 图表会在 X 轴上显示缩放
MPAndroidChart Chart shows with zoom on X Axis when too many entries
我正在使用 MPAndroidChart,当条目很多(我的设备上超过 30 个)时,图表似乎具有自动缩放功能,因为 X 轴在开始时仅显示偶数值。
Chart with zoom on X axis
然后在图表上缩放时(在屏幕上或通过代码 chart.zoom(2, 0, 0, 0)
)显示 x 轴上的所有值。
由于导致自动缩放的条目数似乎取决于设备屏幕大小(因此以编程方式缩放似乎不是一个好的选择),有没有办法强制图表不具有此功能缩放?
我已经试过了chart.getXAxis().setLabelCount(entries.size(), true)
,但是没用。
这是我一直在使用的示例代码:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="chart.test.MainActivity">
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LineChart chart = findViewById(R.id.chart);
List<Entry> entries = new ArrayList<>();
for (int i = 0; i <= 60; i++) {
entries.add(new Entry(i, i));
}
LineDataSet dataSet = new LineDataSet(entries, "Label");
LineData lineData = new LineData(dataSet);
chart.setData(lineData);
chart.getXAxis().setLabelCount(entries.size());
chart.invalidate();
}
}
谢谢。
要固定图表上的条目数,比如如果您只想在图表上显示 10 个值(比方说 50 个值),那么您应该在代码中添加以下行:
chart.setVisibleXRangeMaximum(10);
您可以根据您的要求更改号码。这将在加载时仅向用户显示 10 个值,用户必须滚动图表才能看到下一个值。
同时从您的代码中删除以下行:
chart.getXAxis().setLabelCount(entries.size());
而且你不需要以下行:
chart.invalidate();
因为默认情况下调用 setData() 方法时它会调用 invalidate()。
只有在将数据设置到图表后对轴或视口或数据集进行一些更改后,才需要调用它。
我正在使用 MPAndroidChart,当条目很多(我的设备上超过 30 个)时,图表似乎具有自动缩放功能,因为 X 轴在开始时仅显示偶数值。
Chart with zoom on X axis
然后在图表上缩放时(在屏幕上或通过代码 chart.zoom(2, 0, 0, 0)
)显示 x 轴上的所有值。
由于导致自动缩放的条目数似乎取决于设备屏幕大小(因此以编程方式缩放似乎不是一个好的选择),有没有办法强制图表不具有此功能缩放?
我已经试过了chart.getXAxis().setLabelCount(entries.size(), true)
,但是没用。
这是我一直在使用的示例代码:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="chart.test.MainActivity">
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LineChart chart = findViewById(R.id.chart);
List<Entry> entries = new ArrayList<>();
for (int i = 0; i <= 60; i++) {
entries.add(new Entry(i, i));
}
LineDataSet dataSet = new LineDataSet(entries, "Label");
LineData lineData = new LineData(dataSet);
chart.setData(lineData);
chart.getXAxis().setLabelCount(entries.size());
chart.invalidate();
}
}
谢谢。
要固定图表上的条目数,比如如果您只想在图表上显示 10 个值(比方说 50 个值),那么您应该在代码中添加以下行:
chart.setVisibleXRangeMaximum(10);
您可以根据您的要求更改号码。这将在加载时仅向用户显示 10 个值,用户必须滚动图表才能看到下一个值。
同时从您的代码中删除以下行:
chart.getXAxis().setLabelCount(entries.size());
而且你不需要以下行:
chart.invalidate();
因为默认情况下调用 setData() 方法时它会调用 invalidate()。 只有在将数据设置到图表后对轴或视口或数据集进行一些更改后,才需要调用它。