Matplotlib基础学习二

 

颜色和样式

面向对象VSMatlab Style

子图

多图

网格

图例

坐标轴范围

添加新的坐标轴

注释

文字

Text公式

颜色填充

形状

极坐标


 

颜色和样式

#默认情况
y=np.arange(1,5)
plt.plot(y)
plt.show()

#样式字符串 颜色+点型+线形
y=np.arange(1,5)
plt.plot(y,'cx--');
plt.plot(y+1,'kp:');
plt.plot(y+2,'mo-.');

plt.show()

 

面向对象VSMatlab Style

 

pyplot:经典高层封装,pylab:将Matplotlib 和 Numpy 合并的模块,面向对象的方式

#pylab
#无需再导入其他包
from pylab import *
x=arange(0,10,1)
y=randn(len(x))
plot(x,y)
title('random numbers')
show()

#pyplot
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,10,1)
y=np.random.randn(len(x))
plt.plot(x,y)
plt.title('pyplot')
plt.show()


 

#Object Oriented面向对象
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,10,1)
y=np.random.randn(len(x))
fig=plt.figure()#先生成一个画布对象
ax=fig.add_subplot(111)#生成一个坐标轴对象
l,=plt.plot(x,y)#生成坐标轴对象
t=ax.set_title('object oriented')
plt.show()


子图

import matplotlib.pyplot as plt
import numpy as np

x=np.arange(1,100)

plt.subplot(221)
plt.plot(x,x)

plt.subplot(222)
plt.plot(x,-x)

plt.subplot(223)
plt.plot(x,x*x)

plt.subplot(224)
plt.plot(x,np.log(x))

plt.show()

 

多图

import matplotlib.pyplot as plt

fig1=plt.figure()

ax1=fig1.add_subplot(111)

ax1.plot([1,2,3],[3,2,1])

fig2=plt.figure()

ax2=fig2.add_subplot(111)

ax2.plot([1,2,3],[1,2,3])

plt.show()



 

网格

import numpy as np
import matplotlib.pyplot as plt
y=np.arange(1,5)

plt.plot(y,y*2)

plt.grid(True)#打开网格

plt.show()

import numpy as np
import matplotlib.pyplot as plt
y=np.arange(1,5)

plt.plot(y,y*2)

plt.grid(True,color='g',linestyle='-',linewidth='2')

plt.show()



 

#Object Oriented面向对象网格绘制方式
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,10,1)
y=np.random.randn(len(x))
fig=plt.figure()
ax=fig.add_subplot(111)
l,=plt.plot(x,y)

ax.grid(color='g')

plt.show()#面向对象 没有交互效果 不能改变样式


图例

 

import matplotlib.pyplot as plt
import numpy as np


x=np.arange(1,11,1)
y=x*x

plt.plot(x,x*2,label='Normal')

plt.plot(x,x*3,label='Fast')

plt.plot(x,x*4,label='Faster')
#不加legend,图是没有图例的 loc(数字对应位置)
plt.legend(loc=0)

plt.show()

#方式2

plt.plot(x,x*2)
plt.plot(x,x*3)
plt.plot(x,x*4)

plt.legend(['Normal','Fast','Faster'])

plt.show()
#
#面向对象

import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,10,1)
y=np.random.randn(len(x))
fig=plt.figure()
ax=fig.add_subplot(111)
l,=plt.plot(x,y)

ax.legend(['ax legend'])

line, =ax.plot(x,y,label='Inline label')

line.set_label('label via method')

ax.legend()

plt.show()

 

坐标轴范围

import matplotlib.pyplot as plt
import numpy as np

x=np.arange(1,11,1)

plt.plot(x,x)

ax=plt.gca()#获取当前图像的坐标轴

ax.locator_params(nbins=5)#坐标轴有多少格

plt.show()

import matplotlib.pyplot as plt
import numpy as np
import datetime
import matplotlib as mpl

# x=np.arange(1,11,1)
#
# plt.plot(x,x)
#
# ax=plt.gca()#获取当前图像的坐标轴
# #可以调整x,y 面向对象是没有交互功能的
# ax.locator_params('x',nbins=5)#坐标轴有多少格
#
# plt.show()

fig=plt.figure()
start=datetime.datetime(2019,1,1)
stop=datetime.datetime(2020,1,1)
delta=datetime.timedelta(days=1)#日期间隔

dates=mpl.dates.drange(start,stop,delta)


y=np.random.rand(len(dates))
ax=plt.gca()
ax.plot_date(dates,y,linestyle='-',marker='')

#设置日期格式
date_format=mpl.dates.DateFormatter('%Y-%m')
ax.xaxis.set_major_formatter(date_format)

fig.autofmt_xdate()#自适应


plt.show()

添加新的坐标轴

import matplotlib.pyplot as plt
import numpy as np

x=np.arange(2,20,1)

y1=x*x

y2=np.log(x)

# plt.plot(x,y1)

fig=plt.figure()
ax1=fig.add_subplot(111)
ax1.plot(x,y1)
ax1.set_ylabel('Y1')
ax2=ax1.twinx()
ax2.plot(x,y2,'r')

ax1.set_ylabel('Y2')
ax1.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)

#注释 箭头的宽度为10 arrowprops headwidth箭头宽度 箭身宽度10
plt.annotate('this is the bottom',xy=(0,5),xytext=(-2,50),arrowprops=dict(facecolor='g',frac=0.2,headwidth=30,width=10))

plt.show()

 

文字

import matplotlib.pyplot as plt
import  numpy as np


x=np.arange(-10,11,1)

y=x*x

plt.plot(x,y)

#family 字体  size 字体大小 weight 粗体
plt.text(-2,40,'function:y=x*x',family='serif',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()

 

Text公式

import matplotlib.pyplot as plt

#设置画布
fig=plt.figure()

ax=fig.add_subplot(111)

ax.set_xlim([1,7])
ax.set_ylim([1,5])

#r代表不转义 显示字符本身

ax.text(2,4,r"$ \alpha_i \beta_j \pi \lambda\omega $",size=25)
ax.text(4,4,r"$ \sin(0)=\cos(\frac{\pi}{2})$",size=25)
ax.text(2,2,r"$ \lim_{x \rightarrow y} \frac{1}{x^3}$",size=25)
ax.text(4,2,r"$ \sqrt[4]{x}=sqrt[2]{y}$",size=25)

plt.show()

颜色填充

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(0,5*np.pi,1000)

y1=np.sin(x)

y2=np.sin(2*x)

plt.plot(x,y1)
plt.plot(x,y2)

#颜色填充
plt.fill(x,y1,'b',alpha=0.3)
plt.fill(x,y2,'r',alpha=0.3)
plt.show()

 

形状

import numpy as np
import matplotlib.pyplot as plt

#图形上打各种各样的补丁
import matplotlib.patches as mpatches


fig,ax=plt.subplots()

xy1=np.array([0.2,0.2])
xy2=np.array([0.2,0.8])
xy3=np.array([0.8,0.2])
xy4=np.array([0.8,0.8])

circle=mpatches.Circle(xy1,0.05)#0.1半径

ax.add_patch(circle)


rect=mpatches.Rectangle(xy2,0.2,0.1,color='r')

ax.add_patch(rect)

polygon=mpatches.RegularPolygon(xy3,5,0.1,color='green')
ax.add_patch(polygon)


ellipse=mpatches.Ellipse(xy4,0.4,0.2,color='y')
ax.add_patch(ellipse)



plt.axis('equal')#

plt.grid()

plt.show()

import numpy as np
import matplotlib.pyplot as plt

fig,axes=plt.subplots(ncols=2,nrows=2)

ax1,ax2,ax3,ax4=axes.ravel()

x,y=np.random.normal(size=(2,100))
ax1.plot(x,y,'o')

x=np.arange(0,10)
y=np.arange(0,10)

ncolors=len(plt.rcParams['axes.prop_cycle'])#颜色循环


shift=np.linspace(0,10,ncolors)#生成y轴间距


for s in shift:
    ax2.plot(x,y+s,'-')

#画柱状图
x=np.arange(5)

y1,y2,y3=np.random.randint(1,25,size=(3,5))
width=0.25

ax3.bar(x,y1,width)
ax3.bar(x+width,y2,width)
ax3.bar(x+2*width,y2,width)


#圆形图案
for i,color in enumerate(plt.rcParams['axes.prop_cycle']):
    xy=np.random.normal(size=2)
    ax4.add_patch(plt.Circle(xy,radius=0.3,color=color))

ax4.axis('equal')

plt.show()

极坐标

import numpy as np
import matplotlib.pyplot as plt

r=np.arange(1,6,1)

#角度
theta=[0,np.pi/2,np.pi,3*np.pi/2,2*np.pi]

#projection 代表投影 polar
ax=plt.subplot(111,projection='polar')

ax.plot(theta,r,color='r',linewidth=3)

#设置网格
ax.grid(True)

plt.show()

import numpy as np
import matplotlib.pyplot as plt

# r=np.arange(1,6,1)

r=np.empty(5)#生成一个大小为5的正方形

r.fill(5)


#角度
theta=[0,np.pi/2,np.pi,3*np.pi/2,2*np.pi]

#projection 代表投影 polar
ax=plt.subplot(111,projection='polar')

ax.plot(theta,r,color='r',linewidth=3)

#设置网格
ax.grid(True)

plt.show()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值