[编辑]根据回答中的评论,这个问题可能与操作系统有关。我在Windows10上。我有Python3.7.1,我使用Anaconda/Spyder
我遵循this和this主题,试图在保存之前最大化绘图生成的图像。在我的代码中,有效的是spyder figure viewer的绘图确实最大化了。但是,当文件保存到图像中时,图像不会最大化
我怎样才能修好它
我的代码如下:
import matplotlib as mpl
mpl.use('TkAgg') # With this line on: it returns me error. Without: image don't save as it has been shown in plot from spyder.
from datetime import datetime
import constants
import numpy as np
from numpy import *
from shutil import copyfile
from matplotlib.pyplot import *
mpl.rcParams['text.usetex'] = True
mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}']
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import matplotlib.cbook as cbook
import matplotlib.gridspec as gridspec
plt.rcParams['lines.linewidth'] = 3
plt.rcParams.update({'font.size': 60})
plt.rc('axes', labelsize=80)
plt.rc('xtick', labelsize=80)
plt.rc('ytick', labelsize=60)
rcParams["savefig.jpeg_quality"] = 40
dpi_value = 100
mpl.rcParams["savefig.jpeg_quality"] = dpi_value
plt.rc('axes', labelsize=60)
plt.rc('xtick', labelsize=60)
plt.rc('ytick', labelsize=60)
def plot_surface(zValues,xValues,yValues,title,xLabel,yLabel,titleSave,xlog=True,ylog=True,zlog=True):
# This function plots a 2D colormap.
# We set the grid of temperatures
X,Y =np.meshgrid(xValues,yValues)
zValues=np.transpose(np.asarray(zValues))
# We need to transpose because x values= column, y values = line given doc
# We now do the plots of kopt-1
fig1,ax1=plt.subplots()
if zlog==True:
pcm1=ax1.pcolor(X,Y,zValues,
cmap='rainbow',
edgecolors='black',
norm=colors.LogNorm(vmin=zValues.min(), vmax=zValues.max()))
else:
pcm1=ax1.pcolor(X,Y,zValues,
cmap='rainbow',
edgecolors='black',
norm=colors.Normalize(vmin=zValues.min(),vmax=zValues.max()))
if xlog==True:
ax1.set_xscale('log', basex=10)
if ylog==True:
ax1.set_yscale('log', basey=10)
ax1.set_title(title)
ax1.set_ylabel(yLabel)
ax1.set_xlabel(xLabel)
plt.colorbar(pcm1,extend='max')
figManager = plt.get_current_fig_manager()
figManager.full_screen_toggle()
# the solution here
plt.tight_layout()
plt.show()
# if(constants.save_plot_calculation_fct_parameter==True):
dpi_value=100
fig1.savefig(titleSave+".jpg",format='jpg',dpi=dpi_value,bbox_inches='tight')
x=np.arange(0,40)
y=np.arange(0,40)
z=np.random.rand(len(x),len(y))
plot_surface(z,x,y,"AA","BB","CC","name",zlog=False)
plt.show()
spyder中图中的渲染:
从保存的图像中:
[编辑]
我复制粘贴了下面答案中的代码,显示仍然不同。spyder的“图形”窗口:
保存在我的计算机上的图像:
[新编辑]:我根据下面的答案列出了所有有效的后端。它们是:
valid backends: ['agg', 'nbagg', 'pdf', 'pgf', 'ps', 'qt5agg', 'svg', 'template', 'webagg']
唯一可以在spyder中显示图形的是qt5agg。而这张图片并没有按照说明正确保存
解决方法是在
plt.show
之前添加plt.tight_layout()
运行下面的代码(注意,在我的mac上,我必须使用
figManager.full_screen_toggle()
而不是figManager.window.showMaximized()
)保存的图像将与弹出的图形相同
更新
字体大小之间的差异似乎是由您使用的
matplotlib backend
造成的。基于this post,可能尝试其他后端将解决此问题。例如,在我的mac上,如果我使用TkAgg
后端弹出屏幕中的图形与保存的图形不同。为了知道机器上有哪些可用的
matplotlib backend
,您可以使用all_backends
是您可以尝试的所有可用backend
的列表更新2
基于this wonderful post,受支持的后端与有效后端不同。为了找到所有可以使用的有效后端,我修改了那篇文章中的脚本
运行此脚本时,打印出的
valid backends
中的后端是可以应用的后端。对于支持但无效的后端,也将打印出它们无效的原因。例如,在我的Mac上,尽管wxcairo
是受支持的后端,但它无效,因为No module named 'wx'
通过在PC上运行脚本找到所有有效的后端后,您可以逐个尝试,也许其中一个将生成所需的输出图形
相关问题 更多 >
编程相关推荐