前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >美化Matplotlib的3个小技巧

美化Matplotlib的3个小技巧

作者头像
数据派THU
发布2022-10-09 10:13:29
2.1K0
发布2022-10-09 10:13:29
举报
文章被收录于专栏:数据派THU数据派THU

来源:DeepHub IMBA

本文约2300字,建议阅读5分钟

本文中,我们将介绍3个可以用于定制Matplotlib图表的技巧

Matplotlib是Python的数据可视化库的基础。它是其他可视化工具(如Seaborn)的基础。

Matplotlib提供了很大的灵活性,因此您可以自定义或调整几乎所有的图表。但是想要完全控制可视化就需要编写更多的代码。

在本文中,我们将介绍3个可以用于定制Matplotlib图表的技巧:

  • 减少x轴或y轴上的刻度数
  • 添加一个辅助y轴
  • 共享x轴的子图坐标对齐

本文中我们将使用折线图为例,但这些技巧也可以应用于其他类型的图。我创建了一个数据集模拟价格和销售数据。

代码语言:javascript
复制
代码语言:javascript
复制
 import pandas as pd import numpy as np df = pd.read_csv("mock_sales_data.csv", nrows=100) df.head()
代码语言:javascript
复制

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

减少刻度数

如果在轴上绘制的数据点数量很多,刻度看起来非常的紧凑,甚至可能重叠。在处理时间序列数据时,x轴通常包含占用大量空间的日期,所以可以减少轴上的刻度数来提高显示效果。

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

代码语言:javascript
复制
 import matplotlib.pyplot as plt plt.style.use("seaborn-darkgrid")
 plt.figure(figsize=(12, 6)) plt.plot(df["Date"], df["Price"]) plt.show()

可以看到X轴的刻度重叠并且根本无法显示完整。下面我们添加设置只显示部分的刻度,这样可以完整显示。

代码语言:javascript
复制
 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()
代码语言:javascript
复制

我们使用NumPy的arange函数来指定标记的位置,现在看起来好多了。

使用辅助轴

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

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

可以看到价格和销售数量的取值范围差距很大我们几乎看不到销售的变化,这时可以使用辅助轴来指定另外一条线的取值范围。

代码语言:javascript
复制
 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()
代码语言:javascript
复制

看起来好多了。我们可以清楚的观察到价格与销售量之间的反比关系。

共享x轴的子图坐标对齐

我们可以在一个Figure对象上创建多个子图。Matplotlib允许使用subplot函数创建子图格。例如下面的代码行创建了一个包含4个子图的2x2网格图。

代码语言:javascript
复制
代码语言:javascript
复制
 fig, (ax1, ax2, ax3, ax4) = plt.subplots(nrows=2, ncols=2)

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

如果我们想在2个子图中共享X轴怎么办呢?我们可以使用tight_layout函数。它可以用于调整子图之间的填充:

代码语言:javascript
复制
 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()
代码语言:javascript
复制

可以看到2个子图的X轴坐标(日期)都已经对齐了,这对于分析时间序列时非常有用的,例如想对比2个产品或者2个不同的门店在同一时期的销售情况,通过对齐日期可以给出非常好的直观判断。

以上就是3个Matplotlib可视化的小技巧,这些技巧肯定会帮助你创建信息更丰富、功能更强大的数据可视化图表。

编辑:王菁

校对:林亦霖

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据派THU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 减少刻度数
  • 使用辅助轴
  • 共享x轴的子图坐标对齐
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档