matplotlib学习

专门整理一下mpl主要是想过一下作图中所有的可变元素,方便自定义作图,对后面学具体图或者seaborn等有帮助,mpl有两种接口,一种是模仿matlab实现的接口pyplot(plt),另一种是面向对象的。

目前的许多实现教程大部分没有区分这两种接口,很多时候都在混用,使得想要掌握mpl全貌不是很方便。但自己学可视化主要不是扩展API的名字用法,主要还是想扩展更多的可视化图。

这个github项目^4感觉写得不错,细节可以参考这个

组件目录

  • Matplotlib
    • 容器类:图(figure)、坐标系(axes)、坐标轴(axis)、刻度(tick)
      • 主要是图外的辅助内容,与数据无关
    • 基础类:线(line)、点(marker)、文字(text)、图例(legend)、网格(grid)、标题(title)
      • 需要结合数据进行维护的内容

主要内容

matplotlib有一套完全仿照MATLAB的函数形式的绘图接口,在matplotlib.pyplot模块中。这套函数接口方便MATLAB用户过度到matplotlib包。

  • 基本流程

    1. 创建figure实例;
    2. 在figure上创建axes;
    3. 在axes上添加基础类对象。

准备

# !pip install brewer2mpl
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import warnings; warnings.filterwarnings(action='once')

large = 22; med = 16; small = 12
params = {'axes.titlesize': large,
          'legend.fontsize': med,
          'figure.figsize': (16, 10),
          'axes.labelsize': med,
          'axes.titlesize': med,
          'xtick.labelsize': med,
          'ytick.labelsize': med,
          'figure.titlesize': large}
plt.rcParams.update(params)
plt.style.use('seaborn-whitegrid')
sns.set_style("white")
%matplotlib inline

展示

plt.gca().set(xlim=(0.0, 0.1), ylim=(0, 90000),
              xlabel='Area', ylabel='Population') # gca == get current axes

plt.xticks(fontsize=12); plt.yticks(fontsize=12)
plt.title("Bubble Plot with Encircling", fontsize=22)
plt.legend(fontsize=12)    
plt.show()    

Fig

建立一个fig(matlab式的代码可以不用加这个,这里是为了配置一些参数)

plt.figure(figsize=(16, 10), dpi= 80, facecolor='w', edgecolor='k')

颜色控制

plt.cm中有许多色带,可供我们选择,使用方法就是plt.cm.tab10(float_between_0_and_1)

colors = [plt.cm.tab10(i/float(len(categories)-1)) for i in range(len(categories))]

有些作图函数有cmap参数只需要传cm中的类名就可以

ax_main.scatter('displ', 'hwy', s=df.cty*4, c=df.manufacturer.astype('category').cat.codes, alpha=.9, data=df, cmap="tab10", edgecolors='gray', linewidths=.5)

matplotlib-cheatsheet

样式讲得挺详细的

常见图

  • Scatter

     plt.scatter('area', 'poptotal', data=midwest.loc[midwest.category==category, :], s='dot_size', c=colors[i], label=str(category), edgecolors='black', linewidths=.5) # eg
    
参数名 作用
data 传一个dataFrame,此时需要指定要用的column名称
s 大小
c 颜色
label 指定这组散点的名称
edgecolors 散点边缘颜色
linewidths 散点边缘宽度
  • pie
  • plot
  • imshow
  • contour
  • text
  • fill
  • step
  • boxplot
  • hist
  • violinplot
  • barbs
  • eventplot
  • hexbin
  • xcorr

Reference