The*_*CAL 11 python matplotlib
考虑(假设代码运行没有错误):
import matplotlib.figure as matfig
ind = numpy.arange(N)
width = 0.50;
fig = matfig.Figure(figsize=(16.8, 8.0))
fig.subplots_adjust(left=0.06, right = 0.87)
ax1 = fig.add_subplot(111)
prev_val = None
fig.add_axes(ylabel = 'Percentage(%)',xlabel='Wafers',title=title,xticks=(ind+width/2.0,source_data_frame['WF_ID']))
fig.add_axes(ylim=(70,100))
for key,value in bar_data.items():
ax1.bar(ind,value, width,color='#40699C', bottom=prev_val)
if prev_val:
prev_val = [a+b for (a,b) in zip(prev_val,value)]
else:
prev_val=value
names= []
for i in range(0,len(col_data.columns)):
names.append(col_data.columns[i])
ax1.legend(names,bbox_to_anchor=(1.15, 1.02))
Run Code Online (Sandbox Code Playgroud)
我现在想保存我的身材fig.savefig(outputPath, dpi=300),但是我知道AttributeError: 'NoneType' object has no attribute 'print_figure',因为fig.canvas是无.子图应该在图形画布上,因此它不应该是None.我想我错过了一个关于matplot数字画布的关键概念.我如何更新fig.canvas以反映当前的图,所以我可以使用fig.savefig(outputPath, dpi=300)?谢谢!
tac*_*ell 14
plt.figure为你做的事情之一是为你争论后端,包括设置画布.mpl的体系结构的方式是Artist水平对象知道如何设置自己,确保一切都在相对于彼此的正确位置等,然后当被问及时,将它们自己绘制到画布上.因此,即使您已设置子图和线,您还没有实际使用过画布.当你试图保存图形时,你要求画布要求所有艺术家自己画出它们.您还没有创建一个画布(特定于给定的后端),所以它会抱怨.
按照此处的示例,您需要创建一个可以嵌入tk应用程序的画布(从上一个问题开始)
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
canvas = FigureCanvasTkAgg(f, master=root)
Run Code Online (Sandbox Code Playgroud)
canvas是一个Tk小部件,可以添加到gui.
如果您不想嵌入您的数字,Tk可以使用此处OO显示的纯方法(代码直接从链接中提取):
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
fig = Figure()
canvas = FigureCanvas(fig)
ax = fig.add_subplot(111)
ax.plot([1,2,3])
ax.set_title('hi mom')
ax.grid(True)
ax.set_xlabel('time')
ax.set_ylabel('volts')
canvas.print_figure('test')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9207 次 |
| 最近记录: |