Android中MPAndroidChart图表工具的常用方法(汇总)
本篇主要是MPAndroidChart圖表工具常用方法的匯總,其他不清楚的可以去GitHub上的文檔查詢。
強(qiáng)大的圖表繪制工具,支持折線圖、面積圖、散點(diǎn)圖、時(shí)間圖、柱狀圖、條圖、餅圖、氣泡圖、圓環(huán)圖、范圍(高至低)條形圖、網(wǎng)狀圖等;支持圖的拖拽縮放;支持 Android 2.2 以上,支持橫縱軸縮放,多指縮放,展現(xiàn)動(dòng)畫、高亮、保存到 sdcard、從文件讀取圖表
項(xiàng)目地址:https://github.com/PhilJay/MPAndroidChart
效果圖如下:
?
?
以下為一些常用的方法:
以曲線圖為例
依賴:project build.gradle?中
allprojects {
? ? repositories {
? ? ? ? jcenter()
? ? ? ? maven { url "https://jitpack.io" }
? ? }
}
app build.gradle?中
最簡(jiǎn)單的代碼
<RelativeLayout
? ? xmlns:android="http://schemas.android.com/apk/res/android"
? ? android:layout_width="match_parent"
? ? android:layout_height="match_parent"
? ? android:orientation="vertical">
? ? <com.github.mikephil.charting.charts.LineChart
? ? ? ? android:id="@+id/lineChart"
? ? ? ? android:layout_width="match_parent"
? ? ? ? android:layout_height="300dp"
? ? ? ? android:layout_centerInParent="true"/>
</RelativeLayout>
@Override
protected void onCreate(Bundle savedInstanceState) {
? ? super.onCreate(savedInstanceState);
? ? setContentView(R.layout.activity_main);
? ? LineChart mLineChart = (LineChart) findViewById(R.id.lineChart);
? ? //顯示邊界
? ? mLineChart.setDrawBorders(true);
? ? //設(shè)置數(shù)據(jù)
? ? List<Entry> entries = new ArrayList<>();
? ? for (int i = 0; i < 10; i++) {
? ? ? ? entries.add(new Entry(i, (float) (Math.random()) * 80));
? ? }
? ? //一個(gè)LineDataSet就是一條線
? ? LineDataSet lineDataSet = new LineDataSet(entries, "溫度");
? ? LineData data = new LineData(lineDataSet);
? ? mLineChart.setData(data);
}
效果圖:
一.XAxis(X軸)
1.得到X軸:
XAxis xAxis = mLineChart.getXAxis();
2.設(shè)置X軸的位置(默認(rèn)在上方):
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//值:BOTTOM,BOTH_SIDED,BOTTOM_INSIDE,TOP,TOP_INSIDE
3.設(shè)置X軸坐標(biāo)之間的最小間隔(因?yàn)榇藞D有縮放功能,X軸,Y軸可設(shè)置可縮放)
xAxis.setGranularity(1f);
對(duì)比圖:左圖X軸在圖縮放時(shí)值的間隔會(huì)按比例改變,而右圖進(jìn)行設(shè)置后,最小間隔始終為1
4.設(shè)置X軸的刻度數(shù)量
xAxis.setLabelCount(12, true);
第二個(gè)參數(shù)表示是否平均分配 如果為true則按比例分為12個(gè)點(diǎn)、如果為false則適配X刻度的值來分配點(diǎn),可能沒有12個(gè)點(diǎn)。
對(duì)比圖:左圖的參數(shù)為true,右圖的參數(shù)為false
5.設(shè)置X軸的值(最小值、最大值、然后會(huì)根據(jù)設(shè)置的刻度數(shù)量自動(dòng)分配刻度顯示)
xAxis.setAxisMinimum(0f);
xAxis.setAxisMaximum(20f);
前面是的X軸是根據(jù)(X,Y)的值默認(rèn)顯示的X軸,現(xiàn)在才是真正的設(shè)置規(guī)定的值
效果圖:
6.設(shè)置X軸值為字符串(如上右圖)
xAxis.setValueFormatter(new IAxisValueFormatter() {
? ? @Override
? ? public String getFormattedValue(float value, AxisBase axis) {
? ? ? ? return mList.get((int) value); //mList為存有月份的集合
? ? }
});
想要顯示完整的12個(gè)月份,要與(x,y)坐標(biāo)對(duì)應(yīng)數(shù)量 10 改成 12
for (int i = 0; i < 12; i++) {
? ? entries.add(new Entry(i, (float) (Math.random()) * 80));
}
還有設(shè)置線條顏色、字體顏色、等等,可查看詳細(xì)的文檔。
7.取消曲線顯示的值為整數(shù)
與設(shè)置自定義X軸類似,設(shè)置曲線顯示值為整數(shù),可在設(shè)置曲線LineDataSet?時(shí),修改值的類型
lineDataSet.setValueFormatter(new IValueFormatter() {
? ? @Override
? ? public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
? ? ? ? int IValue = (int) value;
? ? ? ? return String.valueOf(IValue);
? ? }
});
二.YAxis(Y軸)
如上面的圖所示,Y軸總會(huì)高出X軸一點(diǎn),并沒有從0點(diǎn)開始,因此需要對(duì)Y軸進(jìn)行設(shè)置
Y軸和X軸類似
1.得到Y(jié)軸
YAxis leftYAxis = mLineChart.getAxisLeft();
YAxis rightYAxis = mLineChart.getAxisRight();
2.設(shè)置從Y軸值
leftYAxis.setAxisMinimum(0f);
leftYAxis.setAxisMaximum(100f);
rightYAxis.setAxisMinimum(0f);
rightYAxis.setAxisMaximum(100f);
以及
leftYAxis.setValueFormatter(new IAxisValueFormatter() {
? ? @Override
? ? public String getFormattedValue(float value, AxisBase axis) {
? ? ? ? return (int) value + "%";
? ? }
});
效果圖:
3.設(shè)置Y軸是否顯示(效果如上右圖)
rightYAxis.setEnabled(false); //右側(cè)Y軸不顯示
4.X軸和Y軸類似,都具有相同的屬性方法
rightYAxis.setGranularity(1f);
rightYAxis.setLabelCount(11,false);
rightYAxis.setTextColor(Color.BLUE); //文字顏色
rightYAxis.setGridColor(Color.RED); //網(wǎng)格線顏色
rightYAxis.setAxisLineColor(Color.GREEN); //Y軸顏色
5.限制線LimitLine(如上右圖)
LimitLine limitLine = new LimitLine(95,"高限制性"); //得到限制線
limitLine.setLineWidth(4f); //寬度
limitLine.setTextSize(10f);
limitLine.setTextColor(Color.RED); ?//顏色
limitLine.setLineColor(Color.BLUE);
rightYAxis.addLimitLine(limitLine); //Y軸添加限制線
三.Legend(圖例:即上圖所示的曲線圖下面的 溫度)
1.得到Lengend
Legend legend = mLineChart.getLegend();
2.設(shè)置Lengend位置
legend.setTextColor(Color.CYAN); //設(shè)置Legend 文本顏色
legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
3.設(shè)置標(biāo)簽是否換行(當(dāng)多條標(biāo)簽時(shí) 需要換行顯示、如上右圖)
true:可換行。false:不換行
legend.setWordWrapEnabled(true);
4.隱藏Lengend
legend.setEnabled(false);
如下圖所示
四.Description(描述)
1.隱藏描述
Description description = new Description();
description.setEnabled(false);
mLineChart.setDescription(description);
2.設(shè)置描述內(nèi)容
Description description = new Description();
description.setText("X軸描述");
description.setTextColor(Color.RED);
mLineChart.setDescription(description);
五.MarkerView
MarkerView可自定義,用于點(diǎn)擊圖標(biāo)值時(shí)顯示想要的內(nèi)容 效果如上右圖
1.自定義MarkerView
public class MyMarkerView extends MarkerView {
? ? private TextView tvContent;
? ? private DecimalFormat format = new DecimalFormat("##0");
? ? public MyMarkerView(Context context) {
? ? ? ? super(context, R.layout.layout_markerview);
? ? ? ? tvContent = (TextView) findViewById(R.id.tvContent);
? ? }
? ? @Override
? ? public void refreshContent(Entry e, Highlight highlight) {
? ? ? ? tvContent.setText(format.format(e.getY()));
? ? ? ? super.refreshContent(e, highlight);
? ? }
? ? @Override
? ? public MPPointF getOffset() {
? ? ? ? return new MPPointF(-(getWidth() / 2), -getHeight() - 10);
? ? }
}
2.設(shè)置顯示MarkerView
MyMarkerView mv = new MyMarkerView(this);
mLineChart.setMarkerView(mv);
折線圖的線條設(shè)置
//一個(gè)LineDataSet就是一條線
LineDataSet lineDataSet = new LineDataSet(entries, "溫度");
//設(shè)置曲線值的圓點(diǎn)是實(shí)心還是空心
lineDataSet.setDrawCircleHole(false);
//設(shè)置顯示值的字體大小
lineDataSet.setValueTextSize(9f);
//線模式為圓滑曲線(默認(rèn)折線)
lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
?
此外,整理一下常用的方法:
整理了一下 圖表中常用的一些方法
動(dòng)畫:
所有的圖表類型都支持下面三種動(dòng)畫,分別是x方向,y方向,xy方向。
?animateX(int durationMillis): x軸方向
?animateY(int durationMillis): y軸方向
?animateXY(int xDuration, int yDuration): xy軸方向
XY軸的繪制
setEnabled(boolean enabled):設(shè)置軸是否被繪制。默認(rèn)繪制,false不會(huì)被繪制。
setDrawLabels(boolean enabled):設(shè)置為true打開繪制軸的標(biāo)簽。
setDrawAxisLine(boolean enabled): 設(shè)置為true,繪制軸線
setDrawGridLines(boolean enabled): 設(shè)置為true繪制網(wǎng)格線。
定義軸線樣式
setTextColor(int color): 設(shè)置軸標(biāo)簽文本顏色。
setTextSize(float size):設(shè)置軸標(biāo)簽的字體大小。
setTypeface(Typeface tf):設(shè)置軸標(biāo)簽的自定義Typeface(Typeface.createFromAsset(getAssets(), "字體文件名");)
setGridColor(int color): 設(shè)置網(wǎng)格線顏色。
setGridLineWidth(float width):設(shè)置網(wǎng)格線寬度。
setAxisLineColor(int color):設(shè)置此軸的坐標(biāo)軸的顏色。
setAxisLineWidth(float width): 設(shè)置此軸的坐標(biāo)軸的寬度。
setVisibleXRangeMaximum(float maxXRange):設(shè)置x軸最多顯示數(shù)據(jù)條數(shù),(要在設(shè)置數(shù)據(jù)源后調(diào)用,否則是無效的)
enableGridDashedLine(float lineLength, float spaceLength, float phase): 顯示網(wǎng)格線虛線模式,"lineLength"控制短線條的長(zhǎng)度,"spaceLength"控制兩段線之間的間隔長(zhǎng)度,"phase"控制開始的點(diǎn)。
圖表交互設(shè)置
setTouchEnabled(boolean enabled): 允許你打開或者關(guān)閉與圖表的所有觸摸交互的情況。設(shè)置是否可以觸摸,如為false,則不能拖動(dòng),縮放等
setDragEnabled(boolean enabled): 打開或關(guān)閉對(duì)圖表的拖動(dòng)。
setScaleEnabled(boolean enabled):打開或關(guān)閉對(duì)圖表所有軸的的縮放。
setScaleXEnabled(boolean enabled): 打開或關(guān)閉x軸的縮放
setScaleYEnabled(boolean enabled): 打開或關(guān)閉y軸的縮放。
setPinchZoom(boolean enabled): 如果設(shè)置為true,擠壓縮放被打開。如果設(shè)置為false,x和y軸可以被單獨(dú)擠壓縮放。
setHighlightEnabled(boolean enabled): 如果設(shè)置為true,在圖表中選中觸屏高亮。
setHighlightPerDragEnabled(boolean enabled): 設(shè)置為true時(shí)允許高亮顯示拖動(dòng)結(jié)束的對(duì)象在縮放到最下時(shí)。默認(rèn):true
setHighlightIndicatorEnabled(boolean enabled): 如果設(shè)置為true, 指標(biāo)線(或桿)將展示被選擇的線的繪制的值。
自定義軸線的值
setAdjustXLabels(boolean enabled):如果被設(shè)置為true,x軸條目將依賴于它自己在進(jìn)行縮放的時(shí)候。如果設(shè)置為false,x軸條目將總是保持相同。
setAvoidFirstLastClipping(boolean enabled):如果設(shè)置為true,圖表將避免第一個(gè)和最后一個(gè)標(biāo)簽條目被減掉在圖表或屏幕的邊緣。
setSpaceBetweenLabels(int characters): 設(shè)置x軸標(biāo)簽之間的空間字符數(shù),默認(rèn)是4個(gè)。
setPosition(XAxisPosition pos):設(shè)置XAxis應(yīng)該出現(xiàn)的位置。可以選擇TOP,BOTTOM,BOTH_SIDED,TOP_INSIDE或者BOTTOM_INSIDE。
setDescription(String desc): 設(shè)置表格的描述
? setDrawYValues(boolean enabled): 設(shè)置是否顯示y軸的值的數(shù)據(jù)
?setValuePaintColor(int color):設(shè)置表格中y軸的值的顏色,但是必須設(shè)置setDrawYValues(true)
? setValueTypeface(Typeface t):設(shè)置字體
? setValueFormatter(DecimalFormat format): 設(shè)置顯示的格式
? setPaint(Paint p, int which): 自定義筆刷
?public ChartData getDataCurrent():返回ChartData對(duì)象當(dāng)前顯示的圖表。它包含了所有信息的顯示值最小和最大值等
setStartAtZero(boolean enabled):如果這個(gè)打開,軸線總是有最小值0,無論什么類型的圖表被展示。
setAxisMaxValue(float max):設(shè)置一個(gè)自定義的最大值為這條軸,如果設(shè)置了,這個(gè)值將不會(huì)依賴于提供的數(shù)據(jù)自動(dòng)計(jì)算。
resetAxisMaxValue(): 調(diào)用這個(gè)將撤銷以前設(shè)置的最大值。這意味著,你將再次允許軸自動(dòng)計(jì)算它的最大值。
setAxisMinValue(float min): 設(shè)置一個(gè)自定義的最小值。如果設(shè)置了,這個(gè)值將不會(huì)依賴于你提供的數(shù)據(jù)進(jìn)行自動(dòng)計(jì)算。
resetAxisMinValue():調(diào)用這個(gè)方法撤銷以前設(shè)置的最小值。這意味著,你將再次允許軸自動(dòng)計(jì)算他的最小值。
setInverted(boolean enabled): 如果設(shè)置為true,這個(gè)軸將被反向,那意味著最高出的將到底部,最低部的到頂端。
setSpaceTop(float percent):設(shè)置在圖表上最高處的值相比軸上最高值的頂端空間(總軸范圍的百分比)
setSpaceBottom(float percent): 設(shè)置在圖表上最低處的值相比軸上最低處值的底部空間(總軸范圍的百分比)
setShowOnlyMinMax(boolean enabled): 如果打開了,這個(gè)軸將展示出它的最小值和最大值。這將忽略或者覆蓋定義過的label-count。
setPosition(YAxisLabelPosition pos):設(shè)置軸標(biāo)簽應(yīng)該被繪制的位置。INSIDE_CHART或者OUTSIDE_CHART中的一個(gè)。 自定義影響軸的數(shù)值范圍應(yīng)該在圖表被設(shè)置數(shù)據(jù)之前應(yīng)用。
?public float getYChartMin(): 返回當(dāng)前最小值
?public float getYChartMax(): 返回當(dāng)前最大值
?public float getAverage(): 返回所有值的平均值。
?public float getAverage(int type): 返回平均值
?public PointF getCenter(): 返回中間點(diǎn)
?public Paint getPaint(int which): 得到筆刷
?setDragScaleEnabled(boolean enabled): 設(shè)置是否可以拖拽,縮放
?setOnChartValueSelectedListener(OnChartValueSelectedListener l): 設(shè)置表格上的點(diǎn),被點(diǎn)擊的時(shí)候,的回調(diào)函數(shù)
?public void highlightValues(Highlight[] highs): 設(shè)置高亮顯示
?saveToGallery(String title): 保存圖表到圖庫(kù)中
?saveToPath(String title, String pathOnSD): 保存.
?setScaleMinima(float x, float y): 設(shè)置最小的縮放
?centerViewPort(int xIndex, float val): 設(shè)置視口
?fitScreen(): 適應(yīng)屏幕
?
?
總結(jié)
以上是生活随笔為你收集整理的Android中MPAndroidChart图表工具的常用方法(汇总)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WeMall 5.0上线啦
- 下一篇: 物联网应用前景