前言
此处简要介绍Matplotlib画图的常用修饰手法及使用。
包括网格、图例、坐标轴的范围、坐标轴的刻度、添加坐标轴、注释、文字和Tex数学公式。
网格
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(1,10,1)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot(x,x*2)
ax.grid(color='g')
plt.show()
展示
图例
代码一
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(1,11,1)
plt.plot(x,x*2,label="Noramal")
plt.plot(x,x*3,label="Fast")
plt.plot(x,x*4,label="Faster")
plt.legend()#添加图例(有很多参数)
#plt.legend(loc=1)#添加图例(有很多参数)
#loc为0(智能化),1,2,3,4
#plt.legend(pcol=3)#分成几列
#也可以直接在legend里写图例
#plt.legend(['Normal','Fast','Faster'])
plt.show()
展示一
代码二
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(1,11,1)
#面向对象方法
fig = plt.figure()
ax = fig.add_subplot(111)
l,=plt.plot(x,x,label='Inline label')
# 写法一:ax.legend(['ax','lenged'])
# 写法二:l.set_label(['ax','lenged'])
# 写法三:l,=plt.plot(x,x,label='Inline label')
ax.legend()
fig.show()
展示二
坐标轴的范围
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-10,11,1)
plt.plot(x,x*x)
plt.axis([-5,5,20,60])#x轴的范围和y轴的范围
plt.xlim([-5,5])#只管x轴不管y轴
plt.ylim([-5,5])#只管y轴不管x轴
plt.xlim(xmin=-5,xmax=5)
plt.xlim(xmin=-5)#只调整一边
plt.show()
展示
坐标轴的刻度
import matplotlib.pyplot as plt
import matplotlib as npl
import numpy as np
import datetime
x = np.arange(1,11,1)
#ax = plt.plot(x,x)
#ax = plt.gca()#获取当前坐标轴
#ax.locator_params(nbins=20)#nbins指坐标轴有多少格(x,y轴)
ax.locator_params('x',nbins=20)#nbins指坐标轴有多少格
#ax.locator_params('y'nbins=20)#nbins指坐标轴有多少格
#plt.show()
#plt调整方法
#plt.locator_params一样
#日期的调整
fig = plt.figure()
start = datetime.datetime(2015,1,1)
stop = datetime.datetime(2016,1,1)
delta = datetime.timedelta(days=1)
dates = npl.dates.drange(start,stop,delta)
y = np.random.rand(len(dates))
ax = plt.gca()
ax.plot_date(dates,y,linestyle='-',marker='')
date_format = npl.dates.DateFormatter('%Y-%m-%d')#中文日期
ax.xaxis.set_major_formatter(date_format)#进行设置
fig.autofmt_xdate()#自适应日期
plt.show()
展示
坐标轴刻度间隔
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
#从pyplot导入MultipleLocator类,这个类用于设置刻度间隔
x_values=list(range(11))
y_values=[x**2 for x in x_values]
plt.plot(x_values,y_values,c='green')
plt.title('Squares',fontsize=24)
plt.tick_params(axis='both',which='major',labelsize=14)
plt.xlabel('Numbers',fontsize=14)
plt.ylabel('Squares',fontsize=14)
x_major_locator=MultipleLocator(1)
#把x轴的刻度间隔设置为1,并存在变量里
y_major_locator=MultipleLocator(10)
#把y轴的刻度间隔设置为10,并存在变量里
ax=plt.gca()
#ax为两条坐标轴的实例
ax.xaxis.set_major_locator(x_major_locator)
#把x轴的主刻度设置为1的倍数
ax.yaxis.set_major_locator(y_major_locator)
#把y轴的主刻度设置为10的倍数
plt.xlim(-0.5,11)
#把x轴的刻度范围设置为-0.5到11,因为0.5不满一个刻度间隔,所以数字不会显示出来,但是能看到一点空白
plt.ylim(-5,110)
#把y轴的刻度范围设置为-5到110,同理,-5不会标出来,但是能看到一点空白
plt.show()
展示
添加坐标轴
#可以画出双坐标轴
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(2,20,1)
y1 = x * x
y2 = np.log(x)
#plot方式
#plt.plot(x,y1)
#plt.twinx()#添加坐标轴
#plt.plot(x,y2,'r')
#plt.show()
#面向对象方式
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(x,y1)
ax1.set_ylabel('Y1')
ax2 = ax1.twinx()#当然也可twiny
ax2.plot(x,y2,'r')
ax2.set_xlabel('Compare Y1 and Y2')
plt.show()
展示
注释
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-10,11,1)
y = x*x
plt.plot(x,y)
plt.annotate("this is the bottom",
xy=(0,5),#箭头坐标
xytext=(0,20),#这行字的起始坐标 注:arrowprops(新版本不在支持)
arrowprops=dict(facecolor='r',frac=1,headwidth=10)#frac是箭头占比
)
plt.show()
展示
文字
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-10,11,1)
y = x * x
plt.plot(x,y)
plt.text(-2,40,'function:y=x*x',family='serit',size=20,color='r',style='italic',weight=0)
plt.text(-2,20,'function:y=x*x',family='fantasy',size=20,color='g',style='oblique',weight=1000,bbox=dict(facecolor='r',alpha=0.2))
plt.show()
展示
后记
终于整理完了,以后的路还长呢。