4.1默认条形图
4.1.1代码
#导入相关库
import numpy as np #导入numpy库
import matplotlib.pyplot as plt #导入matplotlib的绘图模块
#准备相关数据
name = ['老大', '老二', '老三', '老四', '老五', '老六']# 创建一个包含六个类别的列表
np.random.seed(100) #设置随机种子为100。这确保了每次运行代码时,随机数序列都是一样的
N = len(name)# 获取name列表的长度,即名字的数量
math = np.random.randint(60, 100, N)# 使用random.randint函数生成N个随机整数,这些整数在60到99之间(包括60,但不包括100)
#绘制条形图
plt.figure(dpi=120) #分辨率为120
plt.bar(name, math, alpha=.7)#创建一个条形图,X轴是name列表中的名称,Y轴是数学列表中的数值,每个条形的颜色具有一定的透明度。
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为新创建的字体
plt.rcParams['axes.unicode_minus'] = False # 用于正常显示负号
plt.ylabel('数学成绩') #y坐标名称
#显示图表
plt.show()
4.1.2显示图表
4.2多子条形图
4.2.1方法一代码
#导入相关库
import numpy as np #导入numpy库
import matplotlib.pyplot as plt #导入matplotlib的绘图模块
#准备相关数据
name = ['老大', '老二', '老三', '老四', '老五', '老六']# 创建一个包含六个类别的列表
np.random.seed(100) #设置随机种子为100。这确保了每次运行代码时,随机数序列都是一样的
N = len(name)# 获取name列表的长度,即名字的数量
math = np.random.randint(60, 100, N)# 使用random.randint函数生成N个随机整数,这些整数在60到99之间(包括60,但不包括100)
physics = np.random.randint(60, 100, N) #物理成绩
biology = np.random.randint(60, 100, N) #生物成绩
chemistry = np.random.randint(60, 100, N) #化学成绩
rows = 2 # 定义网格的行数,表示有2行
columns = 2 # 定义网格的列数,表示会有2列
plt.figure(figsize=(12, 8), dpi=120) #创建一个新的图形,尺寸为12x8宽度为12,高度为8,分辨率为120 dpi。
grid = plt.GridSpec(rows, columns, wspace=.25, hspace=.25) # 创建一个网格布局
# GridSpec是matplotlib库中的一个类,用于创建网格布局
# wspace和hspace参数分别定义了网格列和行之间的间距,这里设置为0.25,表示列和行之间各有25%的间距
plt.subplot(grid[0]) #子图1
plt.bar(name, math, alpha=.7)#创建一个条形图,X轴是name列表中的名称,Y轴是数学列表中的数值,每个条形的颜色具有一定的透明度。
plt.ylabel('数学成绩')
plt.ylim(60, 100) #设置 y 轴的范围为从60到100
plt.subplot(grid[1]) #子图2
plt.bar(name, physics, alpha=.7)
plt.ylabel('物理成绩')
plt.ylim(60, 100)
plt.subplot(grid[2]) #子图3
plt.bar(name, biology, alpha=.7)
plt.ylabel('生物成绩')
plt.ylim(60, 100)
plt.subplot(grid[3]) #子图4
plt.bar(name, chemistry, alpha=.7)
plt.ylabel('化学成绩')
plt.ylim(60, 100)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为新创建的字体
plt.rcParams['axes.unicode_minus'] = False # 用于正常显示负号
#显示图表
plt.show()
4.2.2方法一显示图表
4.2.3方法二代码
#导入相关库
import numpy as np #导入numpy库
import matplotlib.pyplot as plt #导入matplotlib的绘图模块
#准备相关数据
name = ['老大', '老二', '老三', '老四', '老五', '老六']# 创建一个包含六个类别的列表
course_name = ['数学', '物理', '生物', '化学'] #创建课程类别的列表
N = len(name)# 获取name列表的长度,即名字的数量
rows = 2 # 定义网格的行数,表示有2行
columns = 2 # 定义网格的列数,表示会有2列
plt.figure(figsize=(12, 8), dpi=120) #创建一个新的图形,尺寸为12x8宽度为12,高度为8,分辨率为120 dpi。
grid = plt.GridSpec(rows, columns, wspace=.25, hspace=.25) # 创建一个网格布局,网格列和行之间的间距,这里设置为0.25,表示列和行之间各有25%的间距
for i in range(len(course_name)): #使用循环简化代码
np.random.seed(100) #设置随机种子为100。这确保了每次运行代码时,随机数序列都是一样的
course = np.random.randint(60, 100, N)# 使用random.randint函数生成N个随机整数,这些整数在60到99之间(包括60,但不包括100)
plt.subplot(grid[i])
plt.bar(name, course, alpha=.7)
plt.ylabel(course_name[i] + '成绩')
plt.ylim(60, 100) #y轴的最小值和最大值
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为新创建的字体
plt.rcParams['axes.unicode_minus'] = False # 用于正常显示负号
#显示图表
plt.show()
4.2.4方法二显示图表
4.3水平多子图、按组上色
4.3.1代码
#导入相关库
import numpy as np #导入numpy库
import matplotlib.pyplot as plt #导入matplotlib的绘图模块
#准备相关数据
name = ['老大', '老二', '老三', '老四', '老五', '老六']# 创建一个包含六个类别的列表
course_name = ['数学', '物理', '生物', '化学'] #创建课程类别的列表
colors = ['#00429d', '#7f40a2', '#a653a1', '#c76a9f', '#e4849c', '#d0e848'] #每组的颜色
N = len(name)# 获取name列表的长度,即名字的数量
rows = 2 # 定义网格的行数,表示有2行
columns = 2 # 定义网格的列数,表示会有2列
plt.figure(figsize=(12, 8), dpi=120) #创建一个新的图形,尺寸为12x8宽度为12,高度为8,分辨率为120 dpi。
grid = plt.GridSpec(rows, columns, wspace=.25, hspace=.25) # 创建一个网格布局,网格列和行之间的间距,这里设置为0.25,表示列和行之间各有25%的间距
for i in range(len(course_name)): #使用循环简化代码
np.random.seed(100) #设置随机种子为100。这确保了每次运行代码时,随机数序列都是一样的
course = np.random.randint(60, 100, N)# 使用random.randint函数生成N个随机整数,这些整数在60到99之间(包括60,但不包括100)
plt.subplot(grid[i])
plt.barh(name, course, color=colors) # 水平条形图,按组上色
plt.xlabel(course_name[i] + '成绩')
plt.xlim(60, 100) #y轴的最小值和最大值
plt.gca().invert_yaxis()#获取当前的子图并反转其 y 轴。
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为新创建的字体
plt.rcParams['axes.unicode_minus'] = False # 用于正常显示负号
#显示图表
plt.show()
4.3.2显示图表
4.4 水平多子图、添加误差棒
4.4.1代码
#导入相关库
import numpy as np #导入numpy库
import matplotlib.pyplot as plt #导入matplotlib的绘图模块
#准备相关数据
name = ['老大', '老二', '老三', '老四', '老五', '老六']# 创建一个包含六个类别的列表
course_name = ['数学', '物理', '生物', '化学'] #创建课程类别的列表
N = len(name)# 获取name列表的长度,即名字的数量
rows = 2 # 定义网格的行数,表示有2行
columns = 2 # 定义网格的列数,表示会有2列
colors = ['#00429d', '#7f40a2', '#a653a1', '#c76a9f', '#e4849c', '#d0e848'] #每组的颜色
plt.figure(figsize=(12, 8), dpi=120) #创建一个新的图形,尺寸为12x8宽度为12,高度为8,分辨率为120 dpi。
grid = plt.GridSpec(rows, columns, wspace=.25, hspace=.25) # 创建一个网格布局,网格列和行之间的间距,这里设置为0.25,表示列和行之间各有25%的间距
np.random.seed(100) #设置随机种子为100。这确保了每次运行代码时,随机数序列都是一样的
for i in range(len(course_name)): #使用循环简化代码
course = np.random.randint(65, 95, N)# 使用random.randint函数生成N个随机整数,这些整数在60到99之间(包括60,但不包括100)
noise = np.random.randint(1, 3, N) #误差在1-3之间
plt.subplot(grid[i])
plt.barh(name, course, color=colors,xerr=noise,ecolor='k') # 水平条形图,按组上色
plt.xlabel(course_name[i] + '成绩')
plt.xlim(60, 100) #y轴的最小值和最大值
plt.gca().invert_yaxis()#获取当前的子图并反转其 y 轴。
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为新创建的字体
plt.rcParams['axes.unicode_minus'] = False # 用于正常显示负号
#显示图表
plt.show()
4.4.2显示图表