
like this
Thanks!
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return xVal[(int) value]; // xVal is a string array
}
@Override
public int getDecimalDigits() {
return 0;
}
});
@xiaolongonly work for me, Thanks~
@xiaolongonly Can you please put the code for how you set string values for X Axis in LineChart?
thanks.
Can you please put the code for how you set string values for X Axis in BarChart?
xAxis.setLabelRotationAngle(0f);
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return strings[(int)value % strings.length];
}
});
@xcqwan can you please tell me that how did you put that word 'values' on y axis?
@afreakyelf Do something like this,
`
Random random = new Random();
for (int i=0; i < 10; i++) {
float nv = random.nextFloat();
yValues.add(new Entry(i, nv)); // Y axis values
}
final ArrayList<String> xAxes = new ArrayList<>();
for (int i=0; i < 10; i++) {
xAxes.add(i, String.valueOf(i) + "_" + i); //Dynamic x-axis labels
}
LineChart lineChart = (LineChart) chartView.findViewById(R.id.line_chart);
lineChart.getXAxis().setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
int index = (int) value;
return xAxes.get(index);
}
});
`
setValueFormatter (com.github.mikephil.charting.formatter.ValueFormatter)
in AxisBase聽cannot be applied to
(anonymous com.github.mikephil.charting.formatter.IAxisValueFormatter)
聽I met this question when using above code, can anybody help me please?
@IKnowWhoo
If you are using version 3.1.0, the setValueFormatter method no longer supports _IAxisValueFormatter_ arg. You sould create a class that extends _ValueFormatter_ and override it's _getFormattedValue(float value)_ method to return your desired label.
Follow the strategy proposed by @Yasir-Ghunaim, keeping in mind what I mentioned above as codes for the steps are outdated and some resource links are broken.
After you have finished following the steps, the formatter should look like this:
public class FooFormatter extends ValueFormatter {
private long referenceTimestamp; // minimum timestamp in your data set
private DateFormat mDataFormat;
private Date mDate;
public FooFormatter(long referenceTimestamp) {
this.referenceTimestamp = referenceTimestamp;
this.mDataFormat = new SimpleDateFormat("yyyy-MM-dd");
this.mDate = new Date();
}
@Override
public String getFormattedValue(float value) {
// convertedTimestamp = originalTimestamp - referenceTimestamp
long convertedTimestamp = (long) value;
// Retrieve original timestamp
long originalTimestamp = referenceTimestamp + convertedTimestamp;
// Convert timestamp to hour:minute
return getDateString(originalTimestamp);
}
private String getDateString(long timestamp) {
try {
mDate.setTime(timestamp);
return mDataFormat.format(mDate);
} catch(Exception ex) {
return "xx";
}
}
}
@dlmontano
I am trying to do the same with an horizontalBarChart with discrete String values.
E.g. Week 1, Month 2, 3rd Year etc.
The formatter I found does nothing with the x-Axis.
Do you have an idea?
@Daedra22
Suppose you have to show month list in x-Axis\
private List<Entry> getIncomeEntries() {
ArrayList<Entry> incomeEntries = new ArrayList<>();
incomeEntries.add(new Entry(1, 11300));
incomeEntries.add(new Entry(2, 1390));
incomeEntries.add(new Entry(3, 1190));
incomeEntries.add(new Entry(4, 7200));
incomeEntries.add(new Entry(5, 4790));
incomeEntries.add(new Entry(6, 4500));
incomeEntries.add(new Entry(7, 8000));
incomeEntries.add(new Entry(8, 7034));
incomeEntries.add(new Entry(9, 4307));
incomeEntries.add(new Entry(10, 8762));
incomeEntries.add(new Entry(11, 4355));
incomeEntries.add(new Entry(12, 6000));
return incomeEntries.subList(0, 12);
}
In oncreate Methd
ArrayList<ILineDataSet> dataSets = new ArrayList<>();
List<String> xAxisValues = new ArrayList<>(Arrays.asList("Jan", "Feb", "March", "April", "May", "June","July", "August", "September", "October", "November", "Decemeber"));
List<Entry> incomeEntries = getIncomeEntries();
dataSets = new ArrayList<>();
LineDataSet set1;
set1 = new LineDataSet(incomeEntries, "Income");
set1.setColor(Color.rgb(65, 168, 121));
set1.setValueTextColor(Color.rgb(55, 70, 73));
set1.setValueTextSize(10f);
set1.setMode(LineDataSet.Mode.CUBIC_BEZIER);
dataSets.add(set1);
//customization
LineChart mLineGraph = findByViewId(R.id.line_chart);
mLineGraph.setTouchEnabled(true);
mLineGraph.setDragEnabled(true);
mLineGraph.setScaleEnabled(false);
mLineGraph.setPinchZoom(false);
mLineGraph.setDrawGridBackground(false);
mLineGraph.setExtraLeftOffset(15);
mLineGraph.setExtraRightOffset(15);
//to hide background lines
mLineGraph.getXAxis().setDrawGridLines(false);
mLineGraph.getAxisLeft().setDrawGridLines(false);
mLineGraph.getAxisRight().setDrawGridLines(false);
//to hide right Y and top X border
YAxis rightYAxis = mLineGraph.getAxisRight();
rightYAxis.setEnabled(false);
YAxis leftYAxis = mLineGraph.getAxisLeft();
leftYAxis.setEnabled(false);
XAxis topXAxis = mLineGraph.getXAxis();
topXAxis.setEnabled(false);
XAxis xAxis = mLineGraph.getXAxis();
xAxis.setGranularity(1f);
xAxis.setCenterAxisLabels(true);
xAxis.setEnabled(true);
xAxis.setDrawGridLines(false);
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
set1.setLineWidth(4f);
set1.setCircleRadius(3f);
set1.setDrawValues(false);
set1.setCircleHoleColor(getResources().getColor(R.color.pie_color_4));
set1.setCircleColor(getResources().getColor(R.color.pie_color_4));
//String setter in x-Axis
mLineGraph.getXAxis().setValueFormatter(new com.github.mikephil.charting.formatter.IndexAxisValueFormatter(xAxisValues));
LineData data = new LineData(dataSets);
mLineGraph.setData(data);
mLineGraph.animateX(2000);
mLineGraph.invalidate();
mLineGraph.getLegend().setEnabled(false);
mLineGraph.getDescription().setEnabled(false);
thank u
Most helpful comment