需求:绘制12个月份的温度和风极双柱形
效果图:
![](https://img.haomeiwen.com/i8703441/4c246635881bc1e2.jpg)
完整源码:
public class TwoBarChartActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two_bar_chart);
BarChart twoBarChart = findViewById(R.id.twoBarChart);
/**
* 需求:绘制12个月份的温度和风极双柱形
*/
List<Float> temperatures = Arrays.asList(20f, 24f,30f,40f,50f,60f,40f,20f,80f,40f,20f,80f);
List<Float> fengs = Arrays.asList(25f, 30f,40f,40f,60f,60f,70f,20f,30f,40f,10f,80f);
final List<String> xList = Arrays.asList("一月", "二月","三月","四月","五月", "六月","七月","八月","九月", "十月","十一月","十二月");
//设置曲线整体的配置
twoBarChart.setNoDataText("暂无数据");
//设置绘制动画
twoBarChart.animateXY(1000, 1000);
//隐藏说明
twoBarChart.getDescription().setEnabled(false);
//设置X轴
XAxis xAxis = twoBarChart.getXAxis();
xAxis.setAxisMinimum(0f); //要设置,否则右侧还有部分图表未展示出来
xAxis.setAxisMaximum(xList.size()); //要设置,否则右侧还有部分图表未展示出来
xAxis.setLabelCount(12,false); //要设置
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
//设置要不要X轴的网格,就是网格的竖线
xAxis.setDrawGridLines(false);
//将X轴的值显示在中央
xAxis.setCenterAxisLabels(true);
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
//用(int) Math.abs(value) % xList.size()防止越界
return xList.get((int) Math.abs(value) % xList.size());
}
});
//设置Y轴
YAxis rightYAxis = twoBarChart.getAxisRight();
//隐藏右边Y轴
rightYAxis.setEnabled(false);
YAxis leftYAxis = twoBarChart.getAxisLeft();
//设置网格为虚线
leftYAxis.enableGridDashedLine(10f, 10f, 0f);
List<IBarDataSet> dataSets = new ArrayList<>();
//设置温度数据
List<BarEntry> entries = new ArrayList<>();
for (int i = 0; i < 12; i++) {
entries.add(new BarEntry(i, temperatures.get(i)));
}
BarDataSet barDataSet = new BarDataSet(entries, "温度示例");
//设置柱形的颜色
barDataSet.setColor(Color.parseColor("#0000ff"));
dataSets.add(barDataSet);
//设置风级数据
List<BarEntry> entries2 = new ArrayList<>();
for (int i = 0; i < 12; i++) {
entries2.add(new BarEntry(i, fengs.get(i)));
}
BarDataSet barDataSet2 = new BarDataSet(entries2, "风级示例");
//设置柱形的颜色
barDataSet2.setColor(Color.parseColor("#ff0000"));
dataSets.add(barDataSet2);
BarData data = new BarData(dataSets);
//关键
/**
* float groupSpace //柱状图组之间的间距
* float barSpace //每条柱状图之间的间距 一组两个柱状图
* float barWidth //每条柱状图的宽度 一组两个柱状图
* (barWidth + barSpace) * barAmount + groupSpace = 1.00
* 3个数值 加起来 必须等于 1 即100% 按照百分比来计算 组间距 柱状图间距 柱状图宽度
*/
int barAmount = dataSets.size(); //需要显示柱状图的类别 数量
//设置组间距占比30% 每条柱状图宽度占比 70% /barAmount 柱状图间距占比 0%
float groupSpace = 0.3f; //柱状图组之间的间距
float barSpace = 0.05f;
float barWidth = (1f - groupSpace) / barAmount - 0.05f;
//设置柱状图宽度
data.setBarWidth(barWidth);
//(起始点、柱状图组间距、柱状图之间间距)
data.groupBars(0f, groupSpace, barSpace);
twoBarChart.setData(data);
}}
有问题可私信或者评论
网友评论