#功图批量绘制 import os import numpy as np import pandas as pd from PIL import Image from matplotlib import pyplot as plt plt.figure(figsize=(4, 2), dpi=50, frameon=False) ax = plt.axes([0, 0, 1, 1]) grey = plt.get_cmap('Greys') seismic = plt.get_cmap('bwr') datapath = "G:/功图excel/0" conds = os.listdir(datapath) for cond in conds: data = pd.read_csv("G:/功图excel/0/" + cond) os.mkdir(r"G:/功图/0/" + cond[:-4]) # print(data) # 首先将pandas读取的数据转化为array data = np.array(data) # 然后转化为list形式 data = data.tolist() # print(data) n = 0 for i in data: if np.isnan(i).any(): # 检查数据是否包含 NaN 值 continue # 如果包含,则跳过该迭代 WY = i[0:200] ZH = i[200:400] # print(len(WY),len(ZH)) plt.plot(WY[0: 100], ZH[0: 100], color=seismic(5 / 5.0), lw=3) plt.plot(WY[100: 200], ZH[100: 200], color=seismic(0 / 5.0), lw=3) plt.xticks([]) plt.yticks([]) ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) ax.spines['left'].set_visible(False) ax.spines['bottom'].set_visible(False) Y_ALL = [] Y_ALL.extend(list(map(float, ZH))) Y_MAX, Y_MIN = np.max(Y_ALL), np.min(Y_ALL) ax.set_ylim(np.min([0, Y_MIN - (Y_MAX - Y_MIN) * 0.1]), Y_MAX + (Y_MAX - Y_MIN) * 0.1) plt.savefig("G:/功图/0/" + cond[:-4] + '/' + str(n), dpi=50) # plt.savefig(newpath + "GT/" + cond + "/" + data['IMGNAME'][i], dpi=50) plt.clf() # plt.show() n = n + 1,为什么这段代码画出来的图片从第二张开始就有边框

时间: 2024-03-17 19:40:31 浏览: 16
您好,这段代码画出来的图片从第二张开始就有边框的原因是您使用了 `plt.axes([0, 0, 1, 1])` 来创建一个轴对象,而在循环中没有关闭或清除该轴对象。因此,第一张图绘制在了这个轴对象上,而从第二张图开始,每次绘制都会在该轴对象上叠加一个新的轴对象,因此就出现了边框。 为了解决这个问题,您可以将 `plt.axes([0, 0, 1, 1])` 移到 for 循环内部,并且在每次循环结束时使用 `plt.close()` 或 `plt.cla()` 来关闭或清除轴对象。例如: ```python import os import numpy as np import pandas as pd from PIL import Image from matplotlib import pyplot as plt plt.figure(figsize=(4, 2), dpi=50, frameon=False) grey = plt.get_cmap('Greys') seismic = plt.get_cmap('bwr') datapath = "G:/功图excel/0" conds = os.listdir(datapath) for cond in conds: data = pd.read_csv("G:/功图excel/0/" + cond) os.mkdir(r"G:/功图/0/" + cond[:-4]) # 在循环内部创建轴对象 ax = plt.axes([0, 0, 1, 1]) data = np.array(data) data = data.tolist() n = 0 for i in data: if np.isnan(i).any(): continue WY = i[0:200] ZH = i[200:400] plt.plot(WY[0: 100], ZH[0: 100], color=seismic(5 / 5.0), lw=3) plt.plot(WY[100: 200], ZH[100: 200], color=seismic(0 / 5.0), lw=3) plt.xticks([]) plt.yticks([]) ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) ax.spines['left'].set_visible(False) ax.spines['bottom'].set_visible(False) Y_ALL = [] Y_ALL.extend(list(map(float, ZH))) Y_MAX, Y_MIN = np.max(Y_ALL), np.min(Y_ALL) ax.set_ylim(np.min([0, Y_MIN - (Y_MAX - Y_MIN) * 0.1]), Y_MAX + (Y_MAX - Y_MIN) * 0.1) plt.savefig("G:/功图/0/" + cond[:-4] + '/' + str(n), dpi=50) # 关闭或清除轴对象 plt.close() n = n + 1 ``` 在这个代码中,我们将 `plt.axes([0, 0, 1, 1])` 移到了 for 循环内部,并且在每次循环结束时使用 `plt.close()` 来关闭轴对象。这样,每次循环都会创建一个新的、独立的轴对象,从而避免了边框的问题。

相关推荐

import numpy as np import pandas as pd import matplotlib.pyplot as plt import PIL import torch from torchvision import transforms import torchvision #调用已经训练好的FCN语义分割网络 model = torchvision.models.segmentation.fcn_resnet101(pretrained=True) model.eval() #读取照片 image=PIL.Image.open('1234.jpg') #照片进行预处理 image_transf=transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean=[0.485,0.456,0.406], std=[0.229,0.224,0.225]) ] ) image_tensor=image_transf(image).unsqueeze(0) output=model(image_tensor)['out'] output.shape #读取图片,进行分割,总共21个通道,因为在21个数据集上训练 #转化为2维图像 outputarg=torch.argmax(output.squeeze(),dim=0).numpy() outputarg def decode_seqmaps(image,label_colors,nc=21): r=np.zeros_like(image).astype(np.uint8) g=np.zeros_like(image).astype(np.uint8) b=np.zeros_like(image).astype(np.uint8) for cla in range(0,nc): idx = image == cla r[idx] = label_colors[cla,0] g[idx] = label_colors[cla,1] b[idx] = label_colors[cla,2] rgbimage= np.stack([r,g,b],axis=2) return rgbimage import os os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" label_colors =np.array([(0,0,0), #0=background (128,0,0),(0,128,0),(128,128,0),(0,0,128), #1=airplane,2=bicycle,3=bird,4=boat (128,0,128),(0,128,128),(128,128,128),(64,0,0), #6=bus,7=car,8=cat,9=chair (192,0,0),(64,128,0),(192,128,0),(64,0,128), #10=cow,11=dining table,12=dog,13=horse (192,0,128),(64,128,128),(192,128,128),(0,64,0), #14=motorbike,15=person,16=potted plant,17=sheep (128,64,0),(0,192,0),(128,192,0),(0,64,128) #18=sofa,19=train,20=tv/monitor ]) outputrgb=decode_seqmaps(outputarg,label_colors) plt.figure(figsize=(20,8)) plt.subplot(1,2,1) plt.imshow(image) plt.axis('off') plt.subplot(1,2,2) plt.imshow(outputrgb) plt.axis('off') plt.subplots_adjust(wspace=0.05) plt.show() 使用了哪些深度学习的模型和方法,该代码的实验目的是什么

import streamlit as st import pandas as pd import numpy as np import matplotlib.pyplot as plt import altair as alt from PIL import Image # st.header - 显示主标题 st.header('学习streamlit模块')#显示主标题 # st.subheader - 显示副标题 st.subheader('副标题用法')#显示副标题 # st.text - 显示文本 st.text('显示定宽文本') # st.markdown - 显示markdown文本 st.markdown('Streamlit <html>', True) st.markdown('Streamlit <html>', False) # st.code - 显示代码块 code = '''def hello(): print("Hello, Streamlit!")''' st.code(code, language='python') st.code(code, language='java') # st.write - 通用显示方法 st.write("2222") st.write(1234) st.write(pd.DataFrame({ '名字': [1, 2, 3, 4], '电话': [10, 20, 30, 50], })) # json a = { 'foo': 'bar', 'baz': 'boz', 'stuff': [ 'stuff 1', 'stuff 2', 'stuff 3', 'stuff 5', ], } st.json(a) st.write(a["stuff"][1]) # st.pyplot - 显示pyplot图表 arr = np.random.normal(1, 1, size=100) plt.hist(arr, bins=50) st.set_option('deprecation.showPyplotGlobalUse', False) st.pyplot() # st.altair - 显示altair图表 df = pd.DataFrame(np.random.randn(200, 3), columns=['a', 'b', 'c']) c = alt.Chart(df).mark_circle().encode(x='a', y='b', size='c', color='c') st.altair_chart(c) # st.vega_lite_chart - 显示Vega-Lite图表 df = pd.DataFrame(np.random.randn(200, 3), columns=['a', 'b', 'c']) st.vega_lite_chart(df, { 'mark': 'circle', 'encoding': {'x': {'field': 'a', 'type': 'quantitative'}, 'y': {'field': 'b', 'type': 'quantitative'}, 'size': {'field': 'c', 'type': 'quantitative'}, 'color': {'field': 'c', 'type': 'quantitative'}, }, }) # st.line_chart - 显示折线图 chart_data = pd.DataFrame(np.random.randn(20, 3), columns=['a', 'b', 'c']) st.line_chart(chart_data) # st.area_chart - 显示区域图 chart_data = pd.DataFrame(np.random.randn(20, 3), columns=['a', 'b', 'c']) st.area_chart(chart_data) # st.map - 显示地图 df = pd.DataFrame(np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4], columns=['lat', 'lon']) st.map(df) 请详细解释以上代码

最新推荐

recommend-type

node-v0.8.10-sunos-x64.tar.gz

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

【课程设计】实现的金融风控贷款违约预测python源码.zip

【课程设计】实现的金融风控贷款违约预测python源码.zip
recommend-type

node-v0.10.27-x86.msi

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

课设毕设基于SSM的高校二手交易平台-LW+PPT+源码可运行.zip

课设毕设基于SSM的高校二手交易平台--LW+PPT+源码可运行
recommend-type

c++,冒险游戏,可供学习

冒险游戏,可供学习
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。