文章原稿备份-数据库内核
立即下载
资源介绍:
文章原稿备份-数据库内核
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D # 导入3D绘图工具
# 设置全局字体为SimHei
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
# 创建一个新的画布
fig = plt.figure()
# 在新画布上创建一个3D子图
ax = fig.add_subplot(111, projection='3d')
# 显示边框
ax.axis('on')
########################################################################## 图样设置
##############关系代数及其等价公式--3.3. 关系代数的空间几何表示##############
# 设置 x 轴、y 轴和 z 轴的标签
ax.set_xlabel('name')
ax.set_ylabel('age')
ax.set_zlabel('major')
# 创建映射字典
names = ['小明', '小王', '小张', '小李', '小刘'] # x轴坐标
majors = ['计算机', '体育', '美术', '汉语'] # z轴坐标
names_sorted = sorted(names)
majors_sorted = sorted(majors)
name_to_num = {name: num for num, name in enumerate(names_sorted)}
major_to_num = {major: num for num, major in enumerate(majors_sorted)}
# 设置x轴的刻度和标签
ax.set_xticks(range(len(name_to_num)))
ax.set_xticklabels(sorted(list(name_to_num.keys()))) # 使用排序后的名字作为标签
# 设置z轴的刻度和标签
ax.set_zticks(range(len(major_to_num)))
ax.set_zticklabels(sorted(list(major_to_num.keys()))) # 使用排序后的专业作为标签
########################## End ############################
########################################################################## 数据设置
# #############关系代数及其等价公式--3.3. 关系代数的空间几何表示###############
# # 使用 scatter() 方法来绘制3D空间中的点
# ax.scatter(name_to_num['小明'], 25, major_to_num['计算机'], color='red', label='小明') # 'color'设置点的颜色
# ax.scatter(name_to_num['小王'], 21, major_to_num['体育'], color='blue', label='小王') # 'color'设置点的颜色
# ax.scatter(name_to_num['小张'], 21, major_to_num['体育'], color='yellow', label='小张') # 'color'设置点的颜色
# # 绘制一条从 (3,0,2) (3,25,2) 的直线
# ax.plot([3, 3], [0, 25], [2, 2], 'r-', label='小李')
# # 定义网格数据,这里我们假设y和z的范围分别为[0, 25]和[0, 4]
# yy, zz = np.meshgrid(np.linspace(0, 25, 10), np.linspace(0, 4, 10))
# xx = np.zeros_like(yy) # x坐标始终为0
# # 绘制平面
# ax.plot_surface(xx, yy, zz, alpha=0.5, color='cyan', label='小刘')
# ########################## End ############################
# #############关系代数及其等价公式--3.4.1. 选择运算例1###############
# # 定义网格数据,这里我们假设y和z的范围分别为[0, 25]和[0, 4]
# xx, zz = np.meshgrid(np.linspace(0, 4, 10), np.linspace(0, 4, 10))
# yy = 21*np.ones_like(xx) # y坐标始终为0
# # 绘制age=21平面
# ax.plot_surface(xx, yy, zz, alpha=0.5, color='red', label='age=21')
# ########################## End ############################
# #############关系代数及其等价公式--3.4.1. 选择运算例2###############
# # 定义网格数据,这里我们假设y和z的范围分别为[0, 25]和[0, 4]
# xx, yy = np.meshgrid(np.linspace(0, 4, 10), np.linspace(0, 23, 10))
# zz = np.zeros_like(xx) # z坐标始终为0
# # 绘制age=21平面
# ax.plot_surface(xx, yy, zz, alpha=0.5, color='red', label='age<23 and major=体育')
# ########################## End ############################
#############关系代数及其等价公式--3.3. 关系代数的空间几何表示###############
# 使用 scatter() 方法来绘制3D空间中的点
ax.scatter(name_to_num['小明'], 25, major_to_num['计算机'], color='red', label='小明') # 'color'设置点的颜色
ax.scatter(name_to_num['小王'], 21, major_to_num['体育'], color='blue', label='小王') # 'color'设置点的颜色
ax.scatter(name_to_num['小张'], 21, major_to_num['体育'], color='yellow', label='小张') # 'color'设置点的颜色
ax.scatter(name_to_num['小李'], 24, major_to_num['美术'], color='black', label='小李') # 'color'设置点的颜色
ax.scatter(name_to_num['小刘'], 22, major_to_num['汉语'], color='gray', label='小刘') # 'color'设置点的颜色
########################## End ############################
########################################################################## 数绘图
# 如果需要显示图例
ax.legend()
# 显示图形
plt.show()