#功图批量绘制 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-04-07 21:30:53 浏览: 10
根据你提供的代码,第一张图无边框可能是因为第一次调用 plt.savefig() 函数时,没有设置边框。可以将设置边框的代码放在 for 循环之前,这样每次调用 plt.savefig() 函数时都会有边框:
```python
plt.figure(figsize=(4, 2), dpi=50, frameon=False)
ax = plt.axes([0, 0, 1, 1])
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['bottom'].set_visible(False)
grey = plt.get_cmap('Greys')
seismic = plt.get_cmap('bwr')
datapath = "G:/功图excel/0"
conds = os.listdir(datapath)
for cond in conds:
# ...
```
相关问题
#功图批量绘制 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,以上代码画出来的示功图怎么感觉叠加起来了
根据您提供的代码,我猜测您的问题可能是每次迭代时没有清空绘图区域,导致新的图形叠加在之前的图形上。您可以在每次迭代之前调用 plt.clf() 方法,这将清除当前绘图区域中的所有内容,以便您可以从头开始绘制新的图形。修改后的代码如下:
```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)
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])
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.clf() # 清空绘图区域
n = n + 1
```
希望这可以解决您的问题。
代码解释from PIL import Image import matplotlib import pandas as pd import matplotlib.pyplot as plt from wordcloud import WordCloud import seaborn as sns import numpy as np from pyecharts import options as opts sns.set(font="Kaiti", style="ticks", font_scale=1.4) matplotlib.rcParams['axes.unicode_minus'] = False df = pd.read_excel('战狼2-观看后=清洗后的数据(1).xlsx') img = Image.open('zhanlang.jpg') mask = np.array(img) column_name = '评论内容' text_data = ' '.join(df[column_name].dropna().astype(str).tolist()) print(text_data) wordcloud = WordCloud(font_path="msyh.ttc",mask=mask, width=800, height=400, background_color='white').generate(text_data) wordcloud.generate(text_data) plt.figure(figsize=(10, 5)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show() wordcloud.to_file("1_词云图.png")
这段代码是用来生成一张词云图。首先导入了需要的库,包括PIL用于处理图片,matplotlib用于绘图,pandas用于数据处理,seaborn用于设置绘图样式,numpy用于处理数组,以及pyecharts和wordcloud库。然后读取了一个Excel文件中的数据,并选择了一个列作为评论内容。接下来将评论内容转换为字符串,并生成词云图。最后通过matplotlib绘制并显示词云图,并保存为一张图片。