0. matplotlib和seaborn比较
Seaborn的底层是基于Matplotlib的,他们的差异有点像在点餐时选套餐还是自己点的区别,Matplotlib是独立点菜,可能费时费心(尤其是对我这种选择困难症患者…)但最后上桌的菜全是特别适合自己的;而Seaborn是点套餐,特别简单,一切都是配好的,虽然省时省心,但可能套餐里总有些菜是不那么合自己口味的。
1. matplotlib模块
1.1 简单线条、横纵坐标和图例
import matplotlib.pyplot as pltimport numpy as npx = np.linspace(-3,3,50)y_1 = x*2y_2 = x**2plt.figure()l1, = plt.plot(x, y_1, label='linear line')l2, = plt.plot(x, y_2, color='red', linewidth=1.0, linestyle='--', label='square line')#设置横纵坐标范围和名称plt.xlim((-1, 2))plt.ylim((-2, 3))plt.xlabel('I am x')plt.ylabel('I am y')#隐藏坐标轴#plt.xticks(())#plt.yticks(())#设置图例#plt.legend(loc='upper right')#设置图例并重新命名标签plt.legend(handles=[l1, l2], labels=['up', 'down'], loc='best')plt.show()
1.2 散点图
import matplotlib.pyplot as pltimport numpy as npx = np.random.randn(20)y_1 = np.random.randn(20)T = np.arctan2(y_1, x) # for color valueplt.figure()plt.scatter(x, y_1, c=T)plt.show()
1.3 柱状图
import matplotlib.pyplot as pltimport numpy as npn = 12X = np.arange(n)Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)plt.bar(X, +Y1)plt.bar(X, -Y2)plt.xlim(-.5, n)plt.xticks(())plt.ylim(-1.25, 1.25)plt.yticks(())#设置主题颜色和边框颜色plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')#添加数值标签for x, y in zip(X, Y1):#横向居中对齐,纵向底部对齐plt.text(x , y , '%.2f' % y, ha='center', va='bottom')for x, y in zip(X, Y2):plt.text(x , -y , '%.2f' % y, ha='center', va='top')plt.show()
1.4 等高线
import matplotlib.pyplot as pltimport numpy as np#计算二维点高度的函数,从而形成对应的三维数据def f(x,y):# the height functionreturn (1 - x / 2 + x**5 + y**3) * np.exp(-x**2 -y**2)n = 256x = np.linspace(-3, 3, n)y = np.linspace(-3, 3, n)#在二维平面中将每一个x和每一个y分别对应起来,编织成栅格X,Y = np.meshgrid(x, y)#颜色填充,使用函数plt.contourf把颜色加进去plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot)#等高线绘制,使用plt.contour函数划线C = plt.contour(X, Y, f(X, Y), 8, colors='black', linewidth=.5)#添加高度数字plt.clabel(C, inline=True, fontsize=10)plt.xticks(())plt.yticks(())plt.show()
1.5 3D图
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
# X, Y value
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y) # x-y 平面的网格
R = np.sqrt(X ** 2 + Y ** 2)
# height value
Z = np.sin(R)
#做出一个三维曲面,并将一个 colormap rainbow 填充颜色,之后将三维图像投影到 XY 平面上做一个等高线图
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'))
#添加投影
ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap=plt.get_cmap('rainbow'))
plt.show()
1.6 多合一显示
import matplotlib.pyplot as plt
plt.figure()
#使用plt.subplot(2,1,1)将整个图像窗口分为2行1列, 当前位置为1.
#使用plt.plot([0,1],[0,1])在第1个位置创建一个小图.
plt.subplot(2,1,1)
plt.plot([0,1],[0,1])
plt.subplot(2,3,4)
plt.plot([0,1],[0,2])
plt.show()

