Skip to content

Commit 0fec2ef

Browse files
committed
Clear up grouped bar example
1 parent d65ffb8 commit 0fec2ef

File tree

2 files changed

+46
-53
lines changed

2 files changed

+46
-53
lines changed

MPChartExample/res/layout/activity_barchart.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,26 @@
3535

3636
<TextView
3737
android:id="@+id/tvXMax"
38-
android:layout_width="50dp"
38+
android:layout_width="60dp"
3939
android:layout_height="wrap_content"
4040
android:layout_alignBottom="@+id/seekBar1"
4141
android:layout_alignParentRight="true"
4242
android:text="500"
4343
android:layout_marginBottom="15dp"
4444
android:layout_marginRight="10dp"
4545
android:gravity="right"
46-
android:textAppearance="?android:attr/textAppearanceMedium" />
46+
android:textAppearance="?android:attr/textAppearanceSmall" />
4747

4848
<TextView
4949
android:id="@+id/tvYMax"
50-
android:layout_width="50dp"
50+
android:layout_width="60dp"
5151
android:layout_height="wrap_content"
5252
android:layout_alignBottom="@+id/seekBar2"
5353
android:layout_alignParentRight="true"
5454
android:text="500"
5555
android:layout_marginBottom="15dp"
5656
android:layout_marginRight="10dp"
5757
android:gravity="right"
58-
android:textAppearance="?android:attr/textAppearanceMedium" />
58+
android:textAppearance="?android:attr/textAppearanceSmall" />
5959

6060
</RelativeLayout>

MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartActivityMultiDataset.java

Lines changed: 42 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import com.github.mikephil.charting.charts.BarChart;
1515
import com.github.mikephil.charting.components.AxisBase;
1616
import com.github.mikephil.charting.components.Legend;
17-
import com.github.mikephil.charting.components.Legend.LegendPosition;
1817
import com.github.mikephil.charting.components.XAxis;
1918
import com.github.mikephil.charting.components.YAxis;
2019
import com.github.mikephil.charting.data.BarData;
@@ -46,6 +45,7 @@ protected void onCreate(Bundle savedInstanceState) {
4645
setContentView(R.layout.activity_barchart);
4746

4847
tvX = (TextView) findViewById(R.id.tvXMax);
48+
tvX.setTextSize(10);
4949
tvY = (TextView) findViewById(R.id.tvYMax);
5050

5151
mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
@@ -59,7 +59,7 @@ protected void onCreate(Bundle savedInstanceState) {
5959
mChart.getDescription().setEnabled(false);
6060

6161
// mChart.setDrawBorders(true);
62-
62+
6363
// scaling can now only be done on x- and y-axis separately
6464
mChart.setPinchZoom(false);
6565

@@ -83,14 +83,15 @@ protected void onCreate(Bundle savedInstanceState) {
8383
l.setDrawInside(true);
8484
l.setTypeface(mTfLight);
8585
l.setYOffset(0f);
86+
l.setXOffset(10f);
8687
l.setYEntrySpace(0f);
8788
l.setTextSize(8f);
8889

89-
XAxis xl = mChart.getXAxis();
90-
xl.setTypeface(mTfLight);
91-
xl.setGranularity(1f);
92-
xl.setCenterAxisLabels(true);
93-
xl.setValueFormatter(new IAxisValueFormatter() {
90+
XAxis xAxis = mChart.getXAxis();
91+
xAxis.setTypeface(mTfLight);
92+
xAxis.setGranularity(1f);
93+
xAxis.setCenterAxisLabels(true);
94+
xAxis.setValueFormatter(new IAxisValueFormatter() {
9495
@Override
9596
public String getFormattedValue(float value, AxisBase axis) {
9697
return String.valueOf((int) value);
@@ -106,7 +107,7 @@ public int getDecimalDigits() {
106107
leftAxis.setTypeface(mTfLight);
107108
leftAxis.setValueFormatter(new LargeValueFormatter());
108109
leftAxis.setDrawGridLines(false);
109-
leftAxis.setSpaceTop(30f);
110+
leftAxis.setSpaceTop(35f);
110111
leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
111112

112113
mChart.getAxisRight().setEnabled(false);
@@ -145,13 +146,13 @@ public boolean onOptionsItemSelected(MenuItem item) {
145146
}
146147
case R.id.actionToggleBarBorders: {
147148
for (IBarDataSet set : mChart.getData().getDataSets())
148-
((BarDataSet)set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f);
149+
((BarDataSet) set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f);
149150

150151
mChart.invalidate();
151152
break;
152153
}
153154
case R.id.actionToggleHighlight: {
154-
if(mChart.getData() != null) {
155+
if (mChart.getData() != null) {
155156
mChart.getData().setHighlightEnabled(!mChart.getData().isHighlightEnabled());
156157
mChart.invalidate();
157158
}
@@ -171,7 +172,6 @@ public boolean onOptionsItemSelected(MenuItem item) {
171172
break;
172173
}
173174
case R.id.animateXY: {
174-
175175
mChart.animateXY(3000, 3000);
176176
break;
177177
}
@@ -182,92 +182,85 @@ public boolean onOptionsItemSelected(MenuItem item) {
182182
@Override
183183
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
184184

185-
float groupSpace = 0.04f;
186-
float barSpace = 0.02f; // x3 dataset
187-
float barWidth = 0.3f; // x3 dataset
188-
// (0.3 + 0.02) * 3 + 0.04 = 1.00 -> interval per "group"
185+
float groupSpace = 0.08f;
186+
float barSpace = 0.03f; // x4 DataSet
187+
float barWidth = 0.2f; // x4 DataSet
188+
// (0.2 + 0.03) * 4 + 0.08 = 1.00 -> interval per "group"
189189

190+
int groupCount = mSeekBarX.getProgress() + 1;
190191
int startYear = 1980;
191-
int endYear = startYear + mSeekBarX.getProgress();
192+
int endYear = startYear + groupCount;
192193

193-
tvX.setText(startYear + "\n-" + endYear);
194+
tvX.setText(startYear + "-" + endYear);
194195
tvY.setText("" + (mSeekBarY.getProgress()));
195196

196197
ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
197198
ArrayList<BarEntry> yVals2 = new ArrayList<BarEntry>();
198199
ArrayList<BarEntry> yVals3 = new ArrayList<BarEntry>();
200+
ArrayList<BarEntry> yVals4 = new ArrayList<BarEntry>();
199201

200-
float mult = mSeekBarY.getProgress() * 100000f;
202+
float randomMultiplier = mSeekBarY.getProgress() * 100000f;
201203

202204
for (int i = startYear; i < endYear; i++) {
203-
float val = (float) (Math.random() * mult) + 3;
204-
yVals1.add(new BarEntry(i, val));
205+
yVals1.add(new BarEntry(i, (float) (Math.random() * randomMultiplier)));
206+
yVals2.add(new BarEntry(i, (float) (Math.random() * randomMultiplier)));
207+
yVals3.add(new BarEntry(i, (float) (Math.random() * randomMultiplier)));
208+
yVals4.add(new BarEntry(i, (float) (Math.random() * randomMultiplier)));
205209
}
206210

207-
for (int i = startYear; i < endYear; i++) {
208-
float val = (float) (Math.random() * mult) + 3;
209-
yVals2.add(new BarEntry(i, val));
210-
}
211-
212-
for (int i = startYear; i < endYear; i++) {
213-
float val = (float) (Math.random() * mult) + 3;
214-
yVals3.add(new BarEntry(i, val));
215-
}
211+
BarDataSet set1, set2, set3, set4;
216212

217-
BarDataSet set1, set2, set3;
213+
if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) {
218214

219-
if (mChart.getData() != null &&
220-
mChart.getData().getDataSetCount() > 0) {
221-
set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0);
222-
set2 = (BarDataSet)mChart.getData().getDataSetByIndex(1);
223-
set3 = (BarDataSet)mChart.getData().getDataSetByIndex(2);
215+
set1 = (BarDataSet) mChart.getData().getDataSetByIndex(0);
216+
set2 = (BarDataSet) mChart.getData().getDataSetByIndex(1);
217+
set3 = (BarDataSet) mChart.getData().getDataSetByIndex(2);
218+
set4 = (BarDataSet) mChart.getData().getDataSetByIndex(3);
224219
set1.setValues(yVals1);
225220
set2.setValues(yVals2);
226221
set3.setValues(yVals3);
222+
set4.setValues(yVals4);
227223
mChart.getData().notifyDataChanged();
228224
mChart.notifyDataSetChanged();
225+
229226
} else {
230-
// create 3 datasets with different types
227+
// create 4 DataSets
231228
set1 = new BarDataSet(yVals1, "Company A");
232-
// set1.setColors(ColorTemplate.createColors(getApplicationContext(),
233-
// ColorTemplate.FRESH_COLORS));
234229
set1.setColor(Color.rgb(104, 241, 175));
235230
set2 = new BarDataSet(yVals2, "Company B");
236231
set2.setColor(Color.rgb(164, 228, 251));
237232
set3 = new BarDataSet(yVals3, "Company C");
238233
set3.setColor(Color.rgb(242, 247, 158));
234+
set4 = new BarDataSet(yVals4, "Company D");
235+
set4.setColor(Color.rgb(255, 102, 0));
239236

240-
ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
241-
dataSets.add(set1);
242-
dataSets.add(set2);
243-
dataSets.add(set3);
244-
245-
BarData data = new BarData(dataSets);
237+
BarData data = new BarData(set1, set2, set3, set4);
246238
data.setValueFormatter(new LargeValueFormatter());
247-
248-
// add space between the dataset groups in percent of bar-width
249239
data.setValueTypeface(mTfLight);
250240

251241
mChart.setData(data);
252242
}
253243

244+
// specify the width each bar should have
254245
mChart.getBarData().setBarWidth(barWidth);
246+
247+
// restrict the x-axis range
255248
mChart.getXAxis().setAxisMinimum(startYear);
256-
mChart.getXAxis().setAxisMaximum(mChart.getBarData().getGroupWidth(groupSpace, barSpace) * mSeekBarX.getProgress() + startYear);
249+
250+
// barData.getGroupWith(...) is a helper that calculates the width each group needs based on the provided parameters
251+
mChart.getXAxis().setAxisMaximum(startYear + mChart.getBarData().getGroupWidth(groupSpace, barSpace) * groupCount);
257252
mChart.groupBars(startYear, groupSpace, barSpace);
258253
mChart.invalidate();
259254
}
260255

261256
@Override
262257
public void onStartTrackingTouch(SeekBar seekBar) {
263258
// TODO Auto-generated method stub
264-
265259
}
266260

267261
@Override
268262
public void onStopTrackingTouch(SeekBar seekBar) {
269263
// TODO Auto-generated method stub
270-
271264
}
272265

273266
@Override

0 commit comments

Comments
 (0)