五.x轴
获得
XAxis xAxis = chart.getXAxis();
setLabelRotationAngle(float angle)
: 设置x轴的角度setPosition(XAxisPosition pos)
: 设置x轴在图形中的位置 TOP/BOTTOM/BOTH_SIDED/ TOP_INSIDE / BOTTOM_INSIDE.
六.Y轴
除了 RadarChart 雷达图,其他图像 均有两个Y轴,且默认都会绘制
获得方法
YAxis leftAxis = chart.getAxisLeft(); YAxis rightAxis = chart.getAxisRight(); YAxis leftAxis = chart.getAxis(AxisDependency.LEFT); YAxis yAxis = radarChart.getYAxis(); // this method radarchart only
用public AxisDependency getAxisDependency()判断是哪条边
在为图标设置数据前,需要设置轴的范围
轴依赖 Axis Dependency
默认 添加的数据都是左侧y轴数据,右侧数据与左侧相同
如果想设置不同的方法
LineDataSet dataSet = ...; // get a dataset dataSet.setAxisDependency(AxisDependency.RIGHT);
网格线的 零线(与x轴重合的网格线)
setDrawZeroLine(boolean enabled)
:是否绘制setZeroLineWidth(float width)
: 设置宽度setZeroLineColor(int color)
: 设置颜色
关于零线的示例代码(只绘制一个零线)
// data has AxisDependency.LEFT YAxis left = mChart.getAxisLeft(); left.setDrawLabels(false); // no axis labels left.setDrawAxisLine(false); // no axis line left.setDrawGridLines(false); // no grid lines left.setDrawZeroLine(true); // draw a zero line mChart.getAxisRight().setEnabled(false); // no right axis
更多示例
YAxis yAxis = mChart.getAxisLeft(); yAxis.setTypeface(...); // set a different font yAxis.setTextSize(12f); // set the text size yAxis.setAxisMinimum(0f); // start at zero yAxis.setAxisMaximum(100f); // the axis maximum is 100 yAxis.setTextColor(Color.BLACK); yAxis.setValueFormatter(new MyValueFormatter()); yAxis.setGranularity(1f); // interval 1 yAxis.setLabelCount(6, true); // force 6 labels //... and more
setValueFormatter 下文有讲解
七.图标主题
ChartData
是所有data数据的基类,类似LineData
, BarData
基本设置方法
setValueTextColor(int color)
: 设置标签文字统一颜色setValueTextColors(List colors)
: 设置标签文字单个颜色setValueTextSize(float size)
: 设置标签文字统一大小(单位:dp)setValueTypeface(Typeface tf)
: 设置标签字体setValueFormatter(ValueFormatter f)
: 格式化 显示数值(例:1000 -> 1k)(提供了几个现成类 :https://github.com/PhilJay/MPAndroidChart/wiki/The-ValueFormatter-interface )setDrawValues(boolean enabled)
: 开启,关闭
设置坐标的格式:https://github.com/PhilJay/MPAndroidChart/wiki/The-AxisValueFormatter-interface
获得设置的方法
getDataSetByIndex(int index)
: 返回指定索引处的 DataSetcontains(Entry entry)
: 查看是否包含某个entry(很耗费性能)contains(T dataSet)
: 查看是否包含某个dataSet(性能影响不大)
clearValues()
: 清除所有,但是不清除 x-values
高亮(略过)
setHighlightEnabled(boolean enabled)
: Set this to true to allow highlighting via touch for thisChartData
object and all underlyingDataSets
.setDrawVerticalHighlightIndicator(boolean enabled)
: Enables / disables the vertical highlight-indicator-line. If disabled, the indicator is not drawn.setDrawHorizontalHighlightIndicator(boolean enabled)
: Enables / disables the horizontal highlight-indicator-line. If disabled, the indicator is not drawn.
notifyDataChanged(): 更改数据后,重新绘制
LineChart
示例代码(两条线)
两个 entry集合
List<Entry> valsComp1 = new ArrayList<Entry>(); List<Entry> valsComp2 = new ArrayList<Entry>();
给两个集合赋值
Entry c1e1 = new Entry(0f, 100000f); // 0 == quarter 1 valsComp1.add(c1e1); Entry c1e2 = new Entry(1f, 140000f); // 1 == quarter 2 ... valsComp1.add(c1e2); // and so on ... Entry c2e1 = new Entry(0f, 130000f); // 0 == quarter 1 valsComp2.add(c2e1); Entry c2e2 = new Entry(1f, 115000f); // 1 == quarter 2 ... valsComp2.add(c2e2);
转换为dataset
LineDataSet setComp1 = new LineDataSet(valsComp1, "Company 1"); setComp1.setAxisDependency(AxisDependency.LEFT); LineDataSet setComp2 = new LineDataSet(valsComp2, "Company 2"); setComp2.setAxisDependency(AxisDependency.LEFT);
把dataset放入 Linedata,再把dataset放入chart
// use the interface ILineDataSet List<ILineDataSet> dataSets = new ArrayList<ILineDataSet>(); dataSets.add(setComp1); dataSets.add(setComp2); LineData data = new LineData(dataSets); mLineChart.setData(data); mLineChart.invalidate(); // refresh
x轴的设置
// the labels that should be drawn on the XAxis final String[] quarters = new String[] { "Q1", "Q2", "Q3", "Q4" }; IAxisValueFormatter formatter = new IAxisValueFormatter() { @Override public String getFormattedValue(float value, AxisBase axis) { return quarters[(int) value]; } // we don't draw numbers, so no decimal digits needed @Override public int getDecimalDigits() { return 0; } }; XAxis xAxis = mLineChart.getXAxis(); xAxis.setGranularity(1f); // minimum axis-step (interval) is 1 xAxis.setValueFormatter(formatter);
其他的设置也是类似的
BarChart
注意这里是 BarEntry
List<BarEntry> entries = new ArrayList<>(); entries.add(new BarEntry(0f, 30f)); entries.add(new BarEntry(1f, 80f)); entries.add(new BarEntry(2f, 60f)); entries.add(new BarEntry(3f, 50f)); // gap of 2f entries.add(new BarEntry(5f, 70f)); entries.add(new BarEntry(6f, 60f)); BarDataSet set = new BarDataSet(entries, "BarDataSet");
注意这里的方法
BarData data = new BarData(set); data.setBarWidth(0.9f); // set custom bar width chart.setData(data); chart.setFitBars(true); // make the x-axis fit exactly all bars chart.invalidate(); // refresh
Grouped BarChart
YourData[] group1 = ...; YourData[] group2 = ...; List<BarEntry> entriesGroup1 = new ArrayList<>(); List<BarEntry> entriesGroup2 = new ArrayList<>(); // fill the lists for(int i = 0; i < group1.length; i++) { entriesGroup1.add(new BarEntry(i, group1.getValue())); entriesGroup2.add(new BarEntry(i, group2.getValue())); } BarDataSet set1 = new BarDataSet(entriesGroup1, "Group 1"); BarDataSet set2 = new BarDataSet(entriesGroup2, "Group 2");
注意下边的代码
float groupSpace = 0.06f; float barSpace = 0.02f; // x2 dataset float barWidth = 0.45f; // x2 dataset // (0.02 + 0.45) * 2 + 0.06 = 1.00 -> interval per "group" BarData data = new BarData(set1, set2); data.setBarWidth(barWidth); // set the width of each bar barChart.setData(data); barChart.groupBars(1980f, groupSpace, barSpace); // perform the "explicit" grouping barChart.invalidate(); // refresh
XAxis xAxis = chart.getXAxis(); xAxis.setCenterAxisLabels(true);
PieChart
List<PieEntry> entries = new ArrayList<>(); entries.add(new PieEntry(18.5f, "Green")); entries.add(new PieEntry(26.7f, "Yellow")); entries.add(new PieEntry(24.0f, "Red")); entries.add(new PieEntry(30.8f, "Blue")); PieDataSet set = new PieDataSet(entries, "Election Results"); PieData data = new PieData(set); pieChart.setData(data); pieChart.invalidate(); // refresh