数据可视化实验---图表辅助元素的定制

题目一: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()

实验结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值