0. matplotlib和seaborn比较

Seaborn的底层是基于Matplotlib的,他们的差异有点像在点餐时选套餐还是自己点的区别,Matplotlib是独立点菜,可能费时费心(尤其是对我这种选择困难症患者…)但最后上桌的菜全是特别适合自己的;而Seaborn是点套餐,特别简单,一切都是配好的,虽然省时省心,但可能套餐里总有些菜是不那么合自己口味的。

1. matplotlib模块

1.1 简单线条、横纵坐标和图例

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = np.linspace(-3,3,50)
  4. y_1 = x*2
  5. y_2 = x**2
  6. plt.figure()
  7. l1, = plt.plot(x, y_1, label='linear line')
  8. l2, = plt.plot(x, y_2, color='red', linewidth=1.0, linestyle='--', label='square line')
  9. #设置横纵坐标范围和名称
  10. plt.xlim((-1, 2))
  11. plt.ylim((-2, 3))
  12. plt.xlabel('I am x')
  13. plt.ylabel('I am y')
  14. #隐藏坐标轴
  15. #plt.xticks(())
  16. #plt.yticks(())
  17. #设置图例
  18. #plt.legend(loc='upper right')
  19. #设置图例并重新命名标签
  20. plt.legend(handles=[l1, l2], labels=['up', 'down'], loc='best')
  21. plt.show()

Figure_1.png

1.2 散点图

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = np.random.randn(20)
  4. y_1 = np.random.randn(20)
  5. T = np.arctan2(y_1, x) # for color value
  6. plt.figure()
  7. plt.scatter(x, y_1, c=T)
  8. plt.show()

Figure_1.png

1.3 柱状图

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. n = 12
  4. X = np.arange(n)
  5. Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
  6. Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
  7. plt.bar(X, +Y1)
  8. plt.bar(X, -Y2)
  9. plt.xlim(-.5, n)
  10. plt.xticks(())
  11. plt.ylim(-1.25, 1.25)
  12. plt.yticks(())
  13. #设置主题颜色和边框颜色
  14. plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
  15. plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
  16. #添加数值标签
  17. for x, y in zip(X, Y1):
  18. #横向居中对齐,纵向底部对齐
  19. plt.text(x , y , '%.2f' % y, ha='center', va='bottom')
  20. for x, y in zip(X, Y2):
  21. plt.text(x , -y , '%.2f' % y, ha='center', va='top')
  22. plt.show()

Figure_1.png

1.4 等高线

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. #计算二维点高度的函数,从而形成对应的三维数据
  4. def f(x,y):
  5. # the height function
  6. return (1 - x / 2 + x**5 + y**3) * np.exp(-x**2 -y**2)
  7. n = 256
  8. x = np.linspace(-3, 3, n)
  9. y = np.linspace(-3, 3, n)
  10. #在二维平面中将每一个x和每一个y分别对应起来,编织成栅格
  11. X,Y = np.meshgrid(x, y)
  12. #颜色填充,使用函数plt.contourf把颜色加进去
  13. plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot)
  14. #等高线绘制,使用plt.contour函数划线
  15. C = plt.contour(X, Y, f(X, Y), 8, colors='black', linewidth=.5)
  16. #添加高度数字
  17. plt.clabel(C, inline=True, fontsize=10)
  18. plt.xticks(())
  19. plt.yticks(())
  20. plt.show()

Figure_1.png

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()

Figure_1.png

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()

Figure_1.png

Seaborn模块