乐趣区

关于机器学习:美化Matplotlib的3个小技巧

Matplotlib 是 Python 的数据可视化库的根底。它是其余可视化工具 (如 Seaborn) 的根底。

Matplotlib 提供了很大的灵活性,因而您能够自定义或调整简直所有的图表。然而想要齐全管制可视化就须要编写更多的代码。

在本文中,咱们将介绍 3 个能够用于定制 Matplotlib 图表的技巧:

  • 缩小 x 轴或 y 轴上的刻度数
  • 增加一个辅助 y 轴
  • 共享 x 轴的子图坐标对齐

本文中咱们将应用折线图为例,但这些技巧也能够利用于其余类型的图。我创立了一个数据集模仿价格和销售数据。

 import pandas as pd
 import numpy as np
 df = pd.read_csv("mock_sales_data.csv", nrows=100)
 df.head()

数据蕴含日期、价格和销售数量列。只显示了数据集的前 100 行。

缩小刻度数

如果在轴上绘制的数据点数量很多,刻度看起来十分的紧凑,甚至可能重叠。在解决工夫序列数据时,x 轴通常蕴含占用大量空间的日期,所以能够缩小轴上的刻度数来进步显示成果。

让咱们先做一个不限度 x 轴刻度数的例子。

 import matplotlib.pyplot as plt
 plt.style.use("seaborn-darkgrid")
 
 plt.figure(figsize=(12, 6))
 plt.plot(df["Date"], df["Price"])
 plt.show()

能够看到 X 轴的刻度重叠并且根本无法显示残缺。上面咱们增加设置只显示局部的刻度,这样能够残缺显示。

 plt.figure(figsize=(12, 6))
 plt.plot(df["Date"], df["Price"])
 #每 15 个刻度显示一次
 plt.xticks(np.arange(0, len(df), 15), fontsize=12)
 plt.yticks(fontsize=12)
 
 plt.show()

咱们应用 NumPy 的 arange 函数来指定标记的地位,当初看起来好多了。

应用辅助轴

如果想在同一个图上显示两个变量。例如将产品的价格和销售数量绘制在一起查看价格对销售数量的影响。

咱们的 DataFrame 中的销售数量和价格列显示在同一线图上,只有一个 y 轴。

能够看到价格和销售数量的取值范畴差距很大咱们简直看不到销售的变动,这时能够应用辅助轴来指定另外一条线的取值范畴。

 fig, ax1 = plt.subplots(figsize=(12,6))
 ax2 = ax1.twinx()
 
 ax1.plot(df["Date"], df["Price"])
 ax2.plot(df["Date"], df["SalesQty"], color="orange")
 ax1.set_ylabel("Price", fontsize=15)
 ax2.set_ylabel("SalesQty", fontsize=15)
 ax1.tick_params(axis='both', which='major', labelsize=12)
 ax2.tick_params(axis='both', which='major', labelsize=12)
 
 plt.xticks(np.arange(0, len(df), 15))
 ax1.grid(False)
 ax2.grid(False)
 
 plt.show()

看起来好多了。咱们能够分明的察看到价格与销售量之间的正比关系。

共享 x 轴的子图坐标对齐

咱们能够在一个 Figure 对象上创立多个子图。Matplotlib 容许应用 subplot 函数创立子图格。例如上面的代码行创立了一个蕴含 4 个子图的 2 ×2 网格图。

 fig, (ax1, ax2, ax3, ax4) = plt.subplots(nrows=2, ncols=2)

应用 nrows 和 ncols 参数自定义网格的大小。

如果咱们想在 2 个子图中共享 X 轴怎么办呢?咱们能够应用 tight_layout 函数。它能够用于调整子图之间的填充

 fig, (ax1, ax2) = plt.subplots(
     nrows=2, ncols=1, 
     sharex=True,
     figsize=(12, 8)
 )
 fig.tight_layout(pad=2)
 
 ax1.plot(df["Date"], df["Price"])
 ax1.set_title("Price", fontsize=15)
 
 ax2.plot(df["Date"], df["SalesQty"])
 ax2.set_title("SalesQty", fontsize=15)
 
 ax1.tick_params(axis='both', which='major', labelsize=12)
 ax2.tick_params(axis='both', which='major', labelsize=12)
 plt.xticks(np.arange(0, len(df), 15), fontsize=12)
 plt.show()

能够看到 2 个子图的 X 轴坐标(日期)都曾经对齐了,这对于剖析工夫序列时十分有用的,例如想比照 2 个产品或者 2 个不同的门店在同一期间的销售状况,通过对齐日期能够给出十分好的直观判断。

以上就是 3 个 Matplotlib 可视化的小技巧,这些技巧必定会帮忙你创立信息更丰盛、性能更弱小的数据可视化图表。

https://avoid.overfit.cn/post/bbb257b59ecc410c9611f2be2473b83d

作者:Soner Yıldırım

退出移动版