国外大神制作的一个很棒的matplotlib 可视化教程

参考:https://www.machinelearningplus.com/plots/top-50-matplotlib-visualizations-the-master-plots-python/

♔一:关联

  • 散点图
  • 带边界的气泡图
  • 散点图与最佳拟合线
  • 与stripplot抖动
  • 计数图
  • 边缘直方图
  • 边缘Boxplot
  • 相关图
  • 矩阵图

♔二:偏差

  • 发散酒吧
  • 分歧的文本
  • 分散点图
  • 用标记分散棒棒糖图表
  • 面积图

♔三:排行

  • 条形图
  • 棒棒糖图表
  • 点图
  • 坡度图
  • 哑铃情节

♔四:分配

  • 连续变量的直方图
  • 分类变量的直方图
  • 密度图
  • 密度曲线与直方图
  • Joy Plot
  • 分布式点图
  • 箱形图
  • Dot + Box Plot
  • 小提琴剧情
  • 人口金字塔
  • 分类图

♔五:组成

  • 华夫饼图
  • 饼形图
  • 树形图
  • 条形图

♔六:更改

  • 时间序列图
  • 带有峰和谷的时间序列注释
  • 自相关图
  • 交叉关联图
  • 时间序列分解图
  • 多个时间序列
  • 使用辅助Y轴绘制不同比例的绘图
  • 带有误差带的时间序列
  • 堆积面积图
  • 区域图未拆封
  • 日历热图
  • 季节性情节

♔七:组

  • 树状图
  • 群集图
  • 安德鲁斯曲线
  • 平行坐标

11 散点图 Scatteplot

Scatteplot 是用于研究两个变量之间关系的经典和基本图。如果数据中有多个组,则可能需要以不同颜色可视化每个组。在Matplotlib,你可以方便地使用。

# Import dataset
%matplotlib
import pandas as pd
import numpy as np
import matplotlib as mpl
from matplotlib import patches
from matplotlib import font_manager as fm
from matplotlib import pyplot as plt
from scipy.spatial import ConvexHull
import seaborn as sns import warnings; warnings.simplefilter('ignore') midwest = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv") zhongwen_font = fm.FontProperties(fname='C:\Windows\Fonts\华文楷体.ttf') # Step 1: 准备数据
# 创建尽可能多的颜色,因为有独特的midwest['category']
categories = np.unique(midwest['category'])
colors = [plt.cm.tab10(i/float(len(categories)-1)) for i in range(len(categories))] # Step 2:为每个类别绘制图形
plt.figure(figsize=(16, 10), dpi= 80, facecolor='w', edgecolor='k') for i, category in enumerate(categories):
plt.scatter('area', 'poptotal',
data=midwest.loc[midwest.category==category, :],
s=20, c=colors[i], label=str(category)) # Step 3:展示优化:设置图例等
plt.gca().set(xlim=(0.0, 0.1), ylim=(0, 90000),
xlabel='地区', ylabel='人口') plt.xticks(fontsize=12, fontproperties = zhongwen_font)
plt.yticks(fontsize=12, fontproperties = zhongwen_font)
plt.title("中西部地区人口分布图", fontsize=22, fontproperties = zhongwen_font) plt.legend(fontsize=12, prop = zhongwen_font)
plt.show()

2. 带边界的气泡图

有时,您希望在边界内显示一组点以强调其重要性。在此示例中,您将从应该被环绕的数据帧中获取记录,并将其传递给下面的代码中描述的记录。encircle()

%matplotlib
import pandas as pd
import numpy as np
import matplotlib as mpl
from matplotlib import patches
from matplotlib import font_manager as fm
from matplotlib import pyplot as plt
from scipy.spatial import ConvexHull
from matplotlib import patches import seaborn as sns import warnings; warnings.simplefilter('ignore')
sns.set_style("white") # S1: 准备数据
midwest = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv") zhongwen_font = fm.FontProperties(fname='C:\Windows\Fonts\simsun.ttc') # 创建尽可能多的颜色,因为有独特的midwest['category']y']
categories = np.unique(midwest['category'])
colors = [plt.cm.tab10(i/float(len(categories)-1)) for i in range(len(categories))] # S2: 为每个类别绘制图形
fig = plt.figure(figsize=(16, 10), dpi= 80, facecolor='w', edgecolor='k') for i, category in enumerate(categories):
plt.scatter('area', 'poptotal', data=midwest.loc[midwest.category==category, :], s='dot_size', c=colors[i], label=str(category), edgecolors='black', linewidths=.5) # S3: 边界
# https://stackoverflow.com/questions/44575681/how-do-i-encircle-different-data-sets-in-scatter-plot
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) # 选择要包围的数据
midwest_encircle_data = midwest.loc[midwest.state=='IN', :] # 围绕顶点绘图
encircle(midwest_encircle_data.area, midwest_encircle_data.poptotal, ec="k", fc="gold", alpha=0.1)
encircle(midwest_encircle_data.area, midwest_encircle_data.poptotal, ec="firebrick", fc="none", linewidth=1.5) # S4: 优化图例
plt.gca().set(xlim=(0.0, 0.1), ylim=(0, 90000),
xlabel='Area', ylabel='Population') plt.xticks(fontsize=12, fontproperties = zhongwen_font)
plt.yticks(fontsize=12, fontproperties = zhongwen_font)
plt.title("气泡图", fontsize=22, fontproperties = zhongwen_font)
plt.legend(fontsize=12, prop = zhongwen_font)
plt.show()

3. 带线性回归最佳拟合线的散点图

如果你想了解两个变量如何相互改变,那么最合适的线就是要走的路。下图显示了数据中各组之间最佳拟合线的差异。要禁用分组并仅为整个数据集绘制一条最佳拟合线,请从下面的调用中删除该参数。

# Import dataset
%matplotlib
import pandas as pd
import numpy as np
import matplotlib as mpl
from matplotlib import patches
from matplotlib import font_manager as fm
from matplotlib import pyplot as plt
from scipy.spatial import ConvexHull
import seaborn as sns import warnings; warnings.simplefilter('ignore')
# S1 : 数据
df = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")
zhongwen_font = fm.FontProperties(fname='C:\Windows\Fonts\simsun.ttc') df_select = df.loc[df.cyl.isin([4,8]), :] # S2 : 作图
sns.set_style("white")
gridobj = sns.lmplot(x="displ", y="hwy", hue="cyl", data=df_select,
aspect=1.6, robust=True, palette='tab10',
scatter_kws=dict(s=60, linewidths=.7, edgecolors='black')) # S3 :优化
gridobj.set(xlim=(0.5, 7.5), ylim=(0, 50))
plt.title("带线性回归最佳拟合线的散点图", fontsize=20, fontproperties = zhongwen_font)
plt.show()

每个回归线都在自己的列中

或者,您可以在其自己的列中显示每个组的最佳拟合线。你可以通过在里面设置参数来实现这一点。

# Import Data
df = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")
df_select = df.loc[df.cyl.isin([4,8]), :] # Each line in its own column
sns.set_style("white")
gridobj = sns.lmplot(x="displ", y="hwy",
data=df_select,
height=7,
robust=True,
palette='Set1',
col="cyl",
scatter_kws=dict(s=60, linewidths=.7, edgecolors='black')) # Decorations
gridobj.set(xlim=(0.5, 7.5), ylim=(0, 50))
plt.show()

4. 抖动图 Stripplot

通常,多个数据点具有完全相同的X和Y值。结果,多个点相互绘制并隐藏。为避免这种情况,请稍微抖动点,以便您可以直观地看到它们。这很方便使用

%matplotlib
import pandas as pd
import numpy as np
import matplotlib as mpl
from matplotlib import patches
from matplotlib import font_manager as fm
from matplotlib import pyplot as plt
from scipy.spatial import ConvexHull
from matplotlib import patches import seaborn as sns import warnings; warnings.simplefilter('ignore') # S1:数据
df = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")
zhongwen_font = fm.FontProperties(fname='C:\Windows\Fonts\simsun.ttc') # S2:作图
fig, ax = plt.subplots(figsize=(16,10), dpi= 80)
sns.stripplot(df.cty, df.hwy, jitter=0.25, size=8, ax=ax, linewidth=.5) # S3:优化
plt.title('使用抖动图避免点重叠', fontsize=22, fontproperties = zhongwen_font)
plt.show()

  1. 相关图

Correlogram用于直观地查看给定数据帧(或2D数组)中所有可能的数值变量对之间的相关度量。

%matplotlib
import pandas as pd
import numpy as np
import matplotlib as mpl
from matplotlib import patches
from matplotlib import font_manager as fm
from matplotlib import pyplot as plt
from scipy.spatial import ConvexHull
from matplotlib import patches import seaborn as sns import warnings; warnings.simplefilter('ignore') # S1: 数据
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")
zhongwen_font = fm.FontProperties(fname='C:\Windows\Fonts\simsun.ttc') # S2: 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) # S3: 图例优化
plt.title('相关图', fontsize=22, fontproperties = zhongwen_font)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()

9. 矩阵图

成对图是探索性分析中的最爱,以理解所有可能的数字变量对之间的关系。它是双变量分析的必备工具。

%matplotlib
import pandas as pd
import numpy as np
import matplotlib as mpl
from matplotlib import patches
from matplotlib import font_manager as fm
from matplotlib import pyplot as plt
from scipy.spatial import ConvexHull
from matplotlib import patches import seaborn as sns import warnings; warnings.simplefilter('ignore') # Load Dataset
df = sns.load_dataset('iris') # Plot
plt.figure(figsize=(10,8), dpi= 80)
sns.pairplot(df, kind="scatter", hue="species", plot_kws=dict(s=80, edgecolor="white", linewidth=2.5))
plt.show()

23. 直方密度线图

带有直方图的密度曲线将两个图表传达的集体信息汇集在一起,这样您就可以将它们放在一个图形而不是两个图形中。

%matplotlib
import pandas as pd
import numpy as np
import matplotlib as mpl
from matplotlib import patches
from matplotlib import font_manager as fm
from matplotlib import pyplot as plt
from scipy.spatial import ConvexHull
from matplotlib import patches import seaborn as sns import warnings; warnings.simplefilter('ignore') # S1:数据
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")
zhongwen_font = fm.FontProperties(fname='C:\Windows\Fonts\simsun.ttc') # S2:作图
plt.figure(figsize=(13,10), dpi= 80)
sns.distplot(df.loc[df['class'] == 'compact', "cty"], color="dodgerblue", label="Compact", hist_kws={'alpha':.7}, kde_kws={'linewidth':3})
sns.distplot(df.loc[df['class'] == 'suv', "cty"], color="orange", label="SUV", hist_kws={'alpha':.7}, kde_kws={'linewidth':3})
sns.distplot(df.loc[df['class'] == 'minivan', "cty"], color="g", label="minivan", hist_kws={'alpha':.7}, kde_kws={'linewidth':3})
plt.ylim(0, 0.35) # S3:图例
plt.title('不同车型类型城市里程密度图', fontsize=22, fontproperties = zhongwen_font)
plt.legend()
plt.show()

45. 日历热力图

与时间序列相比,日历映射是可视化基于时间的数据的备选和不太优选的选项。虽然可以在视觉上吸引人,但数值并不十分明显。然而,它可以很好地描绘极端值和假日效果。

import pandas as pd
import matplotlib as mpl
from matplotlib import pyplot as plt
import calmap as calmap

# S1:数据
df = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/yahoo.csv", parse_dates=['date'])
df.set_index('date', inplace=True)

# S2:绘图
plt.figure(figsize=(16,10), dpi= 80)
calmap.calendarplot(df['2014']['VIX.Close'], fig_kws={'figsize': (16,10)}, yearlabel_kws={'color':'black', 'fontsize':14}, subplot_kws={'title':'Yahoo Stock Prices'})
plt.show()

 

by : 一只阿木木

国外大神制作的一个很棒的matplotlib 可视化教程的更多相关文章

  1. Makefile经典教程(一个很棒很清晰的讲解)【转】

    转自:https://blog.csdn.net/seven_amber/article/details/70216216 该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神 ...

  2. 阅读国外大神对this的分析,自己的总结

    大神的分析地址:http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/#comment- ...

  3. 很棒的Sketch动画教程

    就像别人可以用PPT做动画,而你只会用它做演示,别人可以拿ps做gif,你却只会用它p照片.软件就是这样,我们使用大多数的软件也就是了解的程度,很难算得上精通.(后面补充了小教程,想看干货的直接看后面 ...

  4. 学习Python不得不关注和学习的国外大神博客

    注意 : 本文收集于网路 . 由于常常更新 , 有些链接打不开, 请自备梯子 在学习Python过程中,总会遇到各种各样的坑, 虽然Python是一门优美而简单易学的语言 . 但当学习后 , 总想着更 ...

  5. 国外大神说:在编程中使用If语句的潜在危险

    大多数编程语言中if语句主要有两个作用:验证输入以保护域免受错误数据的影响,以及处理域内业务逻辑.但是,Udi Dahan最近在阿姆斯特丹DDD欧洲会议上的发言中指出,我们一般很     当我们查看系 ...

  6. 如何构建一个很棒网站页脚(Website Footer)

    对于很多人来说,制作页脚是只是设计师顺手而为的任务.它似乎很容易,似乎可以忽略不计.因为很多人都觉得网站底部很少人会去看,而且页脚链接的所有链接的点击率(CTR)都是最低的,何必呢? 真是这样的吗?下 ...

  7. 大神写的一个纯CSS圆角框,膜拜!(支持IE9一下的低版本)

    留着提醒自己,底层才是最重要的,不要一直傻瓜的编程下去! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  8. MD4C/CO46/MD04一个很棒的工单缺料分析

    大家好~~~ 之前在MD04物料分析的时候,看到有订单预留,双击有个订单报告可以显示一个订单物料是否缺料清单 这个单独的工单分析可以在T-code:MD4C,CO46查看,如果只是单独的使用,那么这两 ...

  9. Linux 下一个很棒的命令行工具

    导读 Taskwarrior 是 Ubuntu/Linux 下一个简单而直接的基于命令行的 TODO 工具.这个开源软件是我曾用过的最简单的基于命令行的工具之一.Taskwarrior 可以帮助你更好 ...

随机推荐

  1. 洛谷P1029 最大公约数和最小公倍数问题 题解

    题目链接:https://www.luogu.com.cn/problem/P1029 题目描述 输入 \(2\) 个正整数 \(x_0,y_0(2 \le x_0 \lt 100000,2 \le ...

  2. hadoop传递参数方法总结

    转自:http://blog.csdn.net/xichenguan/article/details/22162813 写MapReduce程序通常要传递各种各样的参数,选择合适的方式来传递参数既能提 ...

  3. 带有外部Tomcat的Spring Boot

    在本文中,我将如何在外部Tomcat上运行Spring Boot应用程序.对我来说,这是一个现实的场景,我必须解决这个问题,因此也请教了一下优锐课老师,得到了很多帮助.也希望当你遇到类似问题时,能为你 ...

  4. Qt5学习(1)

    1. In Qt, if you want to apply styles to the main window  itself, you must apply it to  its central ...

  5. fastjson使用详解

    目录 二.fastjson使用 三.fastjson 常用 API 四.fastjson使用演示 测试类准备 1.java类转换为json字符串 2.json字符串转为java类 五.fastjson ...

  6. sparkstreaming消费kafka后bulk到es

    不使用es-hadoop的saveToES,与scala版本冲突问题太多.不使用bulkprocessor,异步提交,es容易oom,速度反而不快.使用BulkRequestBuilder同步提交. ...

  7. Jquery图片上传功能整理

    最近在做一个图片上传到服务器的功能,之前基本没有什么JS的经验,用的也是网上的插件.做了一个星期才把他弄好,现在做一下总结,方便以后查看. 用的插件是WebUploader,上面有很多例子,我找的例子 ...

  8. C# 使用nuget.exe发布类库及更新类库

    前景:在开发学习阶段希望一些重复使用代码或者算法代码积累.能够在VS中下载安装方便使用. 准备工作: 1.Nuget登录账号(可 Microsoft 账号).Nuget官网 2.Nuget.exe程序 ...

  9. 避免在ASP.NET Core 3.0中为启动类注入服务

    本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0类库转换为.NET Core 3.0类库 Part 2 - IHostingE ...

  10. Scala实践9

    1.特征 Traits用于在类之间共享接口和字段.它们类似于Java 8的接口.类和对象可以扩展特征,但是特征不能被实例化,因此没有参数. 定义一个特征 最小特征只是关键字trait和标识符: tra ...