0. matplotlib和seaborn比较
Seaborn的底层是基于Matplotlib的,他们的差异有点像在点餐时选套餐还是自己点的区别,Matplotlib是独立点菜,可能费时费心(尤其是对我这种选择困难症患者…)但最后上桌的菜全是特别适合自己的;而Seaborn是点套餐,特别简单,一切都是配好的,虽然省时省心,但可能套餐里总有些菜是不那么合自己口味的。
1. matplotlib模块
1.1 简单线条、横纵坐标和图例
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3,3,50)
y_1 = x*2
y_2 = x**2
plt.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 plt
import numpy as np
x = np.random.randn(20)
y_1 = np.random.randn(20)
T = np.arctan2(y_1, x) # for color value
plt.figure()
plt.scatter(x, y_1, c=T)
plt.show()
1.3 柱状图
import matplotlib.pyplot as plt
import numpy as np
n = 12
X = 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 plt
import numpy as np
#计算二维点高度的函数,从而形成对应的三维数据
def f(x,y):
# the height function
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分别对应起来,编织成栅格
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()