200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > python pyplot bar 参数_数据可视化之条形图(1):Axes.bar

python pyplot bar 参数_数据可视化之条形图(1):Axes.bar

时间:2019-02-07 05:06:29

相关推荐

python pyplot bar 参数_数据可视化之条形图(1):Axes.bar

matplotlib.__version__ = 3.3.3

摘要:描述了应该如何绘制简单条形图、分组条形图

条形图

条形图是统计中非常常用的一种统计图表,它用来展示定类数据和定量数据。一张好的条形图能够有效地展示统计信息。那么如何使用Python利用matplotlib来绘制一张符合自己预期的条形图呢?

1. 先来看看怎么绘制最基本的条形图

import matplotlib.pyplot as plt

names = ['Chen', 'Wang', 'Lee', 'Zheng']

ages = [25, 22, 21, 24]

# 绘制两组图

fig, ax = plt.subplots()

ax.bar(names, ages,)

简单条形图.png

2. 让我们在条形图上加上图例

import matplotlib.pyplot as plt

names = ['Chen', 'Wang', 'Lee', 'Zheng']

ages = [25, 22, 21, 24]

# 绘制两组图

fig, ax = plt.subplots()

ax.bar(names, ages, label='Age') # 添加标签,便于绘制图例

ax.legend() # 绘制图例

带有图例的条形图

这个添加图例的小技巧你可以应用到几乎所有图形

3.试试两组条形图

有时候我们希望比较同一组人不同的属性,或者同一组属性不同组的人之间的差异,这个时候我们就需要绘制分组的条形图。

3.1. 对于两组而言,这里有一个取巧的简洁方法

import matplotlib.pyplot as plt

names = ['Chen', 'Wang', 'Lee', 'Zheng']

ages = [25, 22, 21, 24]

mental_ages = [7, 8, 9, 10]

fig, ax = plt.subplots()

# 注意引入了align参数,同时第二个width是负数

ax.bar(names, ages, align='edge', width=0.4, label='Age')

ax.bar(names, mental_ages, align='edge', width=-0.4, label='Mental Age')

ax.legend()

注意引入了align参数,同时第二个width是负数

分为两组的条形图

3.2. 但是以下的方法更为通用

import matplotlib.pyplot as plt

names = ['Chen', 'Wang', 'Lee', 'Zheng']

ages = [25, 22, 21, 24]

mental_ages = [7, 8, 9, 10]

fig, ax = plt.subplots()

all_width = 0.6 # 两个条柱的总宽度

width = all_width / 2 # 一个条柱的宽度

onset = width / 2 # 偏移量是半个条柱的宽度

# 创建x坐标

x1, x2 = [x-onset for x in range(4)], [x+onset for x in range(4)]

# 绘图

ax.bar(x1, ages,width=width, label='Age')

ax.bar(x2, mental_ages, width=width, label='Mental Age')

# 修改刻度数量,并且修正为名称

ax.set_xticks(range(4))

ax.set_xticklabels(names)

ax.legend()

其背后的思路是使用数值(而不是标签)来指定条形的位置,这里有两组数据,每个标签对应两个位置。

因此,你可以想象,例如在0两边,两个条形的中心位置应该分别为 负的半个条柱宽度和正的半个条柱宽度。根据这一点,我们分别创建x1列表,x2列表,也就是两组的坐标。

此外,由于使用了数字作为坐标,后续需要改回文字坐标。

4. 试试三组

import matplotlib.pyplot as plt

names = ['Chen', 'Wang', 'Lee', 'Zheng']

ages = [25, 22, 21, 24]

mental_ages = [7, 8, 9, 10]

money = [18, 14, 12, 14]

fig, ax = plt.subplots()

all_width = 0.9 # 三个条柱的总宽度

width = onset = all_width / 3 # 偏移量是一个条柱的宽度

x1 = [x-onset for x in range(4)]

x2 = range(4)

x3 = [x+onset for x in range(4)]

# 绘图

ax.bar(x1, ages,width=onset, label='Age')

ax.bar(x2, mental_ages, width=onset, label='Mental Age')

ax.bar(x3, money, width=onset, label='Money')

# 修改刻度数量,并且修正为名称

ax.set_xticks(range(4))

ax.set_xticklabels(names)

# 绘制图例

ax.legend()

分为三组的条形图

5. 实际上,组数与偏移量有一定的关系

在组数为偶数时,偏移量总是单个条形图宽度的一半;

在组数为奇数时,偏移量总是单个条形图宽度;

def group_and_onset(group_number, all_width=0.9):

# 组数与偏移量的关系

all_width = 0.9

width = all_width / group_number

onset = ((-1)**group_number + 3) / 4 * width

return group_number, all_width, onset

本期到此为止,欢迎关注下一期:堆积条形图与误差线

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。