本帖最后由 quant001 于 2019-8-24 16:56 编辑
1.二维绘图a. 一维数据集用 Numpy ndarray 作为数据传入 ply 1.- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(1000)
- y = np.random.standard_normal(10)
- print "y = %s"% y
- x = range(len(y))
- print "x=%s"% x
- plt.plot(y)
- plt.show()
复制代码
2.操纵坐标轴和增加网格及标签的函数
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(1000)
- y = np.random.standard_normal(10)
- plt.plot(y.cumsum())
- plt.grid(True) ##增加格点
- plt.axis('tight') # 坐标轴适应数据量 axis 设置坐标轴
- plt.show()
复制代码
3.plt.xlim 和 plt.ylim 设置每个坐标轴的最小值和最大值
- #!/etc/bin/python
- #coding=utf-8
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(1000)
- y = np.random.standard_normal(20)
- plt.plot(y.cumsum())
- plt.grid(True) ##增加格点
- plt.xlim(-1,20)
- plt.ylim(np.min(y.cumsum())- 1, np.max(y.cumsum()) + 1)
- plt.show()
复制代码
4. 添加标题和标签 plt.title, plt.xlabe, plt.ylabel 离散点, 线
- #!/etc/bin/python
- #coding=utf-8
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(1000)
- y = np.random.standard_normal(20)
- plt.figure(figsize=(7,4)) #画布大小
- plt.plot(y.cumsum(),'b',lw = 1.5) # 蓝色的线
- plt.plot(y.cumsum(),'ro') #离散的点
- plt.grid(True)
- plt.axis('tight')
- plt.xlabel('index')
- plt.ylabel('value')
- plt.title('A simple Plot')
- plt.show()
复制代码
b. 二维数据集
np.random.seed(2000)y = np.random.standard_normal((10, 2)).cumsum(axis=0) #10行2列 在这个数组上调用cumsum 计算赝本数据在0轴(即第一维)上的总和print y
1.两个数据集绘图
- #!/etc/bin/python
- #coding=utf-8
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(2000)
- y = np.random.standard_normal((10, 2))
- plt.figure(figsize=(7,5))
- plt.plot(y, lw = 1.5)
- plt.plot(y, 'ro')
- plt.grid(True)
- plt.axis('tight')
- plt.xlabel('index')
- plt.ylabel('value')
- plt.title('A simple plot')
- plt.show()
复制代码
2.添加图例 plt.legend(loc = 0)
- #!/etc/bin/python
- #coding=utf-8
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(2000)
- y = np.random.standard_normal((10, 2))
- plt.figure(figsize=(7,5))
- plt.plot(y[:,0], lw = 1.5,label = '1st')
- plt.plot(y[:,1], lw = 1.5, label = '2st')
- plt.plot(y, 'ro')
- plt.grid(True)
- plt.legend(loc = 0) #图例位置自动
- plt.axis('tight')
- plt.xlabel('index')
- plt.ylabel('value')
- plt.title('A simple plot')
- plt.show()
复制代码
3.使用2个 Y轴(左右)fig, ax1 = plt.subplots() ax2 = ax1.twinx()- #!/etc/bin/python
- #coding=utf-8
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(2000)
- y = np.random.standard_normal((10, 2))
- fig, ax1 = plt.subplots() # 关键代码1 plt first data set using first (left) axis
- plt.plot(y[:,0], lw = 1.5,label = '1st')
- plt.plot(y[:,0], 'ro')
- plt.grid(True)
- plt.legend(loc = 0) #图例位置自动
- plt.axis('tight')
- plt.xlabel('index')
- plt.ylabel('value')
- plt.title('A simple plot')
- ax2 = ax1.twinx() #关键代码2 plt second data set using second(right) axis
- plt.plot(y[:,1],'g', lw = 1.5, label = '2nd')
- plt.plot(y[:,1], 'ro')
- plt.legend(loc = 0)
- plt.ylabel('value 2nd')
- plt.show()
复制代码
4.使用两个子图(上下,左右)plt.subplot(211)通过使用 plt.subplots 函数,可以直接访问底层绘图对象,例如可以用它生成和第一个子图共享 x 轴的第二个子图.
- #!/etc/bin/python
- #coding=utf-8
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(2000)
- y = np.random.standard_normal((10, 2))
- plt.figure(figsize=(7,5))
- plt.subplot(211) #两行一列,第一个图
- plt.plot(y[:,0], lw = 1.5,label = '1st')
- plt.plot(y[:,0], 'ro')
- plt.grid(True)
- plt.legend(loc = 0) #图例位置自动
- plt.axis('tight')
- plt.ylabel('value')
- plt.title('A simple plot')
- plt.subplot(212) #两行一列.第二个图
- plt.plot(y[:,1],'g', lw = 1.5, label = '2nd')
- plt.plot(y[:,1], 'ro')
- plt.grid(True)
- plt.legend(loc = 0)
- plt.xlabel('index')
- plt.ylabel('value 2nd')
- plt.axis('tight')
- plt.show()
复制代码
5.左右子图有时候,选择两个不同的图标类型来可视化数据可能是必要的或者是理想的.利用子图方法:
- #!/etc/bin/python
- #coding=utf-8
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(2000)
- y = np.random.standard_normal((10, 2))
- plt.figure(figsize=(10,5))
- plt.subplot(121) #两行一列,第一个图
- plt.plot(y[:,0], lw = 1.5,label = '1st')
- plt.plot(y[:,0], 'ro')
- plt.grid(True)
- plt.legend(loc = 0) #图例位置自动
- plt.axis('tight')
- plt.xlabel('index')
- plt.ylabel('value')
- plt.title('1st Data Set')
- plt.subplot(122)
- plt.bar(np.arange(len(y)), y[:,1],width=0.5, color='g',label = '2nc')
- plt.grid(True)
- plt.legend(loc=0)
- plt.axis('tight')
- plt.xlabel('index')
- plt.title('2nd Data Set')
- plt.show()
复制代码
c.其他绘图样式,散点图,直方图等1.散点图 scatter- #!/etc/bin/python
- #coding=utf-8
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(2000)
- y = np.random.standard_normal((1000, 2))
- plt.figure(figsize=(7,5))
- plt.scatter(y[:,0],y[:,1],marker='o')
- plt.grid(True)
- plt.xlabel('1st')
- plt.ylabel('2nd')
- plt.title('Scatter Plot')
- plt.show()
复制代码
2.直方图 plt.hist- #!/etc/bin/python
- #coding=utf-8
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(2000)
- y = np.random.standard_normal((1000, 2))
- plt.figure(figsize=(7,5))
- plt.hist(y,label=['1st','2nd'],bins=25)
- plt.grid(True)
- plt.xlabel('value')
- plt.ylabel('frequency')
- plt.title('Histogram')
- plt.show()
复制代码
3.直方图 同一个图中堆叠- #!/etc/bin/python
- #coding=utf-8
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(2000)
- y = np.random.standard_normal((1000, 2))
- plt.figure(figsize=(7,5))
- plt.hist(y,label=['1st','2nd'],color=['b','g'],stacked=True,bins=20)
- plt.grid(True)
- plt.xlabel('value')
- plt.ylabel('frequency')
- plt.title('Histogram')
- plt.show()
复制代码
4.箱型图 boxplot- #!/etc/bin/python
- #coding=utf-8
- import numpy as np
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- np.random.seed(2000)
- y = np.random.standard_normal((1000, 2))
- fig, ax = plt.subplots(figsize=(7,4))
- plt.boxplot(y)
- plt.grid(True)
- plt.setp(ax,xticklabels=['1st' , '2nd'])
- plt.xlabel('value')
- plt.ylabel('frequency')
- plt.title('Histogram')
- plt.show()
复制代码
5.绘制函数- from matplotlib.patches import Polygon
- import numpy as np
- import matplotlib.pyplot as plt
- #1. 定义积分函数
- def func(x):
- return 0.5 * np.exp(x)+1
- #2.定义积分区间
- a,b = 0.5, 1.5
- x = np.linspace(0, 2 )
- y = func(x)
- #3.绘制函数图形
- fig, ax = plt.subplots(figsize=(7,5))
- plt.plot(x,y, 'b',linewidth=2)
- plt.ylim(ymin=0)
- #4.核心, 我们使用Polygon函数生成阴影部分,表示积分面积:
- Ix = np.linspace(a,b)
- Iy = func(Ix)
- verts = [(a,0)] + list(zip(Ix, Iy))+[(b,0)]
- poly = Polygon(verts,facecolor='0.7',edgecolor = '0.5')
- ax.add_patch(poly)
- #5.用plt.text和plt.figtext在图表上添加数学公式和一些坐标轴标签。
- plt.text(0.5 *(a+b),1,r"$\int_a^b f(x)\mathrm{d}x$", horizontalalignment ='center',fontsize=20)
- plt.figtext(0.9, 0.075,'$x
- [/size][/font][/backcolor][/color]
- [/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/color][/font]
- )
- plt.figtext(0.075, 0.9, '$f(x)
- [/size][/font][/backcolor][/color]
- [/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/color][/font]
- )
- #6. 分别设置x,y刻度标签的位置。
- ax.set_xticks((a,b))
- ax.set_xticklabels(('$a
- [/size][/font][/backcolor][/color]
- [/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/color][/font]
- ,'$b
- [/size][/font][/backcolor][/color]
- [/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/color][/font]
- ))
- ax.set_yticks([func(a),func(b)])
- ax.set_yticklabels(('$f(a)
- [/size][/font][/backcolor][/color]
- [/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/color][/font]
- ,'$f(b)
- [/size][/font][/backcolor][/color]
- [/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/size][/font][/backcolor][/color][/color][/font]
- ))
- plt.grid(True)
复制代码
|