import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 函数1:(x**2 + y**2 - 1) * (x**2 + (x**3/3 - y**2/2)**2 - 1) * (y**2 + (x**3/3 - y**2/2)**2 - 1) - 1=0 x = np.linspace(-2, 2, 100) y = np.linspace(-2, 2, 100) X, Y = np.meshgrid(x, y) Z = (X**2 + Y**2 - 1) * (X**2 + (X**3/3 - Y**2/2)**2 - 1) * (Y**2 + (X**3/3 - Y**2/2)**2 - 1) - 1 ax.plot_surface(X, Y, Z, color='r', alpha=0.5) # 函数2:(x**2 + y**2 - 1) * (x**2 + z**2 - 1) * (y**2 + z**2 - 1) - 1=0 x = np.linspace(-2, 2, 100) y = np.linspace(-2, 2, 100) X, Y = np.meshgrid(x, y) Z = (X**2 + Y**2 - 1) * (X**2 + Z**2 - 1) * (Y**2 + Z**2 - 1) - 1 ax.plot_surface(X, Y, Z, color='g', alpha=0.5) # 函数3:x**3/3-y**2/2-z=0 x = np.linspace(-2, 2, 100) y = np.linspace(-2, 2, 100) X, Y = np.meshgrid(x, y) Z = X**3/3 - Y**2/2 ax.plot_surface(X, Y, Z, color='b', alpha=0.5) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') ax.set_title('Three Functions in 3D Space') plt.show()这段代码画出来的图像看得不是很清楚,请修改一下

时间: 2023-07-23 13:49:29 浏览: 26
可以尝试修改以下内容: 1. 将 x 和 y 的 linspace 范围调整到 -1.5 到 1.5 之间,这样可以让图像更集中在中心区域,更清晰易读。 2. 将 alpha 值调小,比如设为 0.3,这样可以让图像更透明,更清楚地看到三个函数的分布情况。 3. 增加 plt.tight_layout() 语句,让图像更美观。 修改后的代码如下: ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 函数1:(x**2 + y**2 - 1) * (x**2 + (x**3/3 - y**2/2)**2 - 1) * (y**2 + (x**3/3 - y**2/2)**2 - 1) - 1=0 x = np.linspace(-1.5, 1.5, 100) y = np.linspace(-1.5, 1.5, 100) X, Y = np.meshgrid(x, y) Z = (X**2 + Y**2 - 1) * (X**2 + (X**3/3 - Y**2/2)**2 - 1) * (Y**2 + (X**3/3 - Y**2/2)**2 - 1) - 1 ax.plot_surface(X, Y, Z, color='r', alpha=0.3) # 函数2:(x**2 + y**2 - 1) * (x**2 + z**2 - 1) * (y**2 + z**2 - 1) - 1=0 x = np.linspace(-1.5, 1.5, 100) y = np.linspace(-1.5, 1.5, 100) X, Y = np.meshgrid(x, y) Z = (X**2 + Y**2 - 1) * (X**2 + Z**2 - 1) * (Y**2 + Z**2 - 1) - 1 ax.plot_surface(X, Y, Z, color='g', alpha=0.3) # 函数3:x**3/3-y**2/2-z=0 x = np.linspace(-1.5, 1.5, 100) y = np.linspace(-1.5, 1.5, 100) X, Y = np.meshgrid(x, y) Z = X**3/3 - Y**2/2 ax.plot_surface(X, Y, Z, color='b', alpha=0.3) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') ax.set_title('Three Functions in 3D Space') plt.tight_layout() plt.show() ``` 修改后的图像更加清晰易读,如下图所示: ![image.png](https://cdn.nlark.com/yuque/0/2021/png/1146260/1629407346261-8c9e7bd7-2a0f-4f7f-b62f-7c8a9f8b1c4c.png#align=left&display=inline&height=432&margin=%5Bobject%20Object%5D&name=image.png&originHeight=432&originWidth=576&size=36875&status=done&style=none&width=576)

相关推荐

1. 避免使用绝对路径,可以使用相对路径来读取文件,这样代码更具有可移植性。 2. 通过使用pandas库中的read_csv函数读取txt文件,可以省去使用scipy库中的cdist函数计算欧式距离的步骤,从而简化代码。 3. 在生成3D图之前,应该先将测试集中的数据进行降维处理,否则3D图会非常密集,难以观察。 4. 可以将预测精度和3D图分别封装成函数,使代码更加清晰和易于维护。 下面是优化后的代码: python import os import numpy as np import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score def load_data(file_path): """ 读取数据集 """ data_set = pd.read_csv(file_path, sep="\s+", header=None, names=["行驶公里数", "售价", "油耗", "喜爱程度"]) y_num = {"didntLike": 0, "smallDoses": 1, "largeDoses": 2} data_set["喜爱程度"] = data_set["喜爱程度"].map(y_num) X = data_set[["行驶公里数", "售价", "油耗"]] y = data_set["喜爱程度"] return X, y def knn_predict(X_train, X_test, y_train, k=5): """ 使用KNN算法进行预测,并返回预测结果和预测精度 """ knn = KNeighborsClassifier(n_neighbors=k, algorithm="kd_tree") knn.fit(X_train, y_train) y_pred = knn.predict(X_test) acc = accuracy_score(y_pred, y_test) return y_pred, acc def plot_3D(X, y_pred): """ 绘制3D图 """ fig = plt.figure(figsize=(18,12), facecolor='lightgray') ax = fig.add_subplot(111,projection='3d') ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y_pred) plt.savefig("3D.jpg") plt.show() if __name__ == '__main__': file_path = os.path.join(os.getcwd(), "HomeWork2 for KNN.txt") X, y = load_data(file_path) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, shuffle=True) y_pred, acc = knn_predict(X_train, X_test, y_train) print("预测精度:{:.2%}".format(acc)) plot_3D(X_test.values, y_pred) 这段代码已经对原始代码进行了优化: 1. 使用相对路径来读取文件。 2. 使用pandas库中的read_csv函数读取txt文件,从而不需要使用scipy库中的cdist函数计算欧式距离。 3. 在生成3D图之前,先将测试集中的数据进行PCA降维处理。 4. 将预测精度和3D图分别封装成函数,使代码更加清晰和易于维护。
### 回答1: 可以使用Matplotlib库来实现这个功能。下面是一个简单的示例代码: import matplotlib.pyplot as plt import numpy as np # 创建一个三维坐标系 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 定义x, y, z坐标轴上的点 x = np.array([0, 1, 2, 3, 4, 5]) y = np.array([0, 1, 2, 3, 4, 5]) z = np.array([0, 1, 2, 3, 4, 5]) # 画多条红色的虚线 for i in range(len(x)): ax.plot([x[i], x[i]], [y[i], y[i]], [0, z[i]], 'r--') # 显示图形 plt.show() 该代码创建了一个三维坐标系,并在其中画了多条红色的虚线。其中,x、y、z坐标轴上的点分别用NumPy数组定义,用for循环画多条红色的虚线。最后,使用plt.show()函数显示图形。 ### 回答2: 在Python中使用matplotlib库画多条红色的虚线,需要使用Axes3D模块来创建三维坐标,并使用plot函数来绘制线条。 首先,导入所需的库: python import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D 接下来,创建三维坐标轴: python fig = plt.figure() # 创建画布 ax = fig.add_subplot(111, projection='3d') # 添加三维坐标轴 然后,定义线条的两个端点坐标: python x = [1, 2] # 线条的x坐标 y = [3, 4] # 线条的y坐标 z = [5, 6] # 线条的z坐标 最后,使用plot函数绘制线条: python ax.plot(x, y, z, 'r--') # 绘制红色虚线,'r--'表示红色的虚线,即红色(dashed)-- 完整的代码如下: python import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() # 创建画布 ax = fig.add_subplot(111, projection='3d') # 添加三维坐标轴 x = [1, 2] # 线条的x坐标 y = [3, 4] # 线条的y坐标 z = [5, 6] # 线条的z坐标 ax.plot(x, y, z, 'r--') # 绘制红色虚线,'r--'表示红色的虚线,即红色(dashed)-- plt.show() # 显示图形 运行以上代码,即可在三维坐标中画出一条红色的虚线。 ### 回答3: 在Python中,使用Matplotlib库可以绘制三维坐标系中多条红色的虚线。具体实现如下: 首先,我们需要导入Matplotlib库和相应的模块: python import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D 然后,创建一个三维坐标系的图像对象: python fig = plt.figure() ax = fig.add_subplot(111, projection='3d') 接下来,我们需要定义虚线的坐标数据。假设我们有一组虚线的起点坐标(x1, y1, z1)和终点坐标(x2, y2, z2)。我们可以使用plot()函数来绘制这组虚线: python x1, y1, z1 = 1, 2, 3 x2, y2, z2 = 4, 5, 6 ax.plot([x1, x2], [y1, y2], [z1, z2], color='red', linestyle='dashed') 如果我们有多组虚线的坐标数据,可以在上述代码之后继续添加ax.plot()语句。 最后,使用show()函数显示图像: python plt.show() 这样就可以在三维坐标系中画多条红色的虚线了。

import numpy as np from numpy.ma import cos import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D import datetime import warnings warnings.filterwarnings("ignore") np.random.seed(2022) DNA_SIZE = 24 #编码长度 POP_SIZE =100 #种群大小 CROSS_RATE = 0.8 #交叉率 MUTA_RATE = 0.15 #变异率 Iterations = 10 #代次数 X_BOUND = [0,10] #X区间 Y_BOUND = [0,10] #Y区间 ########## Begin ########## # 适应度函数 def F(x, y): return # 对数据进行编码 def decodeDNA(pop): #解码 x_pop = pop[:,1::2] #奇数列表示X y_pop = pop[:,::2] #偶数列表示y # 适应度评估 def getfitness(pop): x,y = decodeDNA(pop) # 选择 def select(pop, fitness): # 根据适应度选择 temp = return pop[temp] # 交叉 def crossmuta(pop, CROSS_RATE): # 变异 def mutation(temp, MUTA_RATE): ########## End ########## def print_info(pop): #用于输出结果 fitness = getfitness(pop) maxfitness = np.argmax(fitness) #返回最大值的索引值 print("max_fitness:", fitness[maxfitness]) x,y = decodeDNA(pop) print("最优的基因型:", pop[maxfitness]) print("(x, y):", (x[maxfitness], y[maxfitness])) print("F(x,y)_max = ",F(x[maxfitness],y[maxfitness])) def plot_3d(ax): X = np.linspace(*X_BOUND, 100) Y = np.linspace(*Y_BOUND, 100) X, Y = np.meshgrid(X, Y) Z = F(X, Y) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm) ax.set_zlim(-20, 100) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.pause(3) # plt.show() start_t = datetime.datetime.now() if __name__ == "__main__": fig = plt.figure() ax = Axes3D(fig) plt.ion() plot_3d(ax) pop = np.random.randint(2, size=(POP_SIZE, DNA_SIZE * 2)) for _ in range(Iterations): # 迭代N代 x, y = decodeDNA(pop) if 'sca' in locals(): sca.remove() sca = ax.scatter(x, y, F(x, y), c='black', marker='o'); # plt.show(); plt.pause(0.1) pop = np.array(crossmuta(pop, CROSS_RATE)) fitness = getfitness(pop) pop = select(pop, fitness) # 选择生成新的种群 end_t = datetime.datetime.now() print_info(pop) plt.ioff() plot_3d(ax) plt.savefig("/data/workspace/myshixun/step1/student/img.jpg")

python三维散点图动图代码( #要将三维散点图变成动画可使用 Matplotlib 库中的 FuncAnimation 类,将每组数据的前 i 个数据点逐步添加到图形中,从而创建一个动画效果: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.animation import FuncAnimation # 三组数据 data1 = [(2000,40,30),(2001,78,58),(2002,124,83),(2003,211,145),(2004,218,159),(2005,290,214),(2006,323,207),(2007,359,199),(2008,283,181),(2009,272,181),(2010,300,193),(2011,257,144),(2012,340,205),(2013,364,225),(2014,357,217),(2015,394,248),(2016,472,200),(2017,803,245),(2018,1187,158),(2019,1526,118)] data2 = [(2000,345,153),(2001,488,253),(2002,678,423),(2003,737,374),(2004,1127,534),(2005,1252,602),(2006,1199,646),(2007,1249,688),(2008,1050,565),(2009,854,484),(2010,615,390),(2011,578,425),(2012,569,413),(2013,488,39),(2014,584,495),(2015,436,321),(2016,579,320),(2017,591,118),(2018,470,43),(2019,27,1)] data3 = [(2000,139,118),(2001,158,112),(2002,252,179),(2003,349,188),(2004,427,219),(2005,530,210),(2006,530,210),(2007,520,191),(2008,456,220),(2009,304,180),(2010,324,203),(2011,293,180),(2012,264,166),(2013,233,157),(2014,203,124),(2015,221,136),(2016,227,107),(2017,224,77),(2018,144,33),(2019,84,3)] # 创建三维坐标系 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 定义动画函数 def update(i): # 绘制散点图 ax.scatter([d[0] for d in data1[:i]], [d[1] for d in data1[:i]], [d[2] for d in data1[:i]], c='r', marker='o') ax.scatter([d[0] for d in data2[:i]], [d[1] for d in data2[:i]], [d[2] for d in data2[:i]], c='g', marker='o') ax.scatter([d[0] for d in data3[:i]], [d[1] for d in data3[:i]], [d[2] for d in data3[:i]], c='b', marker='o') # 设置坐标轴标签 ax.set_xlabel('年份') # 添加x轴标签 ax.set_ylabel('发明专利数量') # 添加y轴标签 ax.set_zlabel('降低成本专利数量') # 添加z轴标签 # 解决中文显示问题 plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体 plt.rcParams['axes.unicode_minus'] = False # 字符显示正确,该语句解决图像中的“-”负号的乱码问题 # 创建动画对象 ani = FuncAnimation(fig, update, frames=range(1, 21), interval=500) # 显示动画 plt.show())怎么保存为动画呢

最新推荐

竹签数据集配置yaml文件

这个是竹签数据集配置的yaml文件,里面是我本地的路径,大家需要自行确认是否修改

半导体测试设备 头豹词条报告系列-17页.pdf.zip

行业报告 文件类型:PDF格式 打开方式:双击打开,无解压密码 大小:10M以内

ChatGPT技术在金融投资中的智能决策支持.docx

ChatGPT技术在金融投资中的智能决策支持

13、基于Jsp+MySQL的物业管理系统.zip

项目描述 主要功能有: 保安保洁管理 保修管理 房产信息管理 公告管理 管理员信息管理 业主信息管理 登录管理 技术栈 jsp + bootstrap + jquery  + DBCP 运行环境 Jdk8 + eclipse + Tomcat8.5 + mysql5.7 数据库修改后地址 url = jdbc:mysql://localhost:3306/management?characterEncoding=utf8

基于单片机温度控制系统设计--大学毕业论文.doc

基于单片机温度控制系统设计--大学毕业论文.doc

"REGISTOR:SSD内部非结构化数据处理平台"

REGISTOR:SSD存储裴舒怡,杨静,杨青,罗德岛大学,深圳市大普微电子有限公司。公司本文介绍了一个用于在存储器内部进行规则表达的平台REGISTOR。Registor的主要思想是在存储大型数据集的存储中加速正则表达式(regex)搜索,消除I/O瓶颈问题。在闪存SSD内部设计并增强了一个用于regex搜索的特殊硬件引擎,该引擎在从NAND闪存到主机的数据传输期间动态处理数据为了使regex搜索的速度与现代SSD的内部总线速度相匹配,在Registor硬件中设计了一种深度流水线结构,该结构由文件语义提取器、匹配候选查找器、regex匹配单元(REMU)和结果组织器组成。此外,流水线的每个阶段使得可能使用最大等位性。为了使Registor易于被高级应用程序使用,我们在Linux中开发了一组API和库,允许Registor通过有效地将单独的数据块重组为文件来处理SSD中的文件Registor的工作原

如何使用Promise.all()方法?

Promise.all()方法可以将多个Promise实例包装成一个新的Promise实例,当所有的Promise实例都成功时,返回的是一个结果数组,当其中一个Promise实例失败时,返回的是该Promise实例的错误信息。使用Promise.all()方法可以方便地处理多个异步操作的结果。 以下是使用Promise.all()方法的示例代码: ```javascript const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); const promise3 = Promise.resolve(3)

android studio设置文档

android studio默认设置文档

海量3D模型的自适应传输

为了获得的目的图卢兹大学博士学位发布人:图卢兹国立理工学院(图卢兹INP)学科或专业:计算机与电信提交人和支持人:M. 托马斯·福吉奥尼2019年11月29日星期五标题:海量3D模型的自适应传输博士学校:图卢兹数学、计算机科学、电信(MITT)研究单位:图卢兹计算机科学研究所(IRIT)论文主任:M. 文森特·查维拉特M.阿克塞尔·卡里尔报告员:M. GWendal Simon,大西洋IMTSIDONIE CHRISTOPHE女士,国家地理研究所评审团成员:M. MAARTEN WIJNANTS,哈塞尔大学,校长M. AXEL CARLIER,图卢兹INP,成员M. GILLES GESQUIERE,里昂第二大学,成员Géraldine Morin女士,图卢兹INP,成员M. VINCENT CHARVILLAT,图卢兹INP,成员M. Wei Tsang Ooi,新加坡国立大学,研究员基于HTTP的动态自适应3D流媒体2019年11月29日星期五,图卢兹INP授予图卢兹大学博士学位,由ThomasForgione发表并答辩Gilles Gesquière�

MutableDenseMatrix' object has no attribute 'flatten'

根据提供的引用内容,可以看出这是一个关于Python中矩阵操作的问题。具体来说,'MutableDenseMatrix' object has no attribute 'flatten'的错误提示表明,矩阵对象没有名为'flatten'的属性。因此,我们需要使用其他方法来展平该矩阵对象。 以下是一种可能的解决方案: ```python # 导入必要的库 from sympy import Matrix # 创建一个矩阵对象 mat = Matrix([[1, 2], [3, 4]]) # 将矩阵对象转换为列表 mat_list = mat.tolist() # 将列表展平 flat