python数据分析之matplotlib学习二

1 figure 图像

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-1,1,30)
y1=2*x
y2=x**2

plt.figure()#下面的都属于这一张figure
plt.plot(x,y1)

plt.figure(num=3,figsize=(8,5))
#下面的都属于这一张figure。可以用参数num来定义图的序号,用figsize设定图的大小(比例)
plt.plot(x,y2)
plt.plot(x,y1,'r:',linewidth=1)#在下一个plt.figure()之前的plt.plot()都在一个图里。

plt.show()

python数据分析之matplotlib学习二_第1张图片python数据分析之matplotlib学习二_第2张图片

2 坐标轴的设置

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-1,3,50)
y1=2*x
y2=x**2

plt.figure(num=3,figsize=(8,5))
#下面的都属于这一张figure。可以用参数num来定义图的序号,用figsize设定图的大小(比例)
plt.plot(x,y2)
plt.plot(x,y1,'r:',linewidth=1)#在下一个plt.figure()之前的plt.plot()都在一个图里。

plt.axis([-1,2,-2,3])#限定坐标轴取值范围
plt.xlabel('x')
plt.ylabel('y')

new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)#替换坐标的刻度分布
#字符的首尾加上美元符号,前加上r,单词之间的空格要用\表示。汉字前后不加美元符号
plt.yticks([-2,-1.8,-1,1.22,3],
[r'$really\ bad$',r'$bad\ \alpha$',r'$normal$',r'$good$',r'旺德福'],
fontproperties='YouYuan')

#plt.yticks([-2,-1.8,-1,1.22,3],
#['really bad','bad','normal','good','旺德福'],
#fontproperties='YouYuan')

plt.show()

python数据分析之matplotlib学习二_第3张图片

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-1,3,50)
y1=2*x
y2=x**2
plt.figure(num=3,figsize=(8,5))
#下面的都属于这一张figure。可以用参数num来定义图的序号,用figsize设定图的大小(比例)
plt.plot(x,y2)
plt.plot(x,y1,'r:',linewidth=1)#在下一个plt.figure()之前的plt.plot()都在一个图里。

plt.axis([-1,2,-2,3])#限定坐标轴取值范围
plt.xlabel('x')
plt.ylabel('y')

new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)#替换坐标的刻度分布

plt.yticks([-2,-1.8,-1,1.22,3],
['really bad','bad','normal','good','旺德福'],
fontproperties='YouYuan')

#gca='get current axis'
ax=plt.gca()
#ax.spines上下左右四条边
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')#把bottom指定的边真正作为x轴
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',-1))#把y轴的-1作为两轴交点
ax.spines['left'].set_position(('data',-0.5))#把x轴的-0.5作为两轴交点。

plt.show()

python数据分析之matplotlib学习二_第4张图片

3 Legend图例

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-1,3,50)
y1=2*x
y2=x**2
plt.figure(num=3,figsize=(8,5))
#下面的都属于这一张figure。可以用参数num来定义图的序号,用figsize设定图的大小(比例)
plt.plot(x,y2)
plt.plot(x,y1,'r:',linewidth=1)

plt.axis([-1,2,-2,3])#限定坐标轴取值范围
plt.xlabel('x')
plt.ylabel('y')

new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)#替换坐标的刻度分布

plt.yticks([-2,-1.8,-1,1.22,3],
['really bad','bad','normal','good','旺德福'],
fontproperties='YouYuan')

plt.figure(num=3,figsize=(8,5))
#下面的都属于这一张figure。可以用参数num来定义图的序号,用figsize设定图的大小(比例)

plt.plot(x,y2,label='up')
plt.plot(x,y1,'r:',linewidth=1,label='down')
plt.legend()

plt.show()


python数据分析之matplotlib学习二_第5张图片

自定义哪些需要打印出图例,以及图例放置的地方。

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-1,3,50)
y1=2*x
y2=x**2
plt.figure(num=3,figsize=(8,5))
#下面的都属于这一张figure。可以用参数num来定义图的序号,用figsize设定图的大小(比例)
plt.plot(x,y2)
plt.plot(x,y1,'r:',linewidth=1)

plt.axis([-1,2,-2,3])#限定坐标轴取值范围
plt.xlabel('x')
plt.ylabel('y')

new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)#替换坐标的刻度分布

plt.yticks([-2,-1.8,-1,1.22,3],
['really bad','bad','normal','good','旺德福'],
fontproperties='YouYuan')

plt.figure(num=3,figsize=(8,4))
#下面的都属于这一张figure。可以用参数num来定义图的序号,用figsize设定图的大小(比例)

l1,=plt.plot(x,y2)
l2,=plt.plot(x,y1,'r:',linewidth=1)
#等号前的逗号不能少
plt.legend(handles=[l1,l2,],labels=['up','down',],loc='best')

plt.show()

python数据分析之matplotlib学习二_第6张图片

l1,=plt.plot(x,y2)
l2,=plt.plot(x,y1,'r:',linewidth=1)
#等号前的逗号不能少
plt.legend(handles=[l1,],labels=['up',],loc='best')

python数据分析之matplotlib学习二_第7张图片

4 Annotation标注

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y=2*x+1

plt.figure(num=1,figsize=(8,5))
plt.plot(x,y)

ax=plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

x0=1
y0=2*x0+1

#线条的Annotation
plt.scatter(x0,y0,s=40,color='b')#先添加点
plt.plot([x0,x0],[y0,0],'k:',linewidth=2.5)#添加虚线

#xycoords='data'表示前边xy的坐标以数据坐标作为基准。
#xytextcoords='offset points'表示前边的偏移量是基于之前的点。
plt.annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xycoords='data',
xytext=(+30,-30),textcoords='offset points',
fontsize=16,arrowprops=dict(facecolor='black',shrink=0.05,width=2))

plt.show()

python数据分析之matplotlib学习二_第8张图片

#\m表示数学形式,\+空格是对空格转换。
plt.text(-3.7,3,r'$This\ is\ the\ some\ text.\ \mu\ \sigma_i\ \alpha_t$',
fontdict={'size':16,'color':'r'})

python数据分析之matplotlib学习二_第9张图片

5 tick能见度(坐标轴数据在线条很粗的情况下依然清晰,不会被遮住。)

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y=0.1*x

plt.figure(num=1,figsize=(8,5))
plt.plot(x,y,linewidth=10)

plt.ylim(-2,2)#限定坐标轴y的取值范围

ax=plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

#alpha表示透明度
for label in ax.get_xticklabels()+ax.get_yticklabels():
    label.set_fontsize(12)          #字体字号变大
    #bbox是label所占据的方形背景,facecolor是方形背景的颜色,edgecolor是方形背景的边框色
    #None表示没有颜色。
    label.set_bbox(dict(facecolor='white',edgecolor='None',alpha=0.9))

plt.show()

python数据分析之matplotlib学习二_第10张图片

wuwu不知道为啥我没有成功。

6 图中图

import matplotlib.pyplot as plt

fig=plt.figure()
x=[1,2,3,4,5,6,7]
y=[2,4,1,5,3,9,8]

left,bottom,width,height=0.1,0.1,0.8,0.8    
#这四个数值分别表示图的左,底离边框的距离占据边框长度的百分比。图的宽度高度占据边框的百分比
ax1=fig.add_axes([left,bottom,width,height])
ax1.plot(x,y,'r')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_title('title')

left,bottom,width,height=0.2,0.6,0.25,0.25    
#这四个数值分别表示图的左,底离边框的距离占据边框长度的百分比。图的宽度高度占据边框的百分比
ax1=fig.add_axes([left,bottom,width,height])
ax1.plot(x,y,'r')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_title('title inside 1')

#法二
plt.axes([0.7,0.2,0.15,0.15])
plt.plot(x,y,'g')
plt.xlabel('x')
plt.ylabel('y')
plt.title('title inside 2')

plt.show()

python数据分析之matplotlib学习二_第11张图片

7 secondary axis 次坐标

import matplotlib.pyplot as plt
import numpy as np

x=np.arange(0,10,0.1)
y1=0.05*x**2
y2=-1*y1+10

fig,ax1=plt.subplots()
#把ax1的坐标镜像作为ax2
ax2=ax1.twinx()
ax1.plot(x,y1,'g-')
ax2.plot(x,y2,'k:')

ax1.set_xlabel('X data')
ax1.set_ylabel('Y1',color='g')
ax2.set_ylabel('Y2',color='k')

plt.show()

python数据分析之matplotlib学习二_第12张图片

8 Animation动画

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation

fig,ax=plt.subplots()

x=np.arange(0,2*np.pi,0.01)
line,=ax.plot(x,np.sin(x))

def animate(i):
    line.set_ydata(np.sin(x+i/10))
    return line,
    
def init():
    line.set_ydata(np.sin(x))
    return line,

#长度:frames=100帧数,init_frame初始位置/帧数 interval是更新的频率。
ani=animation.FuncAnimation(fig=fig,func=animate,frames=100,init_func=init,interval=20,blit=False)
plt.show()

 

你可能感兴趣的:(python学习)