第七讲练习
练习1
def auto_label(x,my_y):
for x_i,y_i in zip(x,my_y):
plt.annotate(f"{y_i}",xy=(x_i,y_i),xytext=(x_i,y_i-1))
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)
# 构建x,height
fruits = ["苹果","梨子","车厘子"]
Q1_sales = [1000,800,3000]
Q2_sales = [1200,700,2800]
# 柱子的对应索引位置 [0,1,2]
# 设置柱子宽度
width = 0.35
# rects1 = plt.bar(list(range(len(fruits))),Q1_sales,width)
# rects2 = plt.bar(list(range(len(fruits))),Q2_sales,width)
# 蓝黄柱子宽度都为0.35 怎么使蓝色显示左边 黄色显示右边
# 位置左移width/2 位置-width/2 [0-width/2,1-width/2,2-width/2]
## 原方法(列表推导式)
# po_l = [i-width/2 for i in list(range(len(fruits)))]
# po_r = [i+width/2 for i in list(range(len(fruits)))]
#map方法
# def add_wl(w):
# return w-width/2
# def add_wr(w):
# return w+width/2
# po_l = list(map(add_wl,range(len(fruits))))
# po_r = list(map(add_wr,range(len(fruits))))
# adwl = lambda x:x-width/2#匿名函数方式
# po_l = list(map(adwl,range(len(fruits))))
# adwr = lambda x:x+width/2#匿名函数方式
# po_r = list(map(adwr,range(len(fruits))))
#直接用数组的方式
po_l = np.arange(len(fruits))-width/2
po_r = np.arange(len(fruits))+width/2
plt.bar(po_l,Q1_sales,width,label="Q1")
plt.bar(po_r,Q2_sales,width,label="Q2")
# 设置图例
plt.legend()
# 数据标签
auto_label(po_l,Q1_sales)
auto_label(po_r,Q2_sales)
plt.xticks(list(range(len(fruits))),fruits)
plt.show()
重点代码:
## 原方法(列表推导式)
# po_l = [i-width/2 for i in list(range(len(fruits)))]
# po_r = [i+width/2 for i in list(range(len(fruits)))]
#map方法
# def add_wl(w):
# return w-width/2
# def add_wr(w):
# return w+width/2
# po_l = list(map(add_wl,range(len(fruits))))
# po_r = list(map(add_wr,range(len(fruits))))
# adwl = lambda x:x-width/2#匿名函数方式
# po_l = list(map(adwl,range(len(fruits))))
# adwr = lambda x:x+width/2#匿名函数方式
# po_r = list(map(adwr,range(len(fruits))))
#直接用数组的方式
po_l = np.arange(len(fruits))-width/2
po_r = np.arange(len(fruits))+width/2
练习2
np.arange(16).reshape(4,4) - 2
np.arange(16).reshape(4,4) + np.arange(16,32).reshape(4,4)
#np.arange(8).reshape(2,4)与np.arange(4)运算吗?
np.arange(8).reshape(2,4) - np.arange(4)#广播机制,二行四列与一行
#np.arange(8).reshape(2,4)与np.arange(4).reshape(1,4)运算吗?
np.arange(8).reshape(2,4) - np.arange(4).reshape(1,4)#广播机制,二行四列与一行四列
#np.arange(8).reshape(2,4)与np.arange(4).reshape(4,1)运算吗?
#不能,不符合广播条件
练习3
a = np.arange(16).reshape(4,4)
a[:,2]#第三列
a[:,0:3]#一至三列
a[:,(0,2)]#神奇索引,一三列
a[:,1::2]#二四列
a[:,(1,3)]#神奇索引,二四列
# a[(1,1),(0,3)] = 0#神奇索引,先取1行,然后0列;再1行,3列
a[a<10]
b = a[a<10]
print('第三列\n' + str(a[:,2]))
print('第1-3列\n'+str(a[:,0:3]))
print('第2,4列\n'+str(a[:,(1,3)]))
a[(1,1),(0,3)] = 0#神奇索引,先取1行,然后0列;再1行,3列
print('将47变成0\n'+str(a))
print('滤出小于5的\n'+str(b))
练习4
# np.loadtxt??
score_data = np.loadtxt("D:\\Download\\scores.csv",delimiter=",",skiprows=1,encoding='gb18030')
# print(score_data.shape)
score_data[(score_data>60)&(score_data<80)]
score_data[(score_data>80)&(score_data<90)]
score_data[score_data>90]