private ArrayList<IBarDataSet> getiBarDataSets( List<BarEntry> dataListExpense, List<BarEntry> dataListIncome) { BarDataSet dataSetIncome = new BarDataSet(dataListIncome, mContext.getString(R.string.income)); dataSetIncome.setColor(ContextCompat.getColor(mContext, R.color.colorPrimaryGreen)); dataSetIncome.setDrawValues(false); BarDataSet dataSetExpense = new BarDataSet(dataListExpense, mContext.getString(R.string.expense)); dataSetExpense.setColor(ContextCompat.getColor(mContext, R.color.colorRed)); dataSetExpense.setDrawValues(false); ArrayList<IBarDataSet> dataSetList = new ArrayList<>(); switch (mSelectionType) { case IncomeExpenseAllType.INCOME: dataSetList.add(dataSetIncome); break; case IncomeExpenseAllType.EXPENSE: dataSetList.add(dataSetExpense); break; case IncomeExpenseAllType.ALL: dataSetList.add(dataSetIncome); dataSetList.add(dataSetExpense); break; } return dataSetList; }
private void refreshWeekBeforeSteps( DBHandler db, BarLineChartBase barChart, Calendar day, GBDevice device) { ActivityAnalysis analysis = new ActivityAnalysis(); day = (Calendar) day.clone(); // do not modify the caller's argument day.add(Calendar.DATE, -7); List<BarEntry> entries = new ArrayList<>(); List<String> labels = new ArrayList<>(); for (int counter = 0; counter < 7; counter++) { entries.add( new BarEntry(analysis.calculateTotalSteps(getSamplesOfDay(db, day, device)), counter)); labels.add(day.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, mLocale)); day.add(Calendar.DATE, 1); } BarDataSet set = new BarDataSet(entries, ""); set.setColor(akActivity.color); BarData data = new BarData(labels, set); data.setValueTextColor( Color .GRAY); // prevent tearing other graph elements with the black text. Another approach // would be to hide the values cmpletely with data.setDrawValues(false); LimitLine target = new LimitLine(mTargetSteps); barChart.getAxisLeft().getLimitLines().clear(); barChart.getAxisLeft().addLimitLine(target); setupLegend(barChart); barChart.setData(data); barChart.getLegend().setEnabled(false); }
private void createChart(View v) { BarChart chart = (BarChart) v.findViewById(R.id.barChart); chart.clear(); PSDatePickerView datePickerView = (PSDatePickerView) v.findViewById(R.id.date_picker_view); PSUserDataCollection dataCollection = PSDataStore.getInstance().getUserDataCollection(); ArrayList<BarEntry> entriesAgg = new ArrayList<BarEntry>(); ArrayList<String> xVals = new ArrayList<String>(); int idx = 0; for (Calendar cur = (Calendar) datePickerView.getStartDate().clone(); PSUtil.beforeCalender(cur, datePickerView.getEndDate()); cur.add(Calendar.DATE, 1)) { PSDailyData dailyData = dataCollection.getDailyData(cur.getTimeInMillis()); BarEntry ent = null; if (dailyData != null) { ent = new BarEntry(dailyData.getFormula(), idx, dailyData); } if (ent != null) { entriesAgg.add(ent); } xVals.add(PSUtil.weekDays[idx]); idx++; } BarDataSet setAgg = new BarDataSet(entriesAgg, PSDataStore.getInstance().getUser().getName()); setAgg.setAxisDependency(YAxis.AxisDependency.LEFT); setAgg.setColor(getResources().getColor(R.color.ps_blue_sky)); ArrayList<BarDataSet> dataSets = new ArrayList<BarDataSet>(); dataSets.add(setAgg); // BarData BarData data = new BarData(xVals, dataSets); chart.setData(data); // Config chart chart.setDescription(""); chart.setDrawHighlightArrow(true); // Config axises YAxis leftAxis = chart.getAxisLeft(); YAxis rightAxis = chart.getAxisRight(); leftAxis.setDrawGridLines(false); rightAxis.setDrawGridLines(false); // Config limit line LimitLine ll = new LimitLine(60f); ll.setLineColor(Color.CYAN); ll.setLineWidth(1f); leftAxis.removeAllLimitLines(); leftAxis.addLimitLine(ll); // Config marker PSDailyDataMarkerView markerView = new PSDailyDataMarkerView(v.getContext(), R.layout.ps_daily_data_marker_view); chart.setMarkerView(markerView); // Legend Legend l = chart.getLegend(); l.setEnabled(false); // Show data chart.animateY(600); }
private ArrayList<BarDataSet> getDataSet() { ArrayList<BarDataSet> dataSets = null; ArrayList<BarEntry> valueSet1 = new ArrayList<BarEntry>(); BarEntry v1e1 = new BarEntry(110.000f, 0); // Jan valueSet1.add(v1e1); BarEntry v1e2 = new BarEntry(40.000f, 1); // Feb valueSet1.add(v1e2); BarEntry v1e3 = new BarEntry(60.000f, 2); // Mar valueSet1.add(v1e3); BarEntry v1e4 = new BarEntry(30.000f, 3); // Apr valueSet1.add(v1e4); BarEntry v1e5 = new BarEntry(90.000f, 4); // May valueSet1.add(v1e5); BarEntry v1e6 = new BarEntry(100.000f, 5); // Jun valueSet1.add(v1e6); ArrayList<BarEntry> valueSet2 = new ArrayList<BarEntry>(); BarEntry v2e1 = new BarEntry(150.000f, 0); // Jan valueSet2.add(v2e1); BarEntry v2e2 = new BarEntry(90.000f, 1); // Feb valueSet2.add(v2e2); BarEntry v2e3 = new BarEntry(120.000f, 2); // Mar valueSet2.add(v2e3); BarEntry v2e4 = new BarEntry(60.000f, 3); // Apr valueSet2.add(v2e4); BarEntry v2e5 = new BarEntry(20.000f, 4); // May valueSet2.add(v2e5); BarEntry v2e6 = new BarEntry(80.000f, 5); // Jun valueSet2.add(v2e6); BarDataSet barDataSet1 = new BarDataSet(valueSet1, "Brand 1"); barDataSet1.setColor(Color.rgb(0, 155, 0)); BarDataSet barDataSet2 = new BarDataSet(valueSet2, "Brand 2"); barDataSet2.setColors(ColorTemplate.COLORFUL_COLORS); dataSets = new ArrayList<BarDataSet>(); dataSets.add(barDataSet1); dataSets.add(barDataSet2); return dataSets; }
private void setData(List<Integer> valueList, String format) { mChart.setVisibility(View.VISIBLE); ArrayList<String> xVals = new ArrayList<String>(); ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>(); if (valueList != null) { for (int i = 0; i < valueList.size(); i++) { xVals.add(i + "s"); yVals1.add(new BarEntry(valueList.get(i), i)); } } String legend = getResources().getString(R.string.caption_receptin_rate); if (!format.equals("%")) legend = getResources().getString(R.string.caption_packet_count); BarDataSet set1 = new BarDataSet(yVals1, legend); set1.setBarSpacePercent(35f); set1.setColor(Color.parseColor("#0288D1")); ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>(); dataSets.add(set1); BarData data = new BarData(xVals, dataSets); data.setValueTextSize(10f); data.setDrawValues(false); YAxisValueFormatter custom = new DataAxisFormatter(format); YAxis leftAxis = mChart.getAxisLeft(); YAxis rightAxis = mChart.getAxisRight(); leftAxis.setValueFormatter(custom); rightAxis.setValueFormatter(custom); mChart.setData(data); }
private void setData(DataParse mData) { kLineDatas = mData.getKLineDatas(); // axisLeftBar.setAxisMaxValue(mData.getVolmax()); String unit = MyUtils.getVolUnit(mData.getVolmax()); int u = 1; if ("万手".equals(unit)) { u = 4; } else if ("亿手".equals(unit)) { u = 8; } axisLeftBar.setValueFormatter(new VolFormatter((int) Math.pow(10, u))); // axisRightBar.setAxisMaxValue(mData.getVolmax()); Log.e("@@@", mData.getVolmax() + "da"); ArrayList<String> xVals = new ArrayList<>(); ArrayList<BarEntry> barEntries = new ArrayList<>(); ArrayList<CandleEntry> candleEntries = new ArrayList<>(); ArrayList<Entry> line5Entries = new ArrayList<>(); ArrayList<Entry> line10Entries = new ArrayList<>(); ArrayList<Entry> line30Entries = new ArrayList<>(); for (int i = 0, j = 0; i < mData.getKLineDatas().size(); i++, j++) { xVals.add(mData.getKLineDatas().get(i).date + ""); barEntries.add(new BarEntry(mData.getKLineDatas().get(i).vol, i)); candleEntries.add( new CandleEntry( i, mData.getKLineDatas().get(i).high, mData.getKLineDatas().get(i).low, mData.getKLineDatas().get(i).open, mData.getKLineDatas().get(i).close)); if (i >= 4) { sum = 0; line5Entries.add(new Entry(getSum(i - 4, i) / 5, i)); } if (i >= 9) { sum = 0; line10Entries.add(new Entry(getSum(i - 9, i) / 10, i)); } if (i >= 29) { sum = 0; line30Entries.add(new Entry(getSum(i - 29, i) / 30, i)); } } barDataSet = new BarDataSet(barEntries, "成交量"); barDataSet.setBarSpacePercent(50); // bar空隙 barDataSet.setHighlightEnabled(true); barDataSet.setHighLightAlpha(255); barDataSet.setHighLightColor(Color.WHITE); barDataSet.setDrawValues(false); barDataSet.setColor(Color.RED); BarData barData = new BarData(xVals, barDataSet); barChart.setData(barData); final ViewPortHandler viewPortHandlerBar = barChart.getViewPortHandler(); viewPortHandlerBar.setMaximumScaleX(culcMaxscale(xVals.size())); Matrix touchmatrix = viewPortHandlerBar.getMatrixTouch(); final float xscale = 3; touchmatrix.postScale(xscale, 1f); CandleDataSet candleDataSet = new CandleDataSet(candleEntries, "KLine"); candleDataSet.setDrawHorizontalHighlightIndicator(false); candleDataSet.setHighlightEnabled(true); candleDataSet.setHighLightColor(Color.WHITE); candleDataSet.setValueTextSize(10f); candleDataSet.setDrawValues(false); candleDataSet.setColor(Color.RED); candleDataSet.setShadowWidth(1f); candleDataSet.setAxisDependency(YAxis.AxisDependency.LEFT); CandleData candleData = new CandleData(xVals, candleDataSet); ArrayList<ILineDataSet> sets = new ArrayList<>(); sets.add(setMaLine(5, xVals, line5Entries)); sets.add(setMaLine(10, xVals, line10Entries)); sets.add(setMaLine(30, xVals, line30Entries)); CombinedData combinedData = new CombinedData(xVals); LineData lineData = new LineData(xVals, sets); combinedData.setData(candleData); combinedData.setData(lineData); combinedchart.setData(combinedData); combinedchart.moveViewToX(mData.getKLineDatas().size() - 1); final ViewPortHandler viewPortHandlerCombin = combinedchart.getViewPortHandler(); viewPortHandlerCombin.setMaximumScaleX(culcMaxscale(xVals.size())); Matrix matrixCombin = viewPortHandlerCombin.getMatrixTouch(); final float xscaleCombin = 3; matrixCombin.postScale(xscaleCombin, 1f); combinedchart.moveViewToX(mData.getKLineDatas().size() - 1); barChart.moveViewToX(mData.getKLineDatas().size() - 1); setOffset(); /** * ************************************************************************************** * 此处解决方法来源于CombinedChartDemo,k线图y轴显示问题,图表滑动后才能对齐的bug,希望有人给出解决方法 (注:此bug现已修复,感谢和chenguang79一起研究) * ************************************************************************************** */ handler.sendEmptyMessageDelayed(0, 300); }
public static BarData formatData(JSONArray input) { ArrayList<BarEntry> entries = new ArrayList<>(); labels = new ArrayList<>(); boolean reachedCountries = false; int countryCounter = -1; int barDataCounter = -1; worldAverage = 0; try { for (int i = 0; i < input.length(); i++) { JSONObject set = input.getJSONObject(i); String val = set.getString("value"); if (val.equals("null")) { val = "0"; } JSONObject country = set.getJSONObject("country"); String countryName = country.getString("value"); // link the country name to its id because of urlgenerator purposes String countryID = country.getString("id"); // starts adding to countries array, only after it reaches all the countries if (countryName.toLowerCase().equals(firstCountry.toLowerCase())) { reachedCountries = true; } if (reachedCountries) { if (!countryName.equals("null")) { // this is for the drawer ++countryCounter; Preferences.cacheInformation("countryarray_" + countryCounter, countryName); // bar data float gdp = Float.valueOf(val); barDataCounter++; entries.add(new BarEntry(gdp, countryCounter)); // for better readability if (countryName.length() > 15) { countryName = countryName.substring(0, 15); } Preferences.cacheInformation(countryName.toLowerCase(), countryID.toLowerCase()); labels.add(countryName); // for the average line worldAverage += gdp; } } if (i == input.length() - 1) { Preferences.putInt("countryarray", countryCounter + 1); worldAverage = worldAverage / barDataCounter; } } } catch (JSONException e) { e.printStackTrace(); } BarDataSet dataset = new BarDataSet(entries, "GDP per capita (current US$)"); dataset.setColor(Color.rgb(120, 235, 235)); BarData data = new BarData(labels, dataset); return data; }
/** Get the selected data and show it. */ private void drawData() { // Get shopping list in the dates range Select selectSLInRange = Select.from(ShoppingList.class) .whereOr( Condition.prop("date").gt(minDate.getTime().getTime()), Condition.prop("date").eq(minDate.getTime().getTime())) .and(Condition.prop("date").lt(maxDate.getTime().getTime())); List<ShoppingList> shoppingLists = selectSLInRange.list(); // Show number of shopping lists retrieved Toast.makeText(getActivity(), shoppingLists.size() + " shopping lists", Toast.LENGTH_SHORT) .show(); // If there's one or more, draw the chart // Each year is painted in one color. All the shopping list of one month must be // merge to get the total spend money amount of that month if (shoppingLists.size() > 0) { String[] mMonths = new String[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; Collections.sort(shoppingLists); Map<String, List<BarEntry>> entrysYear = new HashMap<>(); List<String> labels = new ArrayList<>(); // First item Date date = shoppingLists.get(0).getDate(); Calendar cal = getInstance(); cal.setTime(date); int year = cal.get(YEAR); int month = cal.get(MONTH); entrysYear.put(year + "", new ArrayList<BarEntry>()); labels.add(mMonths[month % 12]); float totalPrice = 0; int newYear; int newMonth; for (int i = 0; i < shoppingLists.size(); i++) { Date d = shoppingLists.get(i).getDate(); Calendar c = getInstance(); c.setTime(d); newYear = c.get(YEAR); newMonth = c.get(MONTH); if (newMonth == month && newYear == year) { totalPrice += shoppingLists.get(i).getTotalPrice(); } else { // If not same year -> add new one if (newYear != year) { entrysYear.put(newYear + "", new ArrayList<BarEntry>()); } // If not same month -> save previous month BarEntry be = new BarEntry(totalPrice, labels.size() - 1); entrysYear.get(year + "").add(be); // Add new month labels.add(mMonths[newMonth % 12]); totalPrice = shoppingLists.get(i).getTotalPrice(); } year = newYear; month = newMonth; } // Save last one BarEntry be = new BarEntry(totalPrice, labels.size() - 1); entrysYear.get(year + "").add(be); BarData data = new BarData(labels); int i = 0; for (String name : entrysYear.keySet()) { BarDataSet dataset = new BarDataSet(entrysYear.get(name), name); dataset.setColor(ColorTemplate.COLORFUL_COLORS[i % ColorTemplate.COLORFUL_COLORS.length]); dataset.setBarSpacePercent(35f); data.addDataSet(dataset); i++; } data.setValueTextSize(10f); chart1.setData(data); chart1.notifyDataSetChanged(); // let the chart know it's data changed chart1.invalidate(); // refresh chart1.animateXY(1000, 1000); } }