网站首页资讯科技

50种常用的matplotlib可视化,再也不必忧虑模型背着我乱跑了

2019-01-11 05:04:32小编:仁怀安卓网点击数:

50 种可视化图原地址:https://www.machinelearningplus.com/plots/top-50-matplotlib-visualizations-the-master-plots-python

介绍

该表格首要介绍了 7 种不同的 matplotlib 可视化类别,读者可根据意图挑选不同的图。例如,假如你想要制造两个变量之间的联系,检查下面 Correlation 部分;或许假如你想展现某个变量的动态改变,检查下面的 Change 部分。

一个美丽的图表应该:

  • 供给精确、有需求的信息,不歪曲事实;

  • 规划简略,获取时不会太吃力;

  • 美感是为了支撑这些信息,而不是为了掩盖这些信息;

  • 不要供给过分丰厚的信息与过分杂乱的结构。

如下所示为 7 种不同类型的可视化图表:协相关性首要描绘的是不同变量之间的相互联系;误差首要展现出不同变量之间的不同;排序首要是一些有序的条形图、散点图或斜线图等;散布就是制造概率与计算中的散布图,包含离散型的直方图和接连型的概率密度散布图等。后边还有变量的时序改变图和类别图等常见的可视化制图类别。

装备

在制造这 50 种可视化图之前,咱们需求装备一下依靠项以及通用设定,当然后边有一些独立的美图会修正通用设定。假如读者看中了某种可视化图,那么用这些装备再加上对应的可视化代码就能嵌入到咱们自己的项目中。

如下所示 pandas 与 numpy 首要用于读取和处理数据,matplotlib 与 seaborn 首要用于可视化数据。其间 seaborn 其实是 matplotlib 上的一个高档 API 封装,在大多数状况下运用 seaborn 就能做出很有吸引力的图,而运用 matplotlib 能制造更具特征的图。

# !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

# Version
print(mpl.__version__)  #> 3.0.0
print(sns.__version__)  #> 0.9.0

制图暗示

前面列出了 7 大类共 50 种不同的可视化图,但咱们无法逐个介绍,因而咱们从协相关性、误差、散布、时序改变和群组图中各挑选了一个示例,它们能展现不同数据在不同状况下的可视化需求。

相关图(Correllogram)

若有两种变量,且它们的值为离散的,那么二维相关图能够表明两个变量一切或许组合之间的相关性。当然假如是单变量,那么本身一切或许的组合也能够组成一个相关图:

# Import Dataset
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")

# Plot
plt.figure(figsize=(12,10), dpi= 80)
sns.heatmap(df.corr(), xticklabels=df.corr().columns, yticklabels=df.corr().columns, cmap='RdYlGn', center=0, annot=True)

# Decorations
plt.title('Correlogram of mtcars', fontsize=22)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()

面积图(Area Chart)

经过运用不同的色彩表明水平轴和线之间的区域,面积图不只着重峰值和低谷值,一起还着重它们继续的时刻:即峰值继续时刻越长,面积越大。

import numpy as np
import pandas as pd

# Prepare Data
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/economics.csv", parse_dates=['date']).head(100)
x = np.arange(df.shape[0])
y_returns = (df.psavert.diff().fillna(0)/df.psavert.shift(1)).fillna(0) * 100

# Plot
plt.figure(figsize=(16,10), dpi= 80)
plt.fill_between(x[1:], y_returns[1:], 0, where=y_returns[1:] >= 0, facecolor='green', interpolate=True, alpha=0.7)
plt.fill_between(x[1:], y_returns[1:], 0, where=y_returns[1:] <= 0, facecolor='red', interpolate=True, alpha=0.7)

# Annotate
plt.annotate('Peak \n1975', xy=(94.0, 21.0), xytext=(88.0, 28),
             bbox=dict(boxstyle='square', fc='firebrick'),
             arrowprops=dict(facecolor='steelblue', shrink=0.05), fontsize=15, color='white')


# Decorations
xtickvals = [str(m)[:3].upper()+"-"+str(y) for y,m in zip(df.date.dt.year, df.date.dt.month_name())]
plt.gca().set_xticks(x[::6])
plt.gca().set_xticklabels(xtickvals[::6], rotation=90, fontdict={'horizontalalignment': 'center', 'verticalalignment': 'center_baseline'})
plt.ylim(-35,35)
plt.xlim(1,100)
plt.title("Month Economics Return %", fontsize=22)
plt.ylabel('Monthly returns %')
plt.grid(alpha=0.5)
plt.show()

密度图(Density Plot)

在概率论与计算学习办法中,可视化概率密度就变得非常重要了。这种密度图正是可视化接连型随机变量散布的利器,散布曲线上的每一个点都是概率密度,散布曲线下的每一段面积都是特定状况的概率。如下所示,经过将它们按「response」变量分组,咱们能够了解 X 轴和 Y 轴之间的联系。

# Import Data
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")

# Draw Plot
plt.figure(figsize=(16,10), dpi= 80)
sns.kdeplot(df.loc[df['cyl'] == 4, "cty"], shade=True, color="g", label="Cyl=4", alpha=.7)
sns.kdeplot(df.loc[df['cyl'] == 5, "cty"], shade=True, color="deeppink", label="Cyl=5", alpha=.7)
sns.kdeplot(df.loc[df['cyl'] == 6, "cty"], shade=True, color="dodgerblue", label="Cyl=6", alpha=.7)
sns.kdeplot(df.loc[df['cyl'] == 8, "cty"], shade=True, color="orange", label="Cyl=8", alpha=.7)

# Decoration
plt.title('Density Plot of City Mileage by n_Cylinders', fontsize=22)
plt.legend()
plt.show()

此外值得注意的是,深度学习,尤其是深度生成模型中的散布极端杂乱,它们是不能直接可视化的,咱们一般会经过 T-SNE 等降维办法可视化。

时序改变图(Time Series Plot)

时序改变图也是机器学习中最常见的一种可视化图表,不论是可视化丢失函数仍是精确率,都需求这种时序改变图的协助。这种图首要重视某个变量怎样随时刻改变而改变,以下展现了从 1949 到 1969 航空客运量的改变:

# Import Data
df = pd.read_csv('https://github.com/selva86/datasets/raw/master/AirPassengers.csv')

# Draw Plot
plt.figure(figsize=(16,10), dpi= 80)
plt.plot('date', 'traffic', data=df, color='tab:red')

# Decoration
plt.ylim(50, 750)
xtick_location = df.index.tolist()[::12]
xtick_labels = [x[-4:] for x in df.date.tolist()[::12]]
plt.xticks(ticks=xtick_location, labels=xtick_labels, rotation=0, fontsize=12, horizontalalignment='center', alpha=.7)
plt.yticks(fontsize=12, alpha=.7)
plt.title("Air Passengers Traffic (1949 - 1969)", fontsize=22)
plt.grid(axis='both', alpha=.3)

# Remove borders
plt.gca().spines["top"].set_alpha(0.0)    
plt.gca().spines["bottom"].set_alpha(0.3)
plt.gca().spines["right"].set_alpha(0.0)    
plt.gca().spines["left"].set_alpha(0.3)   
plt.show()

树状图(Dendrogram)

树状图是另一个比较有用的图表,层次聚类或决策树等算法能够运用它完结美丽的可视化。树形图是以树的图形表明数据或模型结构,以父层和子层的结构来安排目标,是枚举法的一种表达方式。下图展现了一种神似层次聚类算法的图表:

import scipy.cluster.hierarchy as shc

# Import Data
df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/USArrests.csv')

# Plot
plt.figure(figsize=(16, 10), dpi= 80)  
plt.title("USArrests Dendograms", fontsize=22)  
dend = shc.dendrogram(shc.linkage(df[['Murder', 'Assault', 'UrbanPop', 'Rape']], method='ward'), labels=df.State.values, color_threshold=100)  
plt.xticks(fontsize=12)
plt.show()