条形图(bar chart),也称为柱状图,是一种以长方形的长度为变量的统计图表,长方形的长度与它所对应的变量数值呈一定比例。。
画条形图要用到 pyplot 中的 bar 函数,该函数的基本语法为:
bar(x,height,width,**kwargs)
#height:个数或者一个数组,表示条形高度
#width:可选参数,一个数或一个数组,条形宽度,默认0.8
#**kwargs:不定长的关键字参数,用字典形式设置条形图的其他属性,包括图形标签 label,颜色标签 color,不透明度 alpha 等
假设对以下表进行条形图展示,
饮料 | boy | girl |
---|---|---|
六个核弹 | 6 | 9 |
忘崽年奶 | 7 | 4 |
王老菊 | 6 | 4 |
茶兀 | 2 | 6 |
雷碧 | 1 | 5 |
画出boy买各类饮料数量的竖条形图,代码如下:
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
waters = ('六个核弹', '忘崽年奶', '王老菊', '茶兀', '雷碧')
boy_buy_number = [6, 7, 6, 2, 1]
plt.bar(waters, boy_buy_number)
plt.title('boy买各类饮料数量')
plt.
plt.show()
画出boy买各类饮料数量的竖条形图,代码如下:
import matplotlib.pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
waters = ('六个核弹', '忘崽年奶', '王老菊', '茶兀', '雷碧')
boy_buy_number = [6, 7, 6, 2, 1]
plt.barh(waters, boy_buy_number)
plt.title('boy买各类饮料数量')
plt.show()
画出boy和girl买各类饮料数量的竖条形图,代码如下:
import matplotlib.pyplot as plt
import numpy as np
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 输入统计数据
waters = ('六个核弹', '忘崽年奶', '王老菊', '茶兀', '雷碧')
boy_buy_number = [6, 7, 6, 1, 2]
girl_buy_number = [9, 4, 4, 5, 6]
bar_width = 0.3 # 条形宽度
index_male = np.arange(len(waters)) # 男生条形图的横坐标
index_female = index_male + bar_width # 女生条形图的横坐标
# 使用两次 bar 函数画出两组条形图
plt.bar(index_male, height=boy_buy_number, width=bar_width, color='g', label='男性')
plt.bar(index_female, height=girl_buy_number, width=bar_width, color='r', label='女性')
plt.legend() # 显示图例
plt.xticks(index_male + bar_width/2, waters) # 让横坐标轴刻度显示 waters 里的饮用水, index_male + bar_width/2 为横坐标轴刻度的位置
plt.ylabel('购买量') # 纵坐标轴标题
plt.title('男、女购买饮料情况') # 图形标题
plt.show()
输出图如下:
展示不同观影时长的区间统计直方图
import pandas as pd
import matplotlib.pyplot as plt
import pylab as pl
# 展现不同电影的时长分布状态
plt.figure(figsize=(20, 8), dpi=100)
# 准备时长数据
time =[131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]
# 定义一个间隔大小
a = 5
# # 得出组数
bins = int((max(time) - min(time)) / a)
# 画出直方图
plt.hist(time, bins=100)
# 指定刻度的范围,以及步长
plt.xticks(list(range(min(time), max(time)))[::2])
plt.xlabel("电影时长大小")
plt.ylabel("电影的数据量")
plt.grid(True, linestyle='--', alpha=0.5)
plt.show()