Python数据可视化第 5 讲:matplotlib绘制条形图函数bar

1. bar 函数介绍

bar 函数用于绘制条形图,每个条按给定的对齐方式定位在参数 x 指定的位置。它们的宽、高尺寸由参数 height 和 width 决定。垂直基线由参数 bottom 指定,默认为0。函数的调用格式如下:

bar(x, height, width, bottom, **kwargs)
bar(x, height, **kwargs)
bar(x, height)

参数说明:

  • x:标量序列,每个条定位在 x 指定的位置。
  • height:标量或标量序列,条形图的高度。
  • width:标量或类似数组,可选,条形图的宽度(默认值:0.8)。
  • bottom:标量或类似数组,可选,条形图底部的y坐标(默认值:0)。
  • align:对齐方式,可选,默认值:“center”。 “center”:将条形图置于x位置的中心;“edge”:将条的左边缘与x位置对齐。

2. bar 函数绘图示例

2.1 绘制一个基本的条形图

绘制一个具有4个条的条形图,代码如下:

import matplotlib.pyplot as plt

# step1:准备画图的数据
x = [1, 2, 3, 4]
height = [12, 34, 25, 30]
# step2:手动创建一个figure对象,相当于一个空白的画布
figure = plt.figure()
# step3:在画布上添加1个子块,标定绘图位置
axes1 = plt.subplot(1, 1, 1)
# step4:绘制条形图
axes1.bar(x, height)
axes1.set_title('bar example')

# step5:展示
plt.show()

上面代码的运行结果:

Python数据可视化第 5 讲:matplotlib绘制条形图函数bar_第1张图片

2.2 绘制条形图并设置基本属性

绘制一个具有4个条的条形图,并设置基本属性,代码如下:

import matplotlib.pyplot as plt

# step1:准备画图的数据
x = [1, 2, 3, 4]
height = [12, 34, 25, 30]
# step2:手动创建一个figure对象,相当于一个空白的画布
figure = plt.figure()
# step3:在画布上添加1个子块,标定绘图位置
axes1 = plt.subplot(1, 1, 1)
# step4:绘制条形图
axes1.bar(x, height, width=0.5)
# step5:条形图基本属性设置
axes1.set_title('GDP of 2019')
axes1.set_ylabel('trillion dollars')
plt.xticks(x, ('spring', 'summer', 'autumn', 'winter'))
# step6:展示
plt.show()

上面代码的运行结果:

Python数据可视化第 5 讲:matplotlib绘制条形图函数bar_第2张图片

2.3 绘制复合条形图

绘制复合条形图,并设置基本属性,代码示例如下:

import matplotlib.pyplot as plt
import numpy as np

# step1:准备画图的数据
labels = ['G1', 'G2', 'G3', 'G4', 'G5']
men_means = [20, 34, 30, 35, 27]
women_means = [25, 32, 34, 20, 25]
x = np.arange(len(labels))  # 条形图x轴坐标
width = 0.35  # 条形图宽度

# step2:手动创建一个figure对象,即一张空白的画布
figure = plt.figure()
# step3:在画布上添加1个子块,标定绘图位置
axes1 = plt.subplot(1, 1, 1)
# step4:绘制条形图
axes1.bar(x - width / 2, men_means, width, label='Men')
axes1.bar(x + width / 2, women_means, width, label='Women')
# step5:条形图基本属性设置
# Add some text for labels, title and custom x-axis tick labels, etc.
axes1.set_ylabel('Scores')
axes1.set_title('Scores by group and gender')
axes1.set_xticks(x)
axes1.set_xticklabels(labels)
axes1.legend()
# step6:展示
plt.show()

上面代码的运行结果:

Python数据可视化第 5 讲:matplotlib绘制条形图函数bar_第3张图片

2.4 堆积式条形图绘制

采用“堆积”的方式绘制条形图,形成渐变色效果,并在条形图中添加一个表格,设置基本属性,代码示例如下:

import numpy as np
import matplotlib.pyplot as plt

# step1:准备画图的数据
data = [[66386, 174296, 75131, 577908, 32015],
        [58230, 381139, 78045, 99308, 160454],
        [89135, 80552, 152558, 497981, 603535],
        [78415, 81858, 150656, 193263, 69638],
        [139361, 331509, 343164, 781380, 52269]]
columns = ('Freeze', 'Wind', 'Flood', 'Quake', 'Hail')
rows = ['%d year' % x for x in (100, 50, 20, 10, 5)]
values = np.arange(0, 2500, 500)
value_increment = 1000

# 生成一组颜色,用于条形图颜色设置,形成渐变效果
colors = plt.cm.BuPu(np.linspace(0, 0.5, len(rows)))
n_rows = len(data)

# 条形图x轴位置和宽度
index = np.arange(len(columns)) + 0.3
bar_width = 0.4

# 初始化堆积条形图的垂直偏移
y_offset = np.zeros(len(columns))

# 打条形图并为表格创建文本标签
cell_text = []
# 手动创建一个figure对象,相当于一个空白的画布
figure = plt.figure()
# 在画布上增加一个子块
axes1 = figure.add_subplot(1, 1, 1)
# 循环,堆积式绘图,形成渐变色效果
for row in range(n_rows):
    axes1.bar(index, data[row], bar_width, bottom=y_offset, color=colors[row])
    y_offset = y_offset + data[row]
    cell_text.append(['%1.1f' % (x / 1000.0) for x in y_offset])
# 反转颜色和文本标签以在顶部显示最后一个值
colors = colors[::-1]
cell_text.reverse()

# 在坐标系的底部增加一张表
the_table = axes1.table(cellText=cell_text,
                        rowLabels=rows,
                        rowColours=colors,
                        colLabels=columns,
                        loc='bottom')

# 调整子块布局,为表格腾出空间
plt.subplots_adjust(left=0.2, bottom=0.2)

# 基本设置
plt.ylabel("Loss in ${0}'s".format(value_increment))
plt.yticks(values * value_increment, ['%d' % val for val in values])
plt.xticks([])
plt.title('Loss by Disaster')

# 绘图
plt.show()

上面代码的运行结果:

Python数据可视化第 5 讲:matplotlib绘制条形图函数bar_第4张图片

你可能感兴趣的:(Python数据可视化)