• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 package com.xxmassdeveloper.mpchartexample;
3 
4 import android.content.Intent;
5 import android.graphics.Color;
6 import android.net.Uri;
7 import android.os.Bundle;
8 import android.view.Menu;
9 import android.view.MenuItem;
10 import android.view.WindowManager;
11 
12 import com.github.mikephil.charting.charts.CombinedChart;
13 import com.github.mikephil.charting.charts.CombinedChart.DrawOrder;
14 import com.github.mikephil.charting.components.AxisBase;
15 import com.github.mikephil.charting.components.Legend;
16 import com.github.mikephil.charting.components.XAxis;
17 import com.github.mikephil.charting.components.XAxis.XAxisPosition;
18 import com.github.mikephil.charting.components.YAxis;
19 import com.github.mikephil.charting.data.BarData;
20 import com.github.mikephil.charting.data.BarDataSet;
21 import com.github.mikephil.charting.data.BarEntry;
22 import com.github.mikephil.charting.data.BubbleData;
23 import com.github.mikephil.charting.data.BubbleDataSet;
24 import com.github.mikephil.charting.data.BubbleEntry;
25 import com.github.mikephil.charting.data.CandleData;
26 import com.github.mikephil.charting.data.CandleDataSet;
27 import com.github.mikephil.charting.data.CandleEntry;
28 import com.github.mikephil.charting.data.CombinedData;
29 import com.github.mikephil.charting.data.Entry;
30 import com.github.mikephil.charting.data.LineData;
31 import com.github.mikephil.charting.data.LineDataSet;
32 import com.github.mikephil.charting.data.ScatterData;
33 import com.github.mikephil.charting.data.ScatterDataSet;
34 import com.github.mikephil.charting.formatter.IAxisValueFormatter;
35 import com.github.mikephil.charting.interfaces.datasets.IDataSet;
36 import com.github.mikephil.charting.utils.ColorTemplate;
37 import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
38 
39 import java.util.ArrayList;
40 
41 public class CombinedChartActivity extends DemoBase {
42 
43     private CombinedChart chart;
44     private final int count = 12;
45 
46     @Override
onCreate(Bundle savedInstanceState)47     protected void onCreate(Bundle savedInstanceState) {
48         super.onCreate(savedInstanceState);
49         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
50                 WindowManager.LayoutParams.FLAG_FULLSCREEN);
51         setContentView(R.layout.activity_combined);
52 
53         setTitle("CombinedChartActivity");
54 
55         chart = findViewById(R.id.chart1);
56         chart.getDescription().setEnabled(false);
57         chart.setBackgroundColor(Color.WHITE);
58         chart.setDrawGridBackground(false);
59         chart.setDrawBarShadow(false);
60         chart.setHighlightFullBarEnabled(false);
61 
62         // draw bars behind lines
63         chart.setDrawOrder(new DrawOrder[]{
64                 DrawOrder.BAR, DrawOrder.BUBBLE, DrawOrder.CANDLE, DrawOrder.LINE, DrawOrder.SCATTER
65         });
66 
67         Legend l = chart.getLegend();
68         l.setWordWrapEnabled(true);
69         l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
70         l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
71         l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
72         l.setDrawInside(false);
73 
74         YAxis rightAxis = chart.getAxisRight();
75         rightAxis.setDrawGridLines(false);
76         rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
77 
78         YAxis leftAxis = chart.getAxisLeft();
79         leftAxis.setDrawGridLines(false);
80         leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
81 
82         XAxis xAxis = chart.getXAxis();
83         xAxis.setPosition(XAxisPosition.BOTH_SIDED);
84         xAxis.setAxisMinimum(0f);
85         xAxis.setGranularity(1f);
86         xAxis.setValueFormatter(new IAxisValueFormatter() {
87             @Override
88             public String getFormattedValue(float value, AxisBase axis) {
89                 return months[(int) value % months.length];
90             }
91         });
92 
93         CombinedData data = new CombinedData();
94 
95         data.setData(generateLineData());
96         data.setData(generateBarData());
97         data.setData(generateBubbleData());
98         data.setData(generateScatterData());
99         data.setData(generateCandleData());
100         data.setValueTypeface(tfLight);
101 
102         xAxis.setAxisMaximum(data.getXMax() + 0.25f);
103 
104         chart.setData(data);
105         chart.invalidate();
106     }
107 
generateLineData()108     private LineData generateLineData() {
109 
110         LineData d = new LineData();
111 
112         ArrayList<Entry> entries = new ArrayList<>();
113 
114         for (int index = 0; index < count; index++)
115             entries.add(new Entry(index + 0.5f, getRandom(15, 5)));
116 
117         LineDataSet set = new LineDataSet(entries, "Line DataSet");
118         set.setColor(Color.rgb(240, 238, 70));
119         set.setLineWidth(2.5f);
120         set.setCircleColor(Color.rgb(240, 238, 70));
121         set.setCircleRadius(5f);
122         set.setFillColor(Color.rgb(240, 238, 70));
123         set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
124         set.setDrawValues(true);
125         set.setValueTextSize(10f);
126         set.setValueTextColor(Color.rgb(240, 238, 70));
127 
128         set.setAxisDependency(YAxis.AxisDependency.LEFT);
129         d.addDataSet(set);
130 
131         return d;
132     }
133 
generateBarData()134     private BarData generateBarData() {
135 
136         ArrayList<BarEntry> entries1 = new ArrayList<>();
137         ArrayList<BarEntry> entries2 = new ArrayList<>();
138 
139         for (int index = 0; index < count; index++) {
140             entries1.add(new BarEntry(0, getRandom(25, 25)));
141 
142             // stacked
143             entries2.add(new BarEntry(0, new float[]{getRandom(13, 12), getRandom(13, 12)}));
144         }
145 
146         BarDataSet set1 = new BarDataSet(entries1, "Bar 1");
147         set1.setColor(Color.rgb(60, 220, 78));
148         set1.setValueTextColor(Color.rgb(60, 220, 78));
149         set1.setValueTextSize(10f);
150         set1.setAxisDependency(YAxis.AxisDependency.LEFT);
151 
152         BarDataSet set2 = new BarDataSet(entries2, "");
153         set2.setStackLabels(new String[]{"Stack 1", "Stack 2"});
154         set2.setColors(Color.rgb(61, 165, 255), Color.rgb(23, 197, 255));
155         set2.setValueTextColor(Color.rgb(61, 165, 255));
156         set2.setValueTextSize(10f);
157         set2.setAxisDependency(YAxis.AxisDependency.LEFT);
158 
159         float groupSpace = 0.06f;
160         float barSpace = 0.02f; // x2 dataset
161         float barWidth = 0.45f; // x2 dataset
162         // (0.45 + 0.02) * 2 + 0.06 = 1.00 -> interval per "group"
163 
164         BarData d = new BarData(set1, set2);
165         d.setBarWidth(barWidth);
166 
167         // make this BarData object grouped
168         d.groupBars(0, groupSpace, barSpace); // start at x = 0
169 
170         return d;
171     }
172 
generateScatterData()173     private ScatterData generateScatterData() {
174 
175         ScatterData d = new ScatterData();
176 
177         ArrayList<Entry> entries = new ArrayList<>();
178 
179         for (float index = 0; index < count; index += 0.5f)
180             entries.add(new Entry(index + 0.25f, getRandom(10, 55)));
181 
182         ScatterDataSet set = new ScatterDataSet(entries, "Scatter DataSet");
183         set.setColors(ColorTemplate.MATERIAL_COLORS);
184         set.setScatterShapeSize(7.5f);
185         set.setDrawValues(false);
186         set.setValueTextSize(10f);
187         d.addDataSet(set);
188 
189         return d;
190     }
191 
generateCandleData()192     private CandleData generateCandleData() {
193 
194         CandleData d = new CandleData();
195 
196         ArrayList<CandleEntry> entries = new ArrayList<>();
197 
198         for (int index = 0; index < count; index += 2)
199             entries.add(new CandleEntry(index + 1f, 90, 70, 85, 75f));
200 
201         CandleDataSet set = new CandleDataSet(entries, "Candle DataSet");
202         set.setDecreasingColor(Color.rgb(142, 150, 175));
203         set.setShadowColor(Color.DKGRAY);
204         set.setBarSpace(0.3f);
205         set.setValueTextSize(10f);
206         set.setDrawValues(false);
207         d.addDataSet(set);
208 
209         return d;
210     }
211 
generateBubbleData()212     private BubbleData generateBubbleData() {
213 
214         BubbleData bd = new BubbleData();
215 
216         ArrayList<BubbleEntry> entries = new ArrayList<>();
217 
218         for (int index = 0; index < count; index++) {
219             float y = getRandom(10, 105);
220             float size = getRandom(100, 105);
221             entries.add(new BubbleEntry(index + 0.5f, y, size));
222         }
223 
224         BubbleDataSet set = new BubbleDataSet(entries, "Bubble DataSet");
225         set.setColors(ColorTemplate.VORDIPLOM_COLORS);
226         set.setValueTextSize(10f);
227         set.setValueTextColor(Color.WHITE);
228         set.setHighlightCircleWidth(1.5f);
229         set.setDrawValues(true);
230         bd.addDataSet(set);
231 
232         return bd;
233     }
234 
235     @Override
onCreateOptionsMenu(Menu menu)236     public boolean onCreateOptionsMenu(Menu menu) {
237         getMenuInflater().inflate(R.menu.combined, menu);
238         return true;
239     }
240 
241     @Override
onOptionsItemSelected(MenuItem item)242     public boolean onOptionsItemSelected(MenuItem item) {
243         switch (item.getItemId()) {
244             case R.id.viewGithub: {
245                 Intent i = new Intent(Intent.ACTION_VIEW);
246                 i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/CombinedChartActivity.java"));
247                 startActivity(i);
248                 break;
249             }
250             case R.id.actionToggleLineValues: {
251                 for (IDataSet set : chart.getData().getDataSets()) {
252                     if (set instanceof LineDataSet)
253                         set.setDrawValues(!set.isDrawValuesEnabled());
254                 }
255 
256                 chart.invalidate();
257                 break;
258             }
259             case R.id.actionToggleBarValues: {
260                 for (IDataSet set : chart.getData().getDataSets()) {
261                     if (set instanceof BarDataSet)
262                         set.setDrawValues(!set.isDrawValuesEnabled());
263                 }
264 
265                 chart.invalidate();
266                 break;
267             }
268             case R.id.actionRemoveDataSet: {
269                 int rnd = (int) getRandom(chart.getData().getDataSetCount(), 0);
270                 chart.getData().removeDataSet(chart.getData().getDataSetByIndex(rnd));
271                 chart.getData().notifyDataChanged();
272                 chart.notifyDataSetChanged();
273                 chart.invalidate();
274                 break;
275             }
276         }
277         return true;
278     }
279 
280     @Override
saveToGallery()281     public void saveToGallery() { /* Intentionally left empty */ }
282 }
283