可视化笔记2--matplotlib 常见图形绘制2

可视化笔记2--matplotlib 常见图形绘制2

 

接着上一篇博文,继续简单学习了下matplotlib绘图功能,基本包括:设置颜色、点、线样式,绘制子图、多图、网格、图例、调整坐标轴刻度,绘制坐标轴、注释、纯文字、公式,相应学习笔记分享在此处,以便于后续参考。后续若有新功能函数,也会在此处加以补充!

 

1、设置颜色、点、线样式

import matplotlib.pyplot as plt
import numpy as np

#1) 颜色设置
y=np.arange(1,5)
plt.plot(y) #默认蓝色
plt.plot(y+0.5,color='r')
plt.plot(y+1,c='b')
plt.plot(y+1.5,color='0.5') #灰色阴影的方式
plt.plot(y+2,color='#FF00FF') #十六进制的方式
plt.plot(y+2.5,color=(0.1,0.2,0.3)) #rgb的方式
plt.show()

#2)点的样式
y=np.arange(1,5)
plt.plot(y) #第一个默认为线段
plt.plot(y+0.5,marker='o') #之后的显式指定marker为线段,未指定的为点,若未指定颜色时候会依次显示为不同颜色
plt.plot(y+1,'D')
plt.plot(y+1.5,'^')
plt.plot(y+2,'p')
plt.show()

#3)线的样式
y=np.arange(1,5)
plt.plot(y) #第一个默认为线段
plt.plot(y+0.5,linestyle='--')
plt.plot(y+1,'-.')
plt.plot(y+1.5,':')
plt.plot(y+2,'-')
plt.show()

#4)样式的字符串,同时表示颜色、点型、线型的字符串,如
y=np.arange(1,5)
plt.plot(y) #第一个默认为线段
plt.plot(y+0.5,'cx--',y+0.6,'rD-')
plt.plot(y+1,'kp:')
plt.plot(y+1.5,'bo-.')
plt.show()

C9-1

2、绘制子图

import matplotlib.pyplot as plt
import numpy as np

#Matplotlib对象简介
# FigureCanvas 画布
# Figure 图
# Axes Figure上的坐标轴

#1)使用面向对象的方式画子图
'''
fig = plt.gigure()
 Figure 实例
 可以添加Axes实例
安心= fig.add_subplot(111)
 返回Axes实例
 参数1,子图总行数
 参数2,子图总列数
 参数3,子图位置
'''
x=np.arange(1,100)
fig = plt.figure()
ax1=fig.add_subplot(221) #第1个
ax1.plot(x,x)
ax1=fig.add_subplot(222) #第2个
ax1.plot(x,x*x)
ax1=fig.add_subplot(223) #第3个
ax1.plot(x,-x)
ax1=fig.add_subplot(224) #第4个
ax1.plot(-x,np.log(x))
plt.show()

#2)使用交互式方式画子图
x=np.arange(1,100)
plt.subplot(221)
plt.plot(x,x+1)
plt.subplot(222)
plt.plot(x,x*x+1)
plt.subplot(223)
plt.plot(x,-x+1)
plt.subplot(224)
plt.plot(x,np.log(x)+1)
plt.show()

3、绘制多图

import matplotlib.pyplot as plt

#1)绘制多图,同时出现多个窗口显示对应的图
fig1 = plt.figure()
ax1=fig1.add_subplot(111) #第1个
ax1.plot([1,2,3],[3,2,1])
ax1.set_title('Fig 1')

fig2 = plt.figure()
ax2=fig2.add_subplot(111) #第1个
ax2.plot([1,2,3],[1,2,3])
ax2.set_title('Fig 2')

plt.show()

4、绘制网格图

import matplotlib.pyplot as plt
import numpy as np

#绘制网格图
#1)plt交互式绘表格
#使用网格后,背景为网格图

x=np.arange(1,100)
plt.plot(x,x*2)
plt.grid(c='b') #更改颜色
plt.grid(linewidth=1) #更改网格线宽度
plt.grid(linestyle='-.') #更改线条形状
#plt.grid(False) #使用False即无表格
plt.show()

#2)面向对象方式绘制表格
x=np.arange(1,100,1)
fig = plt.figure()
ax1=fig.add_subplot(111) #第1个
ax1.plot(x,x*x)
ax1.grid(c='g')
plt.show()

5、绘制图例

import matplotlib.pyplot as plt
import numpy as np
#图例
#通过信息框的形式来描述每条线的代号/标志

#1) plt 方式绘制图例
x=np.arange(1,10,1)
plt.plot(x,x*2,label='Normal')
plt.plot(x,x*3,label='Fast')
plt.plot(x,x*4,label='Faster')
plt.legend(loc=0,ncol=3)#使用legend才会出现图例
#loc=0-10,分别表示不同的方向,官网:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.legend.html
#ncol=具体数字,可将图例扁平化
plt.show()

#2)面向对象方式绘制图例
x=np.arange(1,100,1)
fig = plt.figure()
ax1=fig.add_subplot(111) #第1个
l1,=plt.plot(x,x)
l1.set_label('Normal')
l2,=plt.plot(x,x*2,label='Fast') #可以使用set_label或者直接在plot中添加label标签
ax1.legend()
plt.show()

6、调整坐标轴

import matplotlib.pyplot as plt
import numpy as np

#调整坐标轴范围
#1)调整方式1
x= np.arange(-10,11,1)
plt.subplot(221)
plt.plot(x,x*x)
print(plt.axis())

plt.subplot(222)
plt.plot(x,x*x)
plt.axis([0,11,0,150]) #同时调整x,y
print(plt.axis())

plt.subplot(223)
plt.plot(x,x*x)
plt.xlim([0,10]) #只调整x轴
print(plt.axis())

plt.subplot(224)
plt.plot(x,x*x)
plt.ylim([0,10]) #只调整y轴
print(plt.axis())
plt.show()

#2)调整方式2
print('\n\nmethod 2!')
x= np.arange(-10,11,1)
plt.subplot(221)
plt.plot(x,x*x)
print(plt.axis())

plt.subplot(222)
plt.plot(x,x*x)
plt.xlim(left=-5)#left/xmin,right/xmax
print(plt.axis())

plt.subplot(223)
plt.plot(x,x*x)
plt.xlim(left=-5,right=10)
print(plt.axis())

plt.subplot(224)
plt.plot(x,x*x)
plt.ylim(bottom=-5,top=100)#top/ymax,bottom/ymin
print(plt.axis())
plt.show()

'''输出结果
(-11.0, 11.0, -5.0, 105.0)
(0.0, 11.0, 0.0, 150.0)
(0.0, 10.0, -5.0, 105.0)
(-11.0, 11.0, 0.0, 10.0)


method 2!
(-11.0, 11.0, -5.0, 105.0)
(-5.0, 11.0, -5.0, 105.0)
(-5.0, 10.0, -5.0, 105.0)
(-11.0, 11.0, -5.0, 100.0)

Process finished with exit code 0
'''

7、调整坐标轴刻度

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

#调整坐标轴刻度

#1)普通坐标轴刻度调整
x= np.arange(1,11,1)

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

plt.subplot(222)
plt.plot(x,x)
ax=plt.gca()#获取当前图形的坐标轴
ax.locator_params(nbins=10)
#nbins 坐标轴格数

plt.subplot(223)
plt.plot(x,x)
ax=plt.gca()#获取当前图形的坐标轴
ax.locator_params('x',nbins=10) #制定调整x

plt.subplot(224)
plt.plot(x,x)
plt.locator_params('y',nbins=10)
''' 等价方式
ax=plt.gca()#获取当前图形的坐标轴
ax.locator_params('y',nbins=10) #制定调整y
'''
plt.show()

#2)日期坐标轴刻度调整
fig = plt.figure()
plt.subplot(211)
start = datetime.datetime(2018,1,1)
end = datetime.datetime(2019,1,1)
delta = datetime.timedelta(days=2)#时间间隔为2天
dates = mpl.dates.drange(start,end,delta)
y=np.random.rand(len(dates))
ax=plt.gca()
ax.plot_date(dates,y,linestyle='-',marker='')

plt.subplot(212)
delta = datetime.timedelta(days=2)#时间间隔为2天
dates = mpl.dates.drange(start,end,delta)
y=np.random.rand(len(dates))
ax=plt.gca()
ax.plot_date(dates,y,c='g',linestyle='-',marker='')
date_format = mpl.dates.DateFormatter('%Y-%m-%d') #设置时间格式为Y-m-d
ax.xaxis.set_major_formatter(date_format)
plt.show()

#解决重影问题
fig = plt.figure()
start = datetime.datetime(2018,1,1)
end = datetime.datetime(2019,3,1)
delta = datetime.timedelta(days=2)#时间间隔为2天
dates = mpl.dates.drange(start,end,delta)
y=np.random.rand(len(dates))
ax=plt.gca()
ax.plot_date(dates,y,c='g',linestyle='-',marker='')
date_format = mpl.dates.DateFormatter('%Y-%m-%d') #设置时间格式为Y-m-d
ax.xaxis.set_major_formatter(date_format)
fig.autofmt_xdate()
plt.show()

8、添加坐标轴

import matplotlib.pyplot as plt
import numpy as np

#添加坐标轴
#使用双坐标轴可以对一幅图上的不同曲线设置不同的度量单位

#1)使用plt方式绘制
x=np.arange(2,20,1)
y1=x*x
y2=np.log(x)
plt.subplot(121)
plt.plot(x,y1)
plt.plot(x,y2)

plt.subplot(122)
plt.plot(x,y1)
plt.twinx()
plt.plot(x,y2,c='r')
plt.show()

#2)使用面向对象方式绘制
fig = plt.figure()
ax1= fig.add_subplot(121)
ax1.plot(x,y1)
ax1.set_ylabel('y1')
ax1.set_xlabel('compare y1 y2')
ax2=ax1.twinx()
ax2.plot(x,y2,'r')
ax2.set_ylabel('y2')
#绘制2个y轴
ax1= fig.add_subplot(122)
ax1.plot(y1,x)
ax1.set_xlabel('x1')
ax1.set_xlabel('compare x1 x2')
ax2=ax1.twiny()
ax2.plot(y2,x,'r')
ax2.set_xlabel('x2')
plt.show()

9、添加注释

import matplotlib.pyplot as plt
import numpy as np

#绘制注释符号

x= np.arange(-10,11,1)
plt.plot(x,x*x,'b')
plt.annotate('This is bottome',xy=(0,5),xytext=(0,20),arrowprops=dict(facecolor='r',width=2,headlength=3))
#xy=(0,5)可以调箭头高度和位置
#xytext=(0,20) 可以调整注释和位置
#arrwoprops中可以通过 headlength/frac,facecolor,width等参数调整其样式
plt.plot(x,x*x)

plt.show()

10、绘制纯文字

import matplotlib.pyplot as plt
import numpy as np

#在图形中画纯文字

x= np.arange(-10,11,1)
plt.plot(x,x*x,'b')
plt.text(x=0,y=10,s='func:y=x*x',family='serif',color='black',style='normal',weight=10,bbox=dict(facecolor='r',alpha=0.2))
#family 字体调整
#style 字体样式-正常、斜体
#weight 调整字体粗细,范围【0-1000】,也可以使用文字描述,具体参考官网
#bbox 添加边框
plt.text(x=0,y=20,s='func:y=x*x',family='fantasy',color='g',style='italic',weight=100)
plt.show()

11、绘制公式

import matplotlib.pyplot as plt
import numpy as np

#绘制Tex公式
'''
matplotlib 自带mathtext引擎,不需要要安装TeX系统,其以$作为开始和结束符号,例如"$y=x+2"
官网参考文献:https://matplotlib.org/users/mathtext.html
'''

fig = plt.figure()
ax=fig.add_subplot(111)
ax.set_xlim([1,7])
ax.set_ylim([1,5])

ax.text(2,4,r"$\alpha_i  \beta_j  \pi  \lambda  \omega$",size=15)
ax.text(4,4,r"$ \sin(0)=\cos(\frac{\pi}{2})$",size=15)
ax.text(2,2,r"$ \lim_{x \rightarrow y} \frac{1}{x^3} $",size=15)
ax.text(4,2,r"$ \sqrt[4]{x}=\sqrt{y} $",size=15) #\sqrt[2]{y} 则多了个2,默认已经开根号了,因此不需要[2]参数
plt.show()

 

说明

以上默认测试python版本为python3.6.3,matplotlib 3.0.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昕光xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值