matplotlib是一个非常强大的python库,拥有众多作图函数与matlab类似的语法,使用非常方便.但是经常有一些小问题需要处理.这里记下解决方案,涉及到: 画圆, 画矩形, 保存图片, 和图片默认最大化. 以后如果碰到其他问题再添加.
# -*- coding: utf-8 -*-
import os
import matplotlib.pyplot as plt
import matplotlib.patches as patch
def save_fig(pfile,fig=None):
''' save specified figure or current active figure to a png file '''
if not os.path.isfile(pfile):
print "##ERROR: cannot open specified png file for writing"
return -1
else:
if not fig: fig = plt.gcf()
fig.savefig(pfile, dpi=300, bbox_inches='tight')
print "figure saved: "+pfile
return 0
def draw_circle(c, r, colour='b', isfill=False, line=1, fig=None):
''' draw a circle at the centre with specified diameter and colour '''
if not fig: fig = plt.gcf()
c1 = plt.Circle(c, r, color=colour, fill=isfill,
clip_on=False, linewidth=line)
ax = fig.gca()
ax.add_artist(c1)
plt.axes().set_aspect('equal', 'datalim')
ax.autoscale()
def add_circle(c, fig=None):
if not fig: fig = plt.gcf()
ax = fig.gca()
ax.add_artist(c)
plt.axes().set_aspect('equal', 'datalim')
ax.autoscale()
def draw_rect(c, w, h, fig=None, isfill=False,
fillcolour='b', bordercolour='b',
alphanum=1, borderwidth=1):
''' draw a rectangle with corner c, width w and height h '''
if not fig: fig = plt.gcf()
ax = fig.gca()
ax.add_patch(patch.Rectangle(c, w, h,
fill=isfill,
alpha=alphanum,
edgecolor=bordercolour,
facecolor=fillcolour,
linewidth=borderwidth))
plt.axes().set_aspect('equal', 'datalim')
ax.autoscale()
def max_fig():
''' maxmize the figure depend on the backend, works on all OSes '''
backend = plt.get_backend().lower()
fig_man = plt.get_current_fig_manager()
if 'tk' in backend: # TkAgg
fig_man.window.state('zoomed')
elif 'wx' in backend: # WxAgg
fig_man.frame.Maximize(True)
elif 'qt' in backend: # QtAgg
fig_man.window.showMaximized()
def set_title(title=''):
''' set title of the figure '''
if title: plt.title(title)
# -------------------------------------------------------
if __name__=='__main__':
fig = plt.figure("test")
# plt.axis("off")
x, y = 0, 0
draw_circle([x, y], 10, 'r', 3)
c2 = plt.Circle((20, 20), 5, color='b', fill=True)
add_circle(c2)
draw_rect([0, 0], 177.04, 44, borderwidth=3)
print plt.get_backend()
max_fig()
plt.show()
set_title()

No comments :
Post a Comment