Python中Matplotlib包的简单使用

本篇博客主要是参考莫凡python教程

1. 基础使用

import matplotlib.pyplot as plt
import numpy as np

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

plt.figure()
plt.plot(x,y)
plt.show()

这里写图片描述

2. 设置figure

import matplotlib.pyplot as plt
import numpy as np

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

plt.figure(figsize=(8,6),num=1) # 这里的figure size 是指图像大小, num是指的是标号
plt.plot(x, y1)
plt.plot(x,y2,c='red',linewidth=1.0,linestyle='--') # 这里的的c控制的是颜色,linewidth控制线宽,linestyle控制线的风格
plt.show()

这里写图片描述

3. 设置坐标轴,调整名字和间隔

import matplotlib.pyplot as plt
import numpy as np

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

plt.figure(figsize=(8,6),num=1) # 这里的figure size 是指图像大小, num是指的是标号
plt.plot(x, y1)
plt.plot(x,y2,c='red',linewidth=1.0,linestyle='--') # 这里的的c控制的是颜色,linewidth控制线宽,linestyle控制线的风格
# 设置坐标轴名字
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('I am x')
plt.ylabel('I am y')
# 设置新的间隔
new_tricks = np.linspace(-1,2,5)
plt.xticks(new_tricks)  # 通过调用plt.xtricks函数我们可以自己定义不同的间隔
plt.yticks([-2,-1.8,-1,1.22,3],[r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])  # 这里我们也可以显示刻度以及对应的刻度名称,注意使用r'$???$'语法,如果中间出现了空格则需要使用\转义
plt.show()

这里写图片描述

4. 设置不同的名字和位置,调整坐标轴

import matplotlib.pyplot as plt
import numpy as np

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

plt.figure(figsize=(8,6),num=1) # 这里的figure size 是指图像大小, num是指的是标号
plt.plot(x, y1)
plt.plot(x,y2,c='red',linewidth=1.0,linestyle='--') # 这里的的c控制的是颜色,linewidth控制线宽,linestyle控制线的风格

# 设置坐标轴名字
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('I am x')
plt.ylabel('I am y')
# 设置新的间隔
new_tricks = np.linspace(-1,2,5)
plt.xticks(new_tricks)  # 通过调用plt.xtricks函数我们可以自己定义不同的间隔
plt.yticks([-2,-1.8,-1,1.22,3],[r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])  # 这里我们也可以显示刻度以及对应的刻度名称,注意使用r'$???$'语法,如果中间出现了空格则需要使用\转义
# 设置不同的坐标轴
ax = plt.gca()  # 获取当前坐标的位置
ax.spines['right'].set_color('none')  # 针对当前最右边的位置,设置颜色为白色,相当于不显示,默认是黑色
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')  # 设置x的刻度以及名称
ax.spines['bottom'].set_position(('data', 0))   # 设置坐标轴的中心在(0,0)位置
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()

这里写图片描述

5. 设置图例

import matplotlib.pyplot as plt
import numpy as np

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

plt.figure(figsize=(8,6),num=1) # 这里的figure size 是指图像大小, num是指的是标号
plt.plot(x, y1,label='liner line')  # 这里加上一个label是为了后面可以使用图例
plt.plot(x,y2,c='red',linewidth=1.0,linestyle='--',label='square line') # 这里的的c控制的是颜色,linewidth控制线宽,linestyle控制线的风格

# 设置坐标轴名字
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('I am x')
plt.ylabel('I am y')
plt.legend(loc='best')   # 设置图例,loc是可以接受传入的数据的
# 设置新的间隔
new_tricks = np.linspace(-1,2,5)
plt.xticks(new_tricks)  # 通过调用plt.xtricks函数我们可以自己定义不同的间隔
plt.yticks([-2,-1.8,-1,1.22,3],[r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])
plt.show()

这里写图片描述
其中,legend中loc参数的是可以是以下可选项:
'best' : 0
'upper right' : 1
'upper left' : 2
'lower left' : 3
'lower right' : 4
'right' : 5
'center left' : 6
'center right' : 7
lower center' : 8
'upper center' : 9
'center' : 10

6. Annotation 标注

import matplotlib.pyplot as plt
import numpy as np

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

plt.figure(figsize=(8,6),num=1)
plt.plot(x,y,color='red',linewidth=1)
ax = plt.gca()
ax.spines['right'].set_color('none')  # 针对当前最右边的位置,设置颜色为白色,相当于不显示,默认是黑色
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')  # 设置x的刻度以及名称
ax.spines['bottom'].set_position(('data', 0))   # 设置坐标轴的中心在(0,0)位置
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
x0 = 1
y0 = 2*x0 + 1
plt.plot([x0, x0], [0, y0], 'k--', linewidth=2.5)  # 这里的[x0,x0],[0,y0]的含义就是二个点(x0,0),(x0,y0)然后再把二个点组成一条线画出来
# set dot styles
plt.scatter([x0, ], [y0, ], s=50, color='b')  # 另外这里在做出两条线的交点,这里的s代表的是点的大小
# 下面进行标注
plt.annotate(r'$2x+1=%s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30),
             textcoords='offset points', fontsize=16,
             arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))
# xy代表的需要标注点的位置,必须参数;r'$2x+1=%s$' % y0显示标注的字符串
#其中参数xycoords='data' 是说基于数据的值来选位置, xytext=(+30, -30) 和 textcoords='offset points' 对于标注位置的描述 和 xy 偏差值, arrowprops是对图中箭头类型的一些设置
plt.text(-3.7, 3, r'$This\ is\ the\ some\ text. \mu\ \sigma_i\ \alpha_t$',
         fontdict={'size': 16, 'color': 'r'})
#其中-3.7, 3,是选取text的位置, 空格需要用到转字符\ ,fontdict设置文本字体.
plt.show()

这里写图片描述

7. Scatter散点图

import matplotlib.pyplot as plt
import numpy as np

n = 1024  # 总共1024个点
X = np.random.normal(0,1,n)  #  随机产生x数据
Y = np.random.normal(0,1,n)  # 随机产生Y数据
T = np.arctan2(Y,X)  # 这个仅仅是产生颜色而已
plt.figure()
plt.scatter(X,Y,s=75,alpha=0.5,c=T)
plt.xticks(())  # 隐去坐标轴
plt.yticks(())
plt.show() # 显示图像

这里写图片描述

8. Bar柱状图

import matplotlib.pyplot as plt 
import numpy as np

#### 1 prepare data
n = 12
X = np.arange(n)
Y1 = (1 - X/float(n)) * np.random.uniform(0.5, 1, n)
Y2 = (1 - X/float(n)) * np.random.uniform(0.5, 1, n)
plt.figure()
plt.bar(X,+Y1)  # 这里前面加了一个+的含义就是Bar在坐标轴上面显示
plt.bar(X,-Y2)  #这里前面加了一个-的含义就是bar在坐标轴下面显示
plt.xlim(-2,12)
plt.xticks(())  # 隐去x轴坐标显示
plt.ylim(-1.25,1.25) # 设置坐标的显示范围
plt.yticks(())  # 隐藏坐标
#2 设置主体颜色和背景颜色,其实默认已经有了区分的颜色了这里只是知道怎么使用他
plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
### 3 显示bar上面的数字
for x,y in zip(X,Y1):
    plt.text(x-0.4,y+0.1,"%.2f" %y)
for x,y in zip(X,Y2):
    plt.text(x-0.4,-y-0.1,"%.2f" % y)
plt.show()

这里写图片描述

9. Contours等高线图绘制

import numpy as np
import matplotlib.pyplot as plt

def fn(x,y):
    return (1 - x/2 + x**5 + y**3) * (np.exp(-x**2 - y**2))

n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)
X,Y = np.meshgrid(x,y)  # 产生了格点数据
plt.contourf(X,Y,fn(X,Y),8,alpha=0.75,cmap=plt.cm.hot)   # contourf首先产生的是等高线里面的填充数据,8代表等高线的密集程度,这里被分为10个部分。如果是0,则图像被一分为二。,alpha显示的是透明度,cmp显示的是等高线显示的颜色
C = plt.contour(X,Y,fn(X,Y),8,colors='black',linewidth=0.5)
plt.clabel(C, inline=True, fontsize=10)
# 最后加入Label,inline控制是否将Label画在线里面,字体大小为10。并将坐标轴隐藏:
plt.xticks(())
plt.yticks(())
plt.show()

这里写图片描述

10. 显示图片

出图方式可以参考以下网站

import numpy as np
import matplotlib.pyplot as plt

a = np.array([0.313660827978, 0.365348418405, 0.423733120134,
              0.365348418405, 0.439599930621, 0.525083754405,
              0.423733120134, 0.525083754405, 0.651536351379]).reshape(3,3)
plt.imshow(a,interpolation='nearest', cmap='bone', origin='lower')  # cmp是显示的颜色,origin参数是可以'upper'以及'lower'
plt.colorbar(shrink=0.9)  #  shrink是bar显示占的比重,默认是100,现在是0.9表示显示占了90%
plt.show()

这里写图片描述

11. 显示3D数据

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D  # 导入3D数据包

figure = plt.figure()  # 设置一个figure对象
ax = Axes3D(figure)  # 设置3D对象
x = np.arange(-4,4,0.25)
y = np.arange(-4,4,0.25)
X,Y = np.meshgrid(x,y)  # 生成x,y的珊格
H = np.sqrt(X **2 + Y**2)
Z = np.sin(H)  # 生成Z轴的坐标
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap='rainbow')  # rstride和cstride参数显示的显示3的珊格的细密程程度,cmap显示的显示的颜色
ax.contourf(X,Y,Z,offset=-2,cmap='rainbow',zdir='z')  # 设置投影,这里zdir表是往z投影,offset表示3D离投影图形的距离
ax.set_zlim(-2,2)  # 设置Z轴显示
plt.show()

这里写图片描述

12. subplot多合一显示

import numpy as np
import matplotlib.pyplot as plt 

plt.figure()

plt.subplot(211)  # 这个是不均匀的显示
plt.plot([0,1],[0,1])    # 一行占了三个小图相当于
plt.subplot(234)  # 由于第一行相当于占了三个小图,所以这里我们显示第二个的图的时候,我们相当于从第四个图开始显示
plt.plot([0,1],[0,2])  
plt.subplot(235)
plt.plot([0,1],[0,3])
plt.subplot(236)
plt.plot([0,1],[0,4])

plt.show()

这里写图片描述

13. subplot分格显示

import matplotlib.pyplot as plt 

plt.figure()
ax1 = plt.subplot2grid((3,3),(0,0),colspan=3,rowspan=1)  # 这里(3,3)显示的整个图分成几个格子,(0,0)是初始位置,colspan是列的跨度,rowspan是行的跨度
ax1.plot([0,1],[0,1])
ax2 = plt.subplot2grid((3,3),(1,0),colspan=2,rowspan=1)
ax3 = plt.subplot2grid((3,3),(1,2),colspan=1,rowspan=2)
ax4 = plt.subplot2grid((3,3),(2,0),colspan=1,rowspan=1)
ax5 = plt.subplot2grid((3,3),(2,1),colspan=1,rowspan=1)

plt.show()  # 所以从这里我们看出subplot2grid主要的思想就是改成了grid形式,和上面的subplot不同的就是

这里写图片描述

14. 图中图

import matplotlib.pyplot as plt
#1 prepaer data
x = [1,2,3,4,5,6,7]
y = [1,3,4,2,5,8,6]
fig = plt.figure()

left,bottom,width,height = 0.1,0.1,0.8,0.8  # 这几个参数控制的是显示图的坐标信息
ax1 = fig.add_axes([left,bottom,width,height])  
ax1.plot(x,y)
ax1.set_title('figure')
ax1.set_xlabel('x')
ax1.set_ylabel('y')

ax1 = fig.add_axes([0.2,0.6,0.25,0.25])  # 这几个参数控制的是小图
ax1.plot(y,x)
ax1.set_title('figure1')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
plt.show()

这里写图片描述

15. 次坐标轴

import numpy as np
import matplotlib.pyplot as plt 

x = np.arange(0,10,0.1)
y1 = 0.05 * x**2
y2 = -1 * y1
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()  # 翻转坐标轴,镜面对称  可以共享坐标轴
ax1.plot(x,y1,'r')
ax1.set_xlabel('x')
ax1.set_ylabel('y1')
ax2.plot(x,y2,'b',linestyle='--')
ax2.set_ylabel('y2')
plt.show()

这里写图片描述

更多内容可以参考我的github主页

猜你喜欢

转载自blog.csdn.net/alxe_made/article/details/80493254