python-matplotlib用法示例
2016-07-13 10:41
337 查看
解决中文乱码
首先说一下比较常见的的问题,中文乱码的问题,解决方法如下。import matplotlib matplotlib.use('qt4agg') from matplotlib.font_manager import * import matplotlib.pyplot as plt #定义自定义字体,文件名从1.b查看系统中文字体中来 myfont = FontProperties(fname='/usr/share/fonts/mcyh/mcyh.ttf') #解决负号'-'显示为方块的问题 matplotlib.rcParams['axes.unicode_minus']=False plt.plot([-1,2,-5,3]) plt.title(u'中文',fontproperties=myfont)
上面的fname需要通过以下命令查看.
fc-list :lang=zh
但是可能不存在中文字体,此时莫慌,进入windows的C:\Winodws\Fonts目录,里面有很多ttf文件,拷贝到以下目录即可。
/usr/share/fonts/
切入正题
画折线图 、柱状图的代码如下#coding=utf-8 import matplotlib as mat import sys reload(sys) mat.use('Agg') import matplotlib.pyplot as plt plt.rcdefaults() import numpy as np import matplotlib.pyplot as plt from pylab import * from matplotlib.ticker import FuncFormatter,MaxNLocator import random sys.setdefaultencoding('utf-8') #data=np.loadtxt(file, delimiter=',') x_pos=range(0,1440) repeat_ratio=[] time=[] for i in range(0, 1440): repeat_ratio.append(random.random()) for k in range(24): if k % 3 == 0: hour='%02d' %k min='00' time.append(hour+':'+min) else: time.append('') for i in range(59): time.append('') xticks=range(0, 1441, 180)#设置x轴步长 xlabels=[str(n * 3) +':00' for n in range(0, len(xticks), 1)]#x坐标显示的字符 plt.figure(num=0, figsize=(20, 10)) plt.bar(x_pos, repeat_ratio, align='center', alpha=0.3, facecolor='y')#画柱状图 #plt.plot(x_pos, repeat_ratio,'-b')#画折线图 plt.ylabel('repeat rate/%') plt.xlim(0,1440) plt.ylim(0, 1) plt.title('Repeat Rate') plt.grid(True) #plt.xticks(np.arange(1440),time) plt.xticks(xticks, xlabels) def percentage_format(x,pos=0): return '%1.2f%%'%(x*100) gca().yaxis.set_major_formatter(FuncFormatter(percentage_format))#纵坐标按百分数输出 plt.savefig('repeat.jpg') plt.close(0)
折线图:
柱状图:
2. 下面是封装好了的画折线图、饼图、柱状图的代码。
#coding=utf-8 import matplotlib as mat import sys reload(sys) mat.use('Agg') import matplotlib.pyplot as plt plt.rcdefaults() import numpy as np import matplotlib.pyplot as plt from pylab import * from matplotlib.ticker import FuncFormatter,MaxNLocator import random import datetime sys.setdefaultencoding('utf-8') folder="pic/" def getYesterday(): #获得当前时间时间戳 today = datetime.date.today() yesterday = today - datetime.timedelta(days=1) #转换为其他日期格式,如:"%Y-%m-%d %H:%M:%S" return yesterday.strftime("%Y-%m-%d") def getYesterday2(): today = datetime.date.today() yesterday = today - datetime.timedelta(days=1) return yesterday.strftime("%Y.%m.%d") def loadData(filename): file = open(filename) return np.loadtxt(file,dtype={'names': ('first', 'second'),'formats': ('i4', 'i8')}) #画柱状图 def drawReuseBar(data,yesterday,house_number): x = data[:]['first'] y = data[:]['second'] xticks = range(0,60) plt.figure(num=0, figsize=(20, 10)) plt.bar(x,y,align='center', alpha=1, facecolor='b') plt.title("Reuse Time Difference-%s-%d"%(yesterday,house_number)) plt.grid(True) plt.xlabel('Time Difference(minutes)') plt.ylabel('cnt') plt.xlim(0,61) pic_folder="%s%s"%(folder,yesterday) plt.savefig("%s/%s.%d.bar.jpg"%(pic_folder,yesterday,house_number)) plt.close(0) #画饼图 def drawReusePie(data,yesterday,house_number): plt.figure(num=2, figsize=(15,15)) ax = axes([0.1, 0.1, 0.8, 0.8]) labels = data[:]['first'] fracs = data[:]['second'] x=[0,0,0,0,0,0,0] y=['0≤ X<10min','10min≤ X<20min','20≤ X<30min','30min≤ X<40min','40min≤ X<50min','50min≤ X<60min','X≥ 60min'] for i in range(0,len(labels)): if(labels[i]!=60): x[(labels[i]-1)/10]+=fracs[i] else: x[6]=fracs[i] x[1],x[4]=x[4],x[1] y[1],y[4]=y[4],y[1] x[3],x[6]=x[6],x[3] y[3],y[6]=y[6],y[3] x[4],x[5]=x[5],x[4] y[4],y[5]=y[5],y[4] explode=(0,0,0,0,0,0,0) plt.pie(x, explode=explode, labels=y, autopct='%1.1f%%', shadow=False,colors=("#00EC00","#0080FF","#A6A600","#D26900","#3C3C3C","#FF359A","#8080C0")) plt.legend() #title('Reuse Distence', bbox={'facecolor':'0.8', 'pad':5}) plt.title("Reuse Time Difference-%s-%d"%(yesterday,house_number)) pic_folder="%s%s"%(folder,yesterday) plt.savefig("%s/%s.%d.pie.jpg"%(pic_folder,yesterday,house_number)) plt.close(2) #画折线图 def drawReuseCurve(data,yesterday,house_number): x = data[:]['first'] y = data[:]['second'] xx = [] yy = [] xx.append(0) yy.append(y[0]) xx.append(x[0]) yy.append(y[0]) for i in range(1,len(y)): xx.append(x[i-1]) y[i]+=y[i-1] yy.append(y[i]) xx.append(x[i]) yy.append(y[i]) for i in range(0,len(yy)): yy[i] = yy[i]*1.0/100 for i in range(0,len(y)): y[i] = y[i]*1.0/100 plt.figure(num=1, figsize=(20, 10)) plt.plot(xx, yy,'-b')#画折线图 plt.ylabel('ratio/%') plt.xlabel('Time Difference(minutes)') plt.ylim(0, 1.1) plt.xlim(1,60) plt.title("Reuse Time Difference-%s-%d"%(yesterday,house_number)) plt.grid(True) def percentage_format(x,pos=0): return '%1.2f%%'%(x*100) gca().yaxis.set_major_formatter(FuncFormatter(percentage_format))#纵坐标按百分数输出 pic_folder="%s%s"%(folder,yesterday) plt.savefig("%s/%s.%d.curve.jpg"%(pic_folder,yesterday,house_number)) plt.close(1) def main(): house_id = int(sys.argv[1]) yesterday = getYesterday() filename = "/data/joyyzhang/reuse_result/%d/%s"%(house_id,yesterday) data = loadData(filename) drawReuseBar(data,getYesterday2(),house_id) filename = "/data/joyyzhang/reuse_result/%d/%s.handle"%(house_id,yesterday) file = open(filename) data = np.loadtxt(file,dtype={'names': ('first', 'second'),'formats': ('i4', 'f4')}) drawReusePie(data,getYesterday2(),house_id) drawReuseCurve(data,getYesterday2(),house_id) if __name__ == "__main__": main()
相关文章推荐
- 在Linux下使用Python的matplotlib绘制数据图的教程
- Python Matplotlib库入门指南
- 利用Python和OpenCV库将URL转换为OpenCV格式的方法
- Python使用matplotlib和pandas实现的画图操作【经典示例】
- Python使用matplotlib实现在坐标系中画一个矩形的方法
- python的绘图工具matplotlib使用实例
- Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
- Python NumPy库安装使用笔记
- Windows下为Python安装Matplotlib模块
- Python使用matplotlib绘制动画的方法
- Python中的Numpy入门教程
- #numpy#关于数组形状
- Some Notes of Python Interfaces Pycaffe (Caffe)
- Python 排列组合以及多维数组排序
- NumPy基础(一)
- 安装numpy matplotlib
- python+numpy+scipy=matlab,抛弃matlab
- Python安装matplotlib所需要的软件以及问题的解决方法
- 调用阿里云api获取阿里云数据同步服务(DTS)并且作图发送邮件的整个流程
- python学习-numpy(一)