题目一:2019年内地电影票房排行榜的条形图
编写程序。根据实例1的要求,采用面向对象和面向函数两种方式绘制一个展示2019年内地电影票房排行榜的条形图。
面向对象方式编程:
实验代码:
#采用面向对象方式绘制一个展示2019年内地电影票房排行榜的条形图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams["axes.unicode_minus"] = False
labels = ["哪吒之魔童降世", "流浪地球", "复仇者联盟4:终局之战",
"疯狂外星人", "飞驰人生", "烈火英雄", "蜘蛛侠:英雄远征",
"速度与激情:特别行动", "扫毒2天地对决", "大黄蜂", "惊奇队长",
"比悲伤更悲伤的故事", "哥斯拉2:怪兽之王", "阿丽塔:战斗天使",
"银河补习班"]
bar_width = [48.57, 46.18, 42.05, 21.83, 17.03, 16.70, 14.01, 13.84,
12.85, 11.38, 10.25, 9.46, 9.27, 8.88, 8.64]
y_data = range(len(labels))
#面向对象
fig = plt.figure()
ax = fig.add_subplot(111)
ax.barh(y_data, bar_width, height = 0.2, color = 'orange')
ax.set_xlabel("总票房(亿元)")
ax.set_ylabel("电影名称")
ax.set_yticks(y_data)
ax.set_yticklabels(labels)
plt.show()
实验结果:
面向函数方式编程:
实验代码:
#采用面向函数方式绘制一个展示2019年内地电影票房排行榜的条形图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams["axes.unicode_minus"] = False
labels = ["哪吒之魔童降世", "流浪地球", "复仇者联盟4:终局之战",
"疯狂外星人", "飞驰人生", "烈火英雄", "蜘蛛侠:英雄远征",
"速度与激情:特别行动", "扫毒2天地对决", "大黄蜂", "惊奇队长",
"比悲伤更悲伤的故事", "哥斯拉2:怪兽之王", "阿丽塔:战斗天使",
"银河补习班"]
bar_width = [48.57, 46.18, 42.05, 21.83, 17.03, 16.70, 14.01, 13.84,
12.85, 11.38, 10.25, 9.46, 9.27, 8.88, 8.64]
y_data = range(len(labels))
#面向函数
plt.barh(y_data, bar_width, height = 0.2, color = 'orange')
plt.xlabel("总票房(亿元)")
plt.ylabel("电影名称")
plt.yticks(y_data, labels)
plt.show()
实验结果:
题目二:绘制阻尼指数衰减图
编写程序。绘制阻尼指数衰减图,并添加题目、坐标轴标签、注释文本,形成下图样式的图。
实验代码:
#绘制阻尼指数衰减图,并添加题目、坐标轴标签、注释文本,形成下图样式的图。
import numpy as np
import matplotlib.pyplot as plt
font = {'family': 'serif',
'color': 'darkred',
'weight': 'normal',
'size': 16,
}
x = np.linspace(0.0, 5.0, 100)
y = np.cos(2*np.pi*x) * np.exp(-x)
plt.plot(x, y, 'k')
plt.title('Damped exponential decay', fontdict=font)
plt.text(2, 0.65, r'$\cos(2 \pi t) \exp(-t)$', fontdict=font)
plt.xlabel('time (s)', fontdict=font)
plt.ylabel('voltage (mV)', fontdict=font)
plt.show()
实验结果:
题目三:支付宝月账单报告的饼图
编写程序。根据实例2的要求,绘制一个展示支付宝月账单报告的饼图。
实验代码:
#绘制一个展示支付宝月账单报告的饼图
# 导入模块
import numpy as np
import matplotlib.pyplot as plt
# 设置中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 外侧说明文字
kinds = ['购物', '人情往来', '餐饮美食', '通信物流', '生活日用', '交通出行', '休闲娱乐', '其他']
# 导入原有数据
money_scale = [800 / 3000, 100 / 3000, 1000 / 3000, 300 / 3000,
200 / 3000, 200 / 3000, 200 / 3000, 200 / 3000]
# 爆炸程度
dev_position = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
# 创建画布并添加绘画区域:
fig = plt.figure() # 创建代表画布的Figure类的对象fig
ax = fig.add_subplot(111) # 在画布fig上添加坐标系风格的绘画区域ax
# 绘制图表
ax.pie(money_scale, autopct='%.1f%%', shadow=True,
explode=dev_position, startangle=90)
# 添加标题
plt.title('支付宝月账单报告')
plt.legend(kinds, loc='upper right', bbox_to_anchor=[1.3, 1.1])
# 图像展示
plt.show()
实验结果:
题目四:汽车速度与制动距离的关系(添加网格)
编写程序。根据实例3的要求,汽车速度与制动距离的关系(添加网格)
实验代码:
#汽车速度与制动距离的关系(添加网格)
# 导入模块
import numpy as np
import matplotlib.pyplot as plt
# 设置中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 准备 x 轴和 y 轴的数据
x_speed = np.arange(10, 210, 10)
y_distance = np.array([0.5, 2.0, 4.4, 7.9, 12.3,
17.7, 24.1, 31.5, 39.9, 49.2,
59.5, 70.8, 83.1, 96.4, 110.7,
126.0, 142.2, 159.4, 177.6, 196.8])
# 绘制气泡图
area = np.linspace(20, 300, 20)
# 创建画布并添加绘画区域:(面向对象)
fig = plt.figure()
ax = fig.add_subplot(111)
# 绘制图表
ax.scatter(x_speed, y_distance, s=area)
# 设置x轴、y轴的标签、刻度标签
plt.xlabel('速度(km/h)')
plt.ylabel('制动距离(m)')
plt.xticks(x_speed)
# 显示网格
plt.grid(which='both', linewidth=0.3)
#由于版本问题,有的需要填写
#plt.grid(b=True,linewidth=0.3)
# 展示图表
plt.show()
实验结果:
题目五:绘制雷达图
编写程序。根据第2章实例9的要求,将标题一行的数据作为雷达图的标签,将其余行的数据作为雷达图的数据,绘制雷达图。
实验代码:
#将标题一行的数据作为雷达图的标签,将其余行的数据作为雷达图的数据
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
dim_num = 6
data = np.array([[0.40,0.32,0.35,0.30,0.30,0.88],
[0.85,0.35,0.30,0.40,0.40,0.30],
[0.43,0.89,0.30,0.28,0.22,0.30],
[0.30,0.25,0.48,0.85,0.45,0.40],
[0.20,0.38,0.87,0.45,0.32,0.28],
[0.34,0.31,0.38,0.40,0.92,0.28]])
angles = np.linspace(0,2 * np.pi, dim_num, endpoint=False)
angles = np.concatenate((angles, [angles[0]]))
data = np.concatenate((data,[data[0]]))
# 维度标签
radar_labels = ['研究型(I)','艺术型(A)','社会型(S)',
'企业型(E)','传统型 (C)','现实型 (R)']
radar_labels = np.concatenate((radar_labels,[radar_labels[0]]))
# 绘制雷达图
plt.polar(angles, data)
# 设置极坐标的标签
plt.thetagrids(angles * 180/np.pi,labels=radar_labels)
# 填充多边形
plt.fill(angles,data,alpha=0.25)
plt.show()