1. 程式人生 > >Android強大的圖表開源——MPAndroidChart

Android強大的圖表開源——MPAndroidChart

這裡寫圖片描述

介紹

在APP開發中遇到圖表的樣式,一般我們要先查詢GitHub上比較火的開源框架,這種圖示應用廣泛,統計、遊戲統計、人際關係圖等等,用到今天的這個框架MPAndroidChart 點選檢視GitHub
一個可以拖動縮放的圖表庫,包含曲線圖、直方圖、餅狀圖,其中直方圖支援3d效果。
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

核心功能:

8種不同的圖表型別
在兩個軸上縮放(使用觸控手勢,單獨軸或捏縮放)
拖動/平移(使用觸控手勢)
組合圖(線,條,散射,蠟燭資料)
雙(單獨)軸
可定製軸(x軸和y軸)
突出顯示值(具有可自定義的彈出式檢視)
將圖表儲存到SD卡(作為影象或.txt檔案)
預定義顏色模板
圖例(自動生成,可自定義)
動畫(在xPx和yPx軸上建立動畫)
限制線(提供附加資訊,最大值…)
完全可定製(油漆,字型,圖例,顏色,背景,手勢,虛線,…)
在Line和BarChart中可以平滑地縮放和滾動多達30.000個數據點
Gradle支援
直接從資料作圖Realm.io移動資料庫:MPAndroidChart-境界 ⚡️

1.入門

依賴

為了使用庫,有4個不同的選項:
下面新增到專案層面build.gradle:

allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}

或者

dependencies {
    compile 'com.github.PhilJay:MPAndroidChart:v3.0.1'
}

或者
新增以下到您的部分pom.xml:

<repository>
    <id>jitpack.io</id>
    <url
>
https://jitpack.io</url> </repository>

或者
新增以下到您的部分pom.xml:

<dependency>
    <groupId>com.github.PhilJay</groupId>
    <artifactId>MPAndroidChart</artifactId>
    <version>v3.0.1</version>
</dependency>

檢視分類

LineChart (線性圖表)

這裡寫圖片描述
這裡寫圖片描述

Combined-Chart (組合圖表)

這裡寫圖片描述

BarChart (條形圖表)

這裡寫圖片描述

Horizontal-BarChart(水平條形圖表)

這裡寫圖片描述

PieChart(圓形圖表)

這裡寫圖片描述

ScatterChart(分散式圖表)

這裡寫圖片描述

CandleStickChart(燭臺圖表)

這裡寫圖片描述

BubbleChart (氣泡圖表)

這裡寫圖片描述

RadarChart(雷達圖表)

這裡寫圖片描述

建立檢視

在.xml中定義它:

 <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

在程式碼中找到

LineChart chart = (LineChart) findViewById(R.id.chart);

程式碼實現

LineChart chart = new LineChart(Context);
    RelativeLayout rl = (RelativeLayout) findViewById(R.id.relativeLayout);
    rl.add(chart); // add the programmatically created chart

新增資料

在擁有圖表例項後,可以建立資料並將其新增到圖表中。此示例使用LineChart,其中Entry類在圖表中用x和y座標表示單個條目。其他圖表型別,如BarChart使用其他類(例如BarEntry)為此目的。

YourData[] dataObjects = ...;

List<Entry> entries = new ArrayList<Entry>();

for (YourData data : dataObjects) {
    entries.add(new Entry(data.getValueX(), data.getValueY())); 
}

然後,需要將List建立的LineDataSet物件新增到。DataSet物件儲存屬於一起的資料,並允許該資料的單獨樣式。下面使用的“標籤”只有一個描述性的目的,並顯示在Legend,如果啟用。

LineDataSet dataSet = new LineDataSet(entries, "Label"); // add entries to dataset
dataSet.setColor(...);
dataSet.setValueTextColor(...); // styling, ...

最後,需要將LineDataSet建立的一個或多個物件新增到LineData物件。此物件包含由Chart例項表示的所有資料,並允許進一步的樣式。建立資料物件後,可以將其設定為圖表並重新整理:

LineData lineData = new LineData(dataSet);
chart.setData(lineData);
chart.invalidate(); // refresh

各種圖表資料設定

LineChart
如果要向圖表新增值(資料),則必須通過

  public void setData(ChartData data) { ... }

方法。該基類ChartData(ChartData)類封裝在渲染過程中所需圖表的所有資料和資訊。對於每個型別的圖表,不同的亞類ChartData(如LineData)存在應該用於該圖表設定資料。在建構函式中,你可以交出一個List

  / * *列表構造* /
 public LineData(List<ILineDataSet> sets) { ... } 

 / * *構造與一個或多個物件ILineDataSet * /
 public LineData(ILineDataSet...) { ... }

那麼,什麼是一個DataSet和你為什麼需要它?這實際上很簡單。一個DataSet物件代表一組條目(如類Entry屬於一起在圖表內)。它的目的是在圖表中邏輯上分離的值的不同的組。對於每種型別的圖表,一個物件不同的充擴充套件DataSet(如LineDataSet)存在允許特定的造型。

舉個例子,你可能想顯示兩個不同公司的季度收入超過一年的一個LineChart。在這種情況下,將建議建立兩個不同的LineDataSet物件,每個物件包含四個值(每個季度)。
當然,它也可以提供只有一個LineDataSet含有兩個公司的所有8個值的物件。
因此,如何建立一個LineDataSet物件呢?

   public LineDataSet(List<Entry> entries, String label) { ... }

當在構造尋找(不同的構造提供),它是可見的,該LineDataSet需要的List型別的Entry和一個String用於描述LineDataSet和作為用於標籤Legend。此外,這種標籤可以用來尋找LineDataSet除其他LineDataSet中的物件LineData的物件。

所述List型別的Entry封裝的圖表的所有值。一個Entry目的是圍繞一個X和Y值在圖表中的條目的另外的包裝:

  public Entry(float x, float y) { ... }

綜合考慮(兩家公司季度收入超過一年的例子):

   List<Entry> valsComp1 = new ArrayList<Entry>();
    List<Entry> valsComp2 = new ArrayList<Entry>();

然後,填寫列出了與Entry物件。確保輸入物件包含x軸的正確索引。

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);
    //...

LineDataSet可以建立物件:

   LineDataSet setComp1 = new LineDataSet(valsComp1, "Company 1");
    setComp1.setAxisDependency(AxisDependency.LEFT);
    LineDataSet setComp2 = new LineDataSet(valsComp2, "Company 2");
    setComp2.setAxisDependency(AxisDependency.LEFT);
  List<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
    dataSets.add(setComp1);
    dataSets.add(setComp2);

    LineData data = new LineData(dataSets);
    mLineChart.setData(data);
    mLineChart.invalidate(); // refresh

如果我們想要更多的描述性值新增到x軸(而非數字範圍從0到3對不同的位置)中,我們可以通過使用這樣做IAxisValueFormatter的介面。該介面允許在繪製值的定製造型XAxis。在此示例中,格式化程式可能如下所示:

//應在X軸繪製的標籤
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];
    }

     //我們不畫數字,所以不需要小數位數
    @Override
    public int getDecimalDigits() {  return 0; }
};

XAxis xAxis = mLineChart.getXAxis();
xAxis.setGranularity(1f);  //最小軸步驟(間隔)為1 
xAxis.setValueFormatter(formatter);

效果圖
這裡寫圖片描述

條目的順序
請注意,這個庫並不正式支援繪圖LineChart從資料Entry不被按升序方式條目的x位置排序列表
以未排序的方式新增條目可能會導致正確的繪圖,但也可能導致意外的行為。一個List的Entry物件可以使用手動排序或EntryXComparator:

List<Entry> entries = ...;
Collections.sort(entries, new EntryXComparator());

為什麼這是必需的原因是因為庫使用二進位制搜尋演算法有更好的表現只能工作有序列表。

BarChart

可以為a設定資料的方式BarChart非常類似於LineChart。主要區別是需要用於設定資料的資料物件(例如,BarEntry而不是Entry)。除此之外,BarChart有不同的樣式選項。

請考慮以下填充BarChart資料的示例:

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");

在上面的示例中,BarEntry建立了五個物件並將其新增到a BarDataSet。注意,在第四和第五條目之間的x位置上存在間隙“2”。

BarData data = new BarData(set);
data.setBarWidth(0.9f); //設定自定義條形寬度 
chart.setData(data);
chart.setFitBars(true); //使x軸完全適合所有條形 
chart.invalidate(); // refresh

在上面的程式碼段中,BarData建立了一個物件。當BarEntry圖表的物件被建立時,我們在每個條的(中心)之間的x軸上留出了“1f”的空間。通過將條寬設定為0.9f,我們有效地在每個條之間建立一個0.1f的空間。的setFitBars(true)通話將告訴圖表進行調整的範圍x軸值恰好適合所有的條形。

建立BarData物件後,我們將其設定為圖表並重新整理。結果應該接近如下所示:
這裡寫圖片描述

Grouped BarChart

從版本v3.0.0開始,MPAndroidChart支援繪圖條顯式分組(在這種情況下庫將處理x位置)或使用者定義,這意味著使用者可以通過改變x位置的條形位置。

YourData[] group1 = ...;
YourData[] group2 = ...;

List<BarEntry> entriesGroup1 = new ArrayList<>();
List<BarEntry> entriesGroup2 = new ArrayList<>();

//填寫名單
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

BarData data = new BarData(set1, set2);
data.setBarWidth(barWidth); //設定每個bar的寬度
barChart.setData(data);
barChart.groupBars(1980f, groupSpace, barSpace);  //執行“顯式”分組 
barChart.invalidate(); // refresh 

這裡寫圖片描述
為了確保標籤的XAxis中心位於組的上方,如上面的截圖所示,您可以使用setCenterAxisLabels(…)方法:

XAxis xAxis = chart.getXAxis();
xAxis.setCenterAxisLabels(true);

Stacked BarChart

public BarEntry(float x, float [] yValues) { ... }

這個建構函式允許提供多個yValues,它們表示每個條的“堆疊”的值。考慮下面的示例物件:

BarEntry stackedEntry = new BarEntry(0f, new float[] { 10, 20, 30 });

這BarEntry包括三個值的堆疊,具有“10”,“20”和“30”的“高度”。

PieChart

與其他圖表型別不同,它PieChart以PieEntry物件的形式獲取資料。這些物件的建構函式如下所示:

public PieEntry(float value,String label){ ... }

建構函式的第一個引數用於實際的“值”,應將其繪製為餅形圖PieChart。String稱為“標籤” 的第二個引數用於提供對切片的附加描述。考慮以下示例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

這裡寫圖片描述

樣式

有關設定及圖表面和資料的樣式資訊
重新整理

invalidate():在圖表上呼叫此方法將重新整理(重繪)吧。這是需要的,以便使在圖表上執行的更改生效。
notifyDataSetChanged():讓圖表知道它的底層資料已更改,並執行所有必要的重新計算(偏移量,圖例,最大值,最小值,…)。當這是需要特別是動態新增資料。

記錄
setLogEnabled(boolean enabled):將此設定為true將啟用圖表logcat輸出。啟用此選項對效能有害,如果不需要,請保持禁用。

一般圖表樣式

以下是您可以直接在圖表上使用的一些一般樣式方法:

setBackgroundColor(int color):設定將覆蓋整個圖表檢視的背景顏色。此外,背景顏色可以通過被設定.xml在佈局檔案中。
setDescription(String desc):設定顯示在圖表右下角的描述文字。
setDescriptionColor(int color):設定描述文字的顏色。
setDescriptionPosition(float x, float y):在螢幕上以畫素為單位設定描述文字的自定義位置。
setDescriptionTypeface(Typeface t):設定Typeface用於繪製的說明文字。
setDescriptionTextSize(float size):設定描述文字的大小(以畫素為單位),最小6f,最大16f。
setNoDataText(String text):設定圖表為空時應顯示的文字。
setDrawGridBackground(boolean enabled):如果啟用,將繪製圖表繪圖區域後面的背景矩形。
setGridBackgroundColor(int color):設定應該繪製網格背景的顏色。
setDrawBorders(boolean enabled):啟用/禁用繪製圖表邊框(圖表周圍的線條)。
setBorderColor(int color):設定圖表邊框線的顏色。
setBorderWidth(float width):設定dp中圖表邊框線的寬度。
setMaxVisibleValueCount(int count):設定圖表上最大可見繪製值標籤的數量。這個只需要影響時setDrawValues()啟用。

特定圖表設定和樣式

線條,條形,散點,蠟燭和氣泡圖

setAutoScaleMinMaxEnabled(boolean enabled):指示是否啟用y軸上的自動縮放的標誌。如果啟用,當視口改變時,y軸自動調整到當前x軸範圍的最小和最大y值。這對於顯示財務資料的圖表尤其有用。預設值:false

setKeepPositionOnRotation(boolean enabled):設定圖表在方向更改後應保持其位置(縮放/滾動)。預設值:false
BarChart

setDrawValueAboveBar(boolean enabled):如果設定為true,所有值都繪製在它們的條形上方,而不是在它們的頂部之下。
setDrawBarShadow(boolean enabled):如果設定為true,則在每個條形圖後面繪製一個灰色區域,表示最大值。啟用他的能力會降低效能約40%。
setDrawValuesForWholeStack(boolean enabled):如果設定為true,則將單獨繪製堆疊條形的所有值,而不僅僅是它們的總和。
setDrawHighlightArrow(boolean enabled):將此設定為true,以在突出顯示時在每個欄上方繪製突出顯示箭頭。

餅形圖

setDrawSliceText(boolean enabled):將此設定為true以將x值文字繪製到餅圖切片中。
setUsePercentValues(boolean enabled):如果啟用此選項,圖表中的值將以百分比形式繪製,而不是以原始值繪製。ValueFormatter為格式提供的值隨後以百分比形式提供。
setCenterText(SpannableString text):設定繪製在PieChart中心的文字。較長的文字將被自動“包裹”,以避免剪下成餅圖。
setCenterTextRadiusPercent(float percent):設定中心文字的邊界框的矩形半徑,作為餅圖孔預設1.f(100%)的百分比。
setHoleRadius(float percent):將餅圖中心的孔的半徑設定為最大半徑的百分比(max =整個圖表的半徑),預設為50%
setTransparentCircleRadius(float percent):設定餅圖中孔旁邊的透明圓的半徑,以最大半徑的百分比(max =整個圖表的半徑)表示,預設為55% - >比中心孔大5%預設
setTransparentCircleColor(int color):設定透明圓的顏色。
setTransparentCircleAlpha(int alpha):設定透明圓應具有的透明度(0-255)。
setMaxAngle(float maxangle):設定用於計算圓形圓的最大角度。360f意味著它是一個完整的PieChart,180f產生一個半餅圖。預設值:360f

RadarChart
setSkipWebLineCount(int count):允許跳過來自圖表中心的網路線。如果有很多行特別有用。

2.與圖表的互動

此庫允許您完全自定義與圖表檢視的可能的觸控(和手勢)互動,並通過回撥方法對互動作出反應。

啟用/停用互動

setTouchEnabled(boolean enabled):允許啟用/禁用圖表的所有可能的觸控互動。
setDragEnabled(boolean enabled):啟用/禁用圖表的拖動(平移)。
setScaleEnabled(boolean enabled):啟用/禁用兩個軸上圖表的縮放。
setScaleXEnabled(boolean enabled):啟用/禁用x軸上的縮放。
setScaleYEnabled(boolean enabled):啟用/禁用y軸上的縮放。
setPinchZoom(boolean enabled):如果設定為true,則啟用雙指縮放。如果禁用,x軸和y軸可以單獨縮放。
setDoubleTapToZoomEnabled(boolean enabled):將此設定為false,以禁止通過雙擊對圖表進行縮放。

圖表快/減速

setDragDecelerationEnabled(boolean enabled):如果設定為true,圖表在觸控後繼續滾動。預設值:true。
setDragDecelerationFrictionCoef(float coef):減速摩擦係數[0; 1]間隔,較高的值表示速度將緩慢減小,例如,如果它設定為0,它將立即停止。1是無效值,將自動轉換為0.9999。

3.突出顯示值

如何允許通過敲擊手勢突出的條目,並以程式設計型別為int的描述highlightning部分。
啟用/禁用突出顯示

setHighlightPerDragEnabled(boolean enabled):將此設定為true,Chart以允許在完全縮小時在圖表面上拖動時突出顯示。預設值:true
setHighlightPerTapEnabled(boolean enabled):將此設定為false,Chart以防止通過輕擊手勢突出顯示值。值仍然可以通過拖動或程式設計方式突出顯示。預設值:true
setMaxHighlightDistance(float distanceDp):設定dp中的最大高光距離。圖表上的點選距離比該距離更遠的條目不會觸發高亮。預設值:500dp
除此之外,可以為單個DataSet物件配置高亮顯示:

 dataSet.setHighlightEnabled(true); //允許突出顯示DataSet

    //將此設定為false以禁用高亮顯示指示符(行)
  dataSet.setDrawHighlightIndicators(true); 
  dataSet.setHighlightColor(Color.BLACK); // color for highlight indicator
  // and more...

以程式設計方式突出顯示

highlightValue(float x, int dataSetIndex, boolean callListener):突出顯示給定DataSet中給定x位置的值。提供-1作為dataSetIndex來撤消所有高亮顯示。布林標誌確定應該呼叫或不呼叫選擇監聽器。

highlightValue(Highlight high, boolean callListener):突出顯示由提供的Highlight物件表示的值。提供null以撤消所有高亮顯示。布林標誌確定應該呼叫或不呼叫選擇監聽器。

highlightValues(Highlight[] highs):突出顯示給定Highlight[]陣列表示的值。提供null或空陣列以撤消所有高亮顯示。
getHighlighted():返回一個Highlight[]陣列,其中包含所有突出顯示的條目,它們的x-index和dataset-index的資訊。

選擇回撥
這個庫為互動時的回撥提供了許多監聽器。其中一個是OnChartValueSelectedListener,用於通過touch突出顯示值時的回撥:

public interface OnChartValueSelectedListener {
    /**
    *在圖表中選擇值時呼叫。
    * @param  e所選條目。。
    * @param  h包含突出
    * 顯示位置的資訊的相應突出顯示物件
    */
    public void onValueSelected(Entry e, Highlight h);
     //當未選擇任何內容或執行“取消選擇”時呼叫 
    public void onNothingSelected();
}

簡單地讓應該接收回調的類實現此介面並將其設定為圖表的監聽器:

chart.setOnChartValueSelectedListener(this);

突出顯示類
的Highlight類表示與突出相關聯的所有資料Entry,如突出顯示的Entry物件本身,DataSet它屬於,它的繪圖表面更上的位置。它可以用來獲得關於一個已經強調資訊Entry,或者用於向提供資訊Chart為一個Entry加以強調。關於這個目的,Highlight類提供了兩個建構函式:

 / * *標準高亮的建構函式* /
  public Highlight( float x, int dataSetIndex){ ... }

 / * *建構函式用於堆疊BarEntry突出顯示* /
  public Highlight( float x, int dataSetIndex, int stackIndex){ ... }

這些建構函式可用於建立Highlight允許以程式設計方式執行突出顯示的物件:

//高亮顯示第一個(0)DataSet中的條目,x位置50 
Highlight highlight = new Highlight(50f, 0);

chart.highlightValue(highlight, false); //突出這個值,不叫監聽器

自定義熒光筆
在彰顯手勢的形式。所有的使用者輸入在內部被預設的處理ChartHighlighter類。可以使用以下方法使用自定義實現替換預設高亮度:

setHighlighter(ChartHighlighter highlighter):為處理/處理在圖表檢視上執行的所有突出顯示觸控事件的圖表設定自定義高亮度物件。您的自定義熒光筆物件需要擴充套件ChartHighlighter類。

手勢回撥
該OnChartGestureListener將允許您在圖表上所做的手勢做出反應:

public interface OnChartGestureListener {


     // 回調當觸控手勢已經開始圖表(ACTION_DOWN)上
    void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture);

    // 回撥,當觸控手勢圖表(ACTION_UP,ACTION_CANCEL)在結束
    void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture);

     //當圖表longpressed回撥。
    public void onChartLongPressed(MotionEvent me);

     //回調當圖表雙抽頭。
    public void onChartDoubleTapped(MotionEvent me);

     //回調當圖表單抽頭。
    public void onChartSingleTapped(MotionEvent me);

    //圖表圖表滑動
    public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY);

    //回調當圖表縮放/捏通過縮放手勢縮放。
    public void onChartScale(MotionEvent me, float scaleX, float scaleY);

    //通過拖動手勢移動/翻譯圖表時的回撥。
    public void onChartTranslate(MotionEvent me, float dX, float dY);

4.軸

這個wiki頁面的重點是AxisBase類,兩者的基類XAxis(X軸)和YAxis(Y軸)。在v2.0.0中引入

下面提及的以下方法可用於兩個軸。

軸類允許特定的樣式,幷包含以下元件/部件(可以包括):

標籤(以垂直(y軸)或水平(x軸)對齊繪製),包含軸描述值
所謂的“軸線”,被直接畫在標籤旁邊並平行於標籤
“網格線”,每個源自水平方向上的軸標籤
LimitLines,允許提供特殊資訊,如邊界或約束

控制繪製哪個部分(軸)
setEnabled(boolean enabled):設定軸啟用或禁用。如果禁用,則不管任何其他設定如何,都不會繪製軸的任何部分。
setDrawLabels(boolean enabled):將此設定為true可啟用繪製軸的標籤。
setDrawAxisLine(boolean enabled):如果應該繪製軸(軸線)旁邊的線,請將此設定為true。
setDrawGridLines(boolean enabled):將此設定為true可啟用繪製軸的網格線。

自定義軸範圍(最小/最大)

setAxisMaximum(float max):為此軸設定自定義最大值。如果設定,該值將不會根據提供的資料自動計算。
resetAxisMaximum():呼叫此命令可撤銷先前設定的最大值。通過這樣做,您將再次允許軸自動計算其最大值。
setAxisMinimum(float min):為此軸設定自定義最小值。如果設定,該值將不會根據提供的資料自動計算。
resetAxisMinimum():呼叫此命令可撤銷先前設定的最小值。通過這樣做,您將再次允許軸自動計算其最小值。
setStartAtZero(boolean enabled):已過時 -使用setAxisMinValue(…)或setAxisMaxValue(…)代替。
setInverted(boolean enabled):如果設定為true,該軸將反轉,這意味著最高的值將在底部,最低的值在頂部。
setSpaceTop(float percent):設定圖表中最高值的頂部間距(以軸的總範圍的百分比表示)與軸上的最高值的比較。
setSpaceBottom(float percent):設定圖表中最低值與軸上的最低值相比較的底部間距(以總軸範圍的百分比表示)。
setShowOnlyMinMax(boolean enabled):如果啟用,此軸將僅顯示其最小值和最大值。這將忽略/覆蓋定義的標籤計數(如果未強制)。
setLabelCount(int count, boolean force):設定y軸的標籤數。請注意,這個數字不是固定的(如果force == false),只能近似。如果強制啟用(true),則繪製精確指定的標籤數量 - 這可能導致軸上的數字不均勻。
setPosition(YAxisLabelPosition pos):設定軸標籤應該繪製的位置。INSIDE_CHART或OUTSIDE_CHART。
setGranularity(float gran):設定y軸值之間的最小間隔。這可以用於在放大到為軸設定的小數位數不再允許在兩個軸值之間進行區分的點時避免值重複。
setGranularityEnabled(boolean enabled):啟用在放大時限制y軸間隔的粒度特性。預設值:false

樣式/修改軸
setTextColor(int color):設定軸標籤的顏色。
setTextSize(float size):設定dp中軸標籤的文字大小。
setTypeface(Typeface tf):設定自定義Typeface軸標籤。
setGridColor(int color):設定此軸的網格線的顏色。
setGridLineWidth(float width):設定此軸的網格線的寬度。
setAxisLineColor(int color):設定此軸的軸線的顏色。
setAxisLineWidth(float width):設定此軸的軸線的寬度。
enableGridDashedLine(float lineLength, float spaceLength, float phase):允許以虛線模式繪製網格線,例如像“ - - - - - - ”。“lineLength”控制線段的長度,“spaceLength”控制線之間的間隔,“phase”控制起始點。

格式化軸值

對於格式化軸值,可以使用IAxisValueFormatter介面,這說明這裡。您可以使用axis.setValueFormatter(IAxisValueFormatter formatter)方法您的自定義格式設定為軸心。

限制線

兩軸支援所謂的LimitLines,允許提出特殊的資訊,如邊界或限制。LimitLines加入到YAxis被繪製在水平方向上,並且在垂直方向時新增到XAxis。這是你如何新增和刪除LimitLines從軸:

addLimitLine(LimitLine l):新增新的LimitLine這個軸。
removeLimitLine(LimitLine l):刪除指定的LimitLine從該軸。
更多的新增/刪除可用方法。
setDrawLimitLinesBehindData(boolean enabled):允許控制LimitLines和實際資料之間的z順序。如果設定為true,LimitLines則繪製在實際資料後面,否則在頂部。預設值:false
限制線(類LimitLine)是(如名稱可能指示的)簡單和簡單的線可以用於為使用者提供附加資訊。

例如,您的圖表可能會顯示使用者使用應用程式登入的各種血壓測量結果。為了通知使用者超過140 mmHg的收縮壓被認為是健康風險,您可以LimitLine在140 新增一個提供該資訊。
示例程式碼

YAxis leftAxis = chart.getAxisLeft();

LimitLine ll = new LimitLine(140f, "Critical Blood Pressure");
ll.setLineColor(Color.RED);
ll.setLineWidth(4f);
ll.setTextColor(Color.BLACK);
ll.setTextSize(12f);
// .. and more styling options

leftAxis.addLimitLine(ll);

5.X軸

該XAxis是子類AxisBase它所繼承的一些造型和方便的方法。

XAxis類(在之前的版本2.0.0 XLabels稱呼),是一切相關的橫軸的資料和資訊的容器。每個線- ,柱狀圖,散射- ,CandleStick-和RadarChart有一個XAxis物件。

XAxis類允許特定的造型,由(可包括)下列部件/零件:
所謂的“軸線”,被直接畫在標籤旁邊並平行於標籤
“網格線”,每個源自垂直方向上的軸標籤
為了獲得一個例項中的XAxis類,請執行以下操作:

XAxis xAxis = chart.getXAxis();

自定義軸值

setLabelRotationAngle(float angle):設定繪製x軸標籤的角度(以度為單位)。
setPosition(XAxisPosition pos):設定所在的位置XAxis應該出現。在TOP,BOTTOM,BOTH_SIDED,TOP_INSIDE或BOTTOM_INSIDE之間選擇。
示例程式碼

XAxis xAxis = chart.getXAxis();
xAxis.setPosition(XAxisPosition.BOTTOM);
xAxis.setTextSize(10f);
xAxis.setTextColor(Color.RED);
xAxis.setDrawAxisLine(true);
xAxis.setDrawGridLines(false);
// set a custom value formatter
xAxis.setValueFormatter(new MyCustomFormatter()); 

6.YAxis

該YAxis是的子類AxisBase。本維基條目只介紹了YAxis,不是它的超類。

YAxis類,是資料和一切與垂直軸相關的資訊容器。每個線- ,酒吧,圖,散點圖或CandleStickChart具有左和右YAxis的物件,負責要麼向左,或分別右軸。該RadarChart只有一個YAxis。預設情況下,圖表的兩個軸都已啟用並將被繪製。

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()以確定此軸表示圖表的一側。

影響的軸的數值範圍的自定義設定資料之前要施加必要的圖表。

軸相關性

每預設情況下,被新增到圖表地塊對左邊的所有資料YAxis的圖表。如果沒有進一步指定並啟用,右側YAxis被調節到代表相同的比例為左軸。

如果您的圖表需要支援不同的軸刻度,您可以通過設定資料應繪製的軸來實現。這可以通過改變來完成AxisDependency你的DataSet目標:

LineDataSet dataSet = ...; //得到一個數據集 
dataSet.setAxisDependency(AxisDependency.RIGHT);

零線

除了網格線,即沿著在每個值水平起源YAxis,有所謂的zeroline,這是在軸線上的零(0)值繪製的,是類似於網格線,但可以單獨配置。

setDrawZeroLine(boolean enabled):啟用/禁用繪製零線。
setZeroLineWidth(float width):設定零線的線寬。
setZeroLineColor(int color):設定零線應具有的顏色。
零行示例程式碼:
// data has AxisDependency.LEFT
YAxis left = mChart.getAxisLeft();
left.setDrawLabels(false); //無軸標籤
left.setDrawAxisLine(false); //無軸線
left.setDrawGridLines(false); //沒有網格線
left.setDrawZeroLine(true); //畫一條零線
mChart.getAxisRight().setEnabled(false); // 沒有y軸
上面的程式碼將產生一個零線,如下圖所示。沒有繪製軸值,不繪製網格線或軸線,只是零線。

這裡寫圖片描述

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

7.設定顏色

 LineDataSet setComp1 = new LineDataSet(valsComp1, "Company 1");
  //設定顏色為資料集,資源名稱的一個“真實”的色彩解析度是做內部 
  setComp1.setColors(new int[] { R.color.red1, R.color.red2, R.color.red3, R.color.red4 }, Context);

  LineDataSet setComp2 = new LineDataSet(valsComp2, "Company 2");
  setComp2.setColors(new int[] { R.color.green1, R.color.green2, R.color.green3, R.color.green4 }, Context);

除此之外,還有許多其他的方法用於一個設定顏色DataSet。這是完整的文件:

setColors(int [] colors, Context c):設定應該在此DataSet之前使用的顏色。一旦DataSet表示的條目數大於colors陣列的大小,就會重新使用顏色。你可以使用“new int [] {R.color.red,R.color.green,…}”為這個方法提供顏色。在內部,顏色是使用解決getResources()。的getColor(…) 。

setColors(int [] colors):設定應該在此DataSet之前使用的顏色。一旦DataSet表示的條目數大於colors陣列的大小,就會重新使用顏色。確保已準備的顏色(通過呼叫getResources()。的getColor(…)將它們新增到資料集之前)。

setColors(ArrayList colors):設定應該在此DataSet之前使用的顏色。一旦DataSet表示的條目數大於colors陣列的大小,就會重新使用顏色。確保顏色已經準備好了(通過呼叫getResources()。getColor(…)),然後將它們新增到DataSet。

setColor(int color):設定應該用於此DataSet的一個和唯一的顏色。在內部,這將重新建立colors陣列並新增指定的顏色。

LineDataSet set = new LineDataSet(...);
set.setColors(ColorTemplate.VORDIPLOM_COLORS);

8.AxisValueFormatter介面

在版本中引入V3.0.0,該介面允許雙方的定製造型XAxis和YAxis值繪製前。
建立格式化程式

所有需要做到自定義格式的值的軸是建立一個實現一類IAxisValueFormatter介面,如下所示。此格式化程式用於始終將軸的值格式化為1個十進位制數字。

public class MyYAxisValueFormatter implements IAxisValueFormatter {

    private DecimalFormat mFormat;

    public MyAxisValueFormatter() {

        // format values to 1 decimal digit
        mFormat = new DecimalFormat("###,###,##0.0");
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        // "value" represents the position of the label on the axis (x or y)
        return mFormat.format(value) + " $";
    }

    /** this is only needed if numbers are returned, else return 0 */
    @Override
    public int getDecimalDigits() { return 1; }
}

下面的例子演示瞭如何從一個繪製值String[]陣列軸:

public class MyXAxisValueFormatter implements IAxisValueFormatter {

    private String[] mValues;

    public MyXAxisValueFormatter(String[] values) {
        this.mValues = values;
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        // "value" represents the position of the label on the axis (x or y)
        return mValues[(int) value];
    }

    /** this is only needed if numbers are returned, else return 0 */
    @Override
    public int getDecimalDigits() { return 0; }
}

設定格式化程式

建立格式化程式後,只需將其設定為您選擇的軸:

YAxis left = chart.getAxisLeft();
left.setValueFormatter(new MyYAxisValueFormatter());

String[] values = new String[] { ... };

XAxis xAxis = chart.getXAxis();
xAxis.setValueFormatter(new MyXAxisValueFormatter(values));

限制時間間隔

如果您使用基於陣列索引的格式化程式(如上所述),將軸的最小間隔限制為“1”是有意義的:

axis.setGranularity(1f); // restrict interval to 1 (minimum)

這將防止格式化程式繪製重複的軸標籤(由軸間隔<1引起)。一旦圖表的“縮放級別”足夠高,它將停止重新計算較小的間隔。

預定義格式化

LargeValueFormatter:可用於格式化較大值>“1.000”。它將“1.000”變為“1k”,“1.000.000”將是“1m”(百萬),“1.000.000.000”將是“1b”(十億),並且一萬億的值將是例如“1t “。
PercentFormatter:用於帶1位小數位數的每個值後顯示一個“%”的標誌。特別是對於有用PieChart。50 - > 50.0%
示例格式程式

DayAxisValueFormatter:此格式轉換提供的值繪製成日期String,改變依賴於規模的字串。

9.圖例

點選檢視

等等

相關推薦

Android強大圖表開源——MPAndroidChart

介紹 在APP開發中遇到圖表的樣式,一般我們要先查詢GitHub上比較火的開源框架,這種圖示應用廣泛,統計、遊戲統計、人際關係圖等等,用到今天的這個框架MPAndroidChart 點選檢視GitHub 一個可以拖動縮放的圖表庫,包含曲線圖、直方圖

解析Android強大圖表MPAndroidChart

條形圖和線形圖的組合圖 一圖勝千文,純粹的資料枯燥、無聊,讓人看不下去,改變一下形式,用圖表裝飾一下,立馬有趣多了。既然有這樣的外部需求,Android世界裡肯定要有圖表庫才行,今天解析的就是其中最強大的一個MPAndroidChart。 核心功能 支援以下圖

android開源圖表MPAndroidChart(曲線圖、直方圖、餅狀圖)

一個可以拖動縮放的圖表庫,包含曲線圖、直方圖、餅狀圖,其中直方圖支援3d效果。 該庫的可擴充套件性強,程式碼相對規範,最近一次更新有很大改進,如果不喜歡AChartEngine的過於複雜可以考慮在此庫的基礎上開發自己的圖表類。 linechart 填充式lineCha

android開源圖表MPAndroidChart文件翻譯(上)

public interface OnChartGestureListener { /** * Callbacks when a touch-gesture has started on the chart (ACTION_DOWN) * * @param me

(轉)Android圖表MPAndroidChart(十三)——簡約的底部柱狀圖

原地址:http://blog.csdn.net/qq_26787115/article/details/53376360 Android圖表庫MPAndroidChart(十三)——簡約的底部柱狀圖 我們繼續上一講,今天還是說下柱狀圖,這個圖的話應該是用的比較多

github上十二款最著名的Android播放器開源項目

ext font .com 預覽 ffplay 亮度調節 f11 付費 lin Android第一神器—Xposed框架,堪稱黑科技,功能強大!   1.ijkplayer   項目地址:https://github.com/Bilibili/ijkplayer   介紹:

Android-25種開源炫酷動畫框架

提示控件 進度顯示 風格 spl nec 用戶 refresh class art 前言 忙碌的工作終於可以停息一段時間了,最近突然有一個想法,就是自己寫一個app,所以找了一些合適開源控件,這樣更加省時,再此分享給大家,希望能對大家有幫助,此博文介紹的都是UI上面的框架

強大開源企業級數據監控利器Lepus安裝與配置管理

開源軟件 數據庫 監控軟件 系統運維 開篇介紹 官方網站:http://www.lepus.cc開源企業級數據庫監控系統簡潔、直觀、強大的開源數據庫監控系統,MySQL/Oracle/MongoDB/Redis一站式性能監控,讓數據庫監控更簡單Git倉庫地址:https://gitee.com

Android離Linux越來越遙遠了,Google的Android真的是開源的嗎?

Python Linux Android 人工智能 Google Linux簡介(先簡單的介紹一下Linux) Linux是一類Unix計算機操作系統的統稱。Linux操作系統的內核的名字也是“Linux”。Linux操作系統也是自由軟件和開放源代碼發展中最著名的例子。嚴格來講,Linux

BAT大牛 帶你深度剖析Android 10大開源框架

安卓第1章 課程介紹(提供bat內推和簡歷指導)1-1 課程導學第2章 Okhttp網絡庫深入解析和相關面試題分析2-1 okhttp框架流程分析2-2 okhttp同步請求方法2-3 okhttp異步請求方法2-4 okhttp同步請求流程和源碼分析2-5 okhttp異步請求流程和源碼分析-12-6 ok

我也DIY一個Android遙控器-全部開源

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

強大開源企業級資料庫監控利器Lepus

Lepus監控簡單介紹 官方網站:http://www.lepus.cc 開源企業級資料庫監控系統 簡潔、直觀、強大的開源資料庫監控系統,MySQL/Oracle/MongoDB/Redis一站式效能監控,讓資料庫監控更簡單 Git倉庫地址:https://gitee.com/ruzuo

Android 股票圖表

JZAndroidChart 專案地址:donglua/JZAndroidChart  簡介:Android 股票圖表庫 更多:作者   提 Bug    標籤:     Usage

關於Android混淆的開源框架Mess的學習與分析

Mess是用來解決什麼問題的 首先,在之前學過的關於Android混淆知識中我們知道,Android預設是不會混淆四大元件和自定義View的,或者換一個說法,出現在 xml 裡的相關 Java 類預設是不會被混淆的。 你不禁會問,為什麼Android預設要這麼做

安卓專案實戰之Gif圖片載入的最佳實踐android-gif-drawable開源庫的使用

前言 在平時的專案開發中,我們或多或少會遇到載入gif圖片這樣的需求,但是Android的ImageView又無法直接載入Gif圖片,面對這樣的需求我們一般都會想到使用支援載入gif動圖的Glide第三方庫來進行實現,但是使用過程中發現Glide在載入大的gif

android 優秀的開源框架整理

程式設計師界有個神奇的網站,那就是github,這個網站集合了一大批優秀的開源框架,極大地節省了開發者開發的時間,在這裡我進行了一下整理,這樣可以使我們在使用到時快速的查詢到,希望對大家有所幫助! 1. Retrofit 一句話介紹:Retrofit是一款型別安全的網路框

強大開源表格控制元件ReoGrid,有它Farpoint可以扔一邊去了

                昨天偶然發現一個開源的控制元件ReoGrid,作者是一個日本人,哎~!控制元件的功能十會強大的,我覺得最大的亮點就是可以自定義公式,自己寫指令碼下載地址 點這裡作者想的非常的周到,有一個Demo,上面使用了控制元件的各種功能,對開發人員十分友好(在此十分感謝作者無私的開源精神,

Android開發圖片開源框架

2、圖片載入,快取,處理 框架名稱 :Android Universal Image Loader 一個強大的載入,快取,展示圖片的庫,已過時Picasso 一個強大的圖片下載與快取的庫Fresco 一個用於管理影象和他們使用的記憶體的庫Glide 一個圖片載入和快取的庫,使用的App有:網易新聞Glide

Android 收集的開源專案和文章集合

2017-12-212.炫酷開屏動畫框架3.防京東,支付寶密碼鍵盤和密碼輸入框4.根據銀行卡號 獲取 銀行卡型別、銀行名稱和銀行編碼 自動格式化銀行卡號、手機號、身份證號輸入的工具類5.高仿 iOS 滾輪實現 省市區 城市選擇三級聯動6.驗證碼輸入框控制元件.7.輕量級提示框,載入中、成功、失敗、警告等,以及

Android 之 Telegram 開源專案

使用 Android Studio 來編譯執行(第一次使用 Android Studio 來執行正式專案) 先按指引上 Telegram 官網申請 app id 等資訊。 然後,就可以正常啟動了。 對於我們來說,裡面太多可以學習的東西了: 基礎元件:Android