我使用以下代碼在 for 回圈中繪制了 3 個圖。但是我創建的第一個圖有 3 個顏色條,第二個有 2 個,第一個有 1 個。所以看起來前面的圖在當前圖上添加了一個顏色條。我怎樣才能避免這種情況?
for f in files:
#print(f)
roi_signals = pd.read_csv(f, sep='\t')
fig = sns.heatmap(roi_signals)
fig_name = f.replace('.txt', '.png')
plt.savefig(fig_name)
uj5u.com熱心網友回復:
默認情況下,sns.heatmap在現有 Axes 上繪圖并為顏色條分配空間:
如果引數沒有提供,這會將熱圖繪制到當前活動的 Axes 中
ax。此軸空間的一部分將被占用并用于繪制顏色圖,除非cbar為 False 或提供單獨的軸cbar_ax。
最簡單的解決方案是每次迭代清除圖形plt.clf:
for f in files:
roi_signals = pd.read_csv(f, sep='\t')
sns.heatmap(roi_signals)
plt.savefig(f.replace('.txt', '.png')
plt.clf() # clear figure before next iteration
或者指定cbar_ax覆寫上一次迭代的顏色條:
fig = plt.figure()
for i, f in enumerate(files):
roi_signals = pd.read_csv(f, sep='\t')
cbar_ax = fig.axes[-1] if i else None # retrieve previous cbar_ax (if exists)
sns.heatmap(roi_signals, cbar_ax=cbar_ax)
plt.savefig(f.replace('.txt', '.png')
或者只是在每次迭代中創建一個新圖形,但對于多次迭代不建議這樣做:
for f in files:
roi_signals = pd.read_csv(f, sep='\t')
fig = plt.figure() # create new figure each iteration
sns.heatmap(roi_signals)
plt.savefig(f.replace('.txt', '.png')
uj5u.com熱心網友回復:
我只是用這個修復了它:
import matlabplot.pyplot as plt
import seaborn as sns
import pandas as pd
for f in files:
#print(f)
roi_signals = pd.read_csv(f, sep='\t')
fig, ax = plt.subplots()
ax = sns.heatmap(roi_signals)
fig_name = f.replace('.txt', '.png')
plt.savefig(fig_name)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/451528.html
標籤:Python matplotlib 海运 彩条
下一篇:將控制臺輸出列印到文本檔案
