效果图以下:
水平柱状图与垂直柱状图的代码很是类似,将垂直柱状图中的x轴理解为水平柱状图中的y轴,将垂直柱状图中的y轴理解为水平柱状图的x轴就能够了。java
垂直柱状图的文章以下:android
柱状图git
代码以下:github
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="50dp"> <com.github.mikephil.charting.charts.HorizontalBarChart android:id="@+id/horizontal_bar_chart" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
java代码以下:web
public class HorizontalBarChartActivity extends AppCompatActivity { private HorizontalBarChart barChart; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 去除状态栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_horizontal_bar); initBarChart(); } private void initBarChart() { barChart = findViewById(R.id.horizontal_bar_chart); barChart.getDescription().setEnabled(false); // 不显示描述 barChart.getLegend().setEnabled(false); // 不显示图例 barChart.setExtraOffsets(30, 30, 30, 30); // 设置饼图的偏移量,相似于内边距 ,设置视图窗口大小 setAxis(); // 设置坐标轴 setData(); // 设置数据 } private void setData() { List<BarEntry> entryList = new ArrayList<>(); entryList.add(new BarEntry(0, 60.51f)); entryList.add(new BarEntry(1, 26.28f)); entryList.add(new BarEntry(2, 13.20f)); BarDataSet barDataSet = new BarDataSet(entryList, ""); barDataSet.setColors(Color.GREEN, Color.BLUE, Color.RED); barDataSet.setValueTextColor(Color.RED); barDataSet.setValueTextSize(15f); barDataSet.setValueFormatter(new IValueFormatter() { @Override public String getFormattedValue(float v, Entry entry, int i, ViewPortHandler viewPortHandler) { return v + "%"; } }); BarData barData = new BarData(barDataSet); barData.setBarWidth(0.4f); // 设置柱子的宽度 barChart.setData(barData); } /** * 由于此处的柱状图为水平柱状图,因此x轴变y轴,y轴变x轴 */ private void setAxis() { XAxis xAxis = barChart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setDrawGridLines(false); xAxis.setTextSize(15f); xAxis.setLabelCount(3); xAxis.setGranularity(1f); // 防止放大图后,标签错乱 final String label[] = {"西瓜", "蓝莓", "草莓"}; xAxis.setValueFormatter(new IAxisValueFormatter() { @Override public String getFormattedValue(float v, AxisBase axisBase) { try { return label[(int) v]; } catch (Exception e) { return ""; } } }); YAxis yAxis_right = barChart.getAxisRight(); yAxis_right.setAxisMinimum(0f); yAxis_right.setAxisMaximum(100f); yAxis_right.setTextSize(15f); yAxis_right.setValueFormatter(new IAxisValueFormatter() { @Override public String getFormattedValue(float v, AxisBase axisBase) { return v + "0%"; } }); // 不显示最顶部的轴 YAxis yAxis_left = barChart.getAxisLeft(); yAxis_left.setAxisMinimum(0f); yAxis_left.setAxisMaximum(100f); yAxis_left.setEnabled(false); } }