练习1
绘制班级的身高分布图形 height = [160,163,175,180,176,177,168,189,188,177,174,170,173,181]
from matplotlib import pyplot as plt
import random
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)
plt.figure(figsize=(10,5))
height = [160,163,175,180,176,177,168,189,188,177,174,170,173,181]
diff_height = max(height)-min(height) #极差
print(diff_height)
g_distance = 5
g_num = round(diff_height/g_distance)# 注意组数必须为整数,不能为小数,所以此处四舍五入。默认为10
print(g_num)
plt.xlabel('组数')
plt.ylabel('频率')
plt.title('身高直方图')
plt.hist(height,g_num,density=True, color='g',alpha=0.7, rwidth=0.85) #频率图 增加density
#n, bins, patches = plt.hist(x=height, bins='auto', color='#0504aa',alpha=0.7, rwidth=0.85)
plt.text(176, 0.06, r'最多', color='r')
plt.grid(axis='y', alpha=0.7)
plt.show()
结果:
练习2
实现以下子图布局:
from matplotlib import pyplot as plt
import random
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)
# 通过栅栏设置比例
fig2 = plt.figure(figsize=(12,5))
width = (3,1) #说明0列比1列的宽度为2:1
height = (1,3)#0行比1行宽度为2:1
gs = fig2.add_gridspec(2,2,width_ratios=width,height_ratios=height)
#绘制折线图
def line_chart(ax):
ax.plot(range(5),range(5),marker='o',color='r')
ax.set_title('折线图')
#绘制散点图
def scatter_chart(ax):
ax.scatter(range(5),list(range(5))[::-1],color='y')
ax.set_title('散点图')
#绘制直方图
def hist_chart(ax):
height = [160,163,175,180,176,177,168,189,188,177,174,170,173,181]
diff_height = max(height)-min(height) #极差
#print(diff_height)
g_distance = 5
g_num = round(diff_height/g_distance)# 注意组数必须为整数,不能为小数,所以此处四舍五入。默认为10
#print(g_num)
ax.set_xlabel('组数')
ax.set_ylabel('频率')
ax.set_title('身高直方图')
ax.hist(height,g_num,density=True, color='g',alpha=0.7, rwidth=0.85) #频率图 增加density
# [行,列]---[0,0] 取一整行,列取全部
ax4 = fig2.add_subplot(gs[0,0])
ax5 = fig2.add_subplot(gs[1,0])
ax6 = fig2.add_subplot(gs[1,1])
line_chart(ax4)
hist_chart(ax5)
scatter_chart(ax6)
# 自动调整
#fig.tight_layout()
fig.tight_layout(h_pad=16,w_pad=5)
plt.show()