MPAndroidChart的实用文档翻译理解使用(二)

五.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数据的基类,类似LineDataBarData

基本设置方法

  • 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): 返回指定索引处的 DataSet
  • contains(Entry entry): 查看是否包含某个entry(很耗费性能)
  • contains(T dataSet): 查看是否包含某个dataSet(性能影响不大)

clearValues(): 清除所有,但是不清除 x-values

高亮(略过)

  • setHighlightEnabled(boolean enabled): Set this to true to allow highlighting via touch for this ChartData object and all underlying DataSets.
  • 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



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值