【数据分析】Matplotlib可视化最有价值的图表之——7、分组(Groups)

在数据分析和可视化中最有用的 50 个 Matplotlib 图表。 这些图表列表允许使用 python 的 matplotlib 和 seaborn 库选择要显示的可视化对象。

这里开始第七部分内容:分组(Groups)

准备工作

在代码运行前先引入下面的设置内容。 当然,单独的图表,可以重新设置显示要素。

    # !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.2
  print(sns.__version__) # >> 0.9.0

本节内容

分组(Groups)

47 树状图 (Dendrogram) 48 簇状图 (Cluster Plot) 49 安德鲁斯曲线 (Andrews Curve) 50 平行坐标 (Parallel Coordinates)

47 树状图 (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()

在这里插入图片描述

48 簇状图 (Cluster Plot)

簇状图 (Cluster Plot)可用于划分属于同一群集的点。 下面是根据 USArrests 数据集将美国各州分为 5 组的代表性示例。 此图使用“谋杀”和“攻击”列作为 X 和 Y 轴。 或者,你可以将第一个到主要组件用作 X 轴和 Y 轴。

    from sklearn.cluster import AgglomerativeClustering
  from scipy.spatial import ConvexHull
   
  # Import Data
  df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/USArrests.csv')
   
  # Agglomerative Clustering
  cluster = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')  
  cluster.fit_predict(df[['Murder', 'Assault', 'UrbanPop', 'Rape']])  
   
  # Plot
  plt.figure(figsize=(14, 10), dpi= 80)  
  plt.scatter(df.iloc[:,0], df.iloc[:,1], c=cluster.labels_, cmap='tab10')  
   
  # Encircle
  def encircle(x,y, ax=None, **kw):
      if not ax: ax=plt.gca()
      p = np.c_[x,y]
      hull = ConvexHull(p)
      poly = plt.Polygon(p[hull.vertices,:], **kw)
      ax.add_patch(poly)
   
  # Draw polygon surrounding vertices    
  encircle(df.loc[cluster.labels_ == 0, 'Murder'], df.loc[cluster.labels_ == 0, 'Assault'], ec="k", fc="gold", alpha=0.2, linewidth=0)
  encircle(df.loc[cluster.labels_ == 1, 'Murder'], df.loc[cluster.labels_ == 1, 'Assault'], ec="k", fc="tab:blue", alpha=0.2, linewidth=0)
  encircle(df.loc[cluster.labels_ == 2, 'Murder'], df.loc[cluster.labels_ == 2, 'Assault'], ec="k", fc="tab:red", alpha=0.2, linewidth=0)
  encircle(df.loc[cluster.labels_ == 3, 'Murder'], df.loc[cluster.labels_ == 3, 'Assault'], ec="k", fc="tab:green", alpha=0.2, linewidth=0)
  encircle(df.loc[cluster.labels_ == 4, 'Murder'], df.loc[cluster.labels_ == 4, 'Assault'], ec="k", fc="tab:orange", alpha=0.2, linewidth=0)
   
  # Decorations
  plt.xlabel('Murder'); plt.xticks(fontsize=12)
  plt.ylabel('Assault'); plt.yticks(fontsize=12)
  plt.title('Agglomerative Clustering of USArrests (5 Groups)', fontsize=22)
  plt.show()

在这里插入图片描述

49 安德鲁斯曲线 (Andrews Curve)

安德鲁斯曲线有助于可视化是否存在基于给定分组的数字特征的固有分组。 如果要素(数据集中的列)无法区分组(cyl),那么这些线将不会很好地隔离,如下所示。

    from pandas.plotting import andrews_curves
   
  # Import
  df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")
  df.drop(['cars', 'carname'], axis=1, inplace=True)
   
  # Plot
  plt.figure(figsize=(12,9), dpi= 80)
  andrews_curves(df, 'cyl', colormap='Set1')
   
  # Lighten borders
  plt.gca().spines["top"].set_alpha(0)
  plt.gca().spines["bottom"].set_alpha(.3)
  plt.gca().spines["right"].set_alpha(0)
  plt.gca().spines["left"].set_alpha(.3)
   
  plt.title('Andrews Curves of mtcars', fontsize=22)
  plt.xlim(-3,3)
  plt.grid(alpha=0.3)
  plt.xticks(fontsize=12)
  plt.yticks(fontsize=12)
  plt.show()

在这里插入图片描述

50 平行坐标 (Parallel Coordinates)

平行坐标有助于可视化特征是否有助于有效地隔离组。 如果实现隔离,则该特征可能在预测该组时非常有用。

    from pandas.plotting import parallel_coordinates
   
  # Import Data
  df_final = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/diamonds_filter.csv")
   
  # Plot
  plt.figure(figsize=(12,9), dpi= 80)
  parallel_coordinates(df_final, 'cut', colormap='Dark2')
   
  # Lighten borders
  plt.gca().spines["top"].set_alpha(0)
  plt.gca().spines["bottom"].set_alpha(.3)
  plt.gca().spines["right"].set_alpha(0)
  plt.gca().spines["left"].set_alpha(.3)
   
  plt.title('Parallel Coordinated of Diamonds', fontsize=22)
  plt.grid(alpha=0.3)
  plt.xticks(fontsize=12)
  plt.yticks(fontsize=12)
  plt.show()

在这里插入图片描述

总结

第七部分【分组】(Groups) 就到这里结束啦~

传送门

Matplotlib可视化图表——第一部分【关联】(Correlation) Matplotlib可视化图表——第二部分【偏差】(Deviation) Matplotlib可视化图表——第三部分【排序】(Ranking) Matplotlib可视化图表——第四部分【分布】(Distribution) Matplotlib可视化图表——第五部分【组成】(Composition) Matplotlib可视化图表——第六部分【变化】(Change) Matplotlib可视化图表——第七部分【分组】(Groups)

完整版参考

原文地址: Top 50 matplotlib Visualizations – The Master Plots (with full python code) 中文转载:深度好文 | Matplotlib可视化最有价值的 50 个图表(附完整 Python 源代码)

 

posted @ 2021-06-29 19:33  zsfxg  阅读(232)  评论(0)    收藏  举报