8.14 自定义 Matplotlib:配置和样式表

原文:Customizing Matplotlib: Configurations and Stylesheets

译者:飞龙

协议:CC BY-NC-SA 4.0

本节是《Python 数据科学手册》(Python Data Science Handbook)的摘录。

Matplotlib 的默认绘图设置通常是其用户所抱怨的主题。虽然在 2016 年末的 Matplotlib 2.0 版本中有很多改进的内容,但自定义默认设置的能力,有助于使软件包符合你自己的审美偏好。

在这里,我们将介绍一些 Matplotlib 的运行时配置(rc)选项,并查看较新的样式表功能,其中包含一些不错的默认配置。

手动的绘图自定义

通过本章,我们已经看到了如何调整单个绘图设置,最终得到看起来比默认设置更好一些的东西。可以为每个单独的绘图执行这些自定义。例如,这是一个相当单调的默认直方图:

import matplotlib.pyplot as plt
plt.style.use('classic')
import numpy as np%matplotlib inlinex = np.random.randn(1000)
plt.hist(x);

我们可以手动调整它,使其看上去好看一些:

# 使用灰色背景
ax = plt.axes(axisbg='#E6E6E6')
ax.set_axisbelow(True)# 绘制白色实网格线draw solid white grid lines
plt.grid(color='w', linestyle='solid')# 隐藏轴的刻度
for spine in ax.spines.values():spine.set_visible(False)# 隐藏顶部和右侧刻度
ax.xaxis.tick_bottom()
ax.yaxis.tick_left()# 将刻度和标签变亮
ax.tick_params(colors='gray', direction='out')
for tick in ax.get_xticklabels():tick.set_color('gray')
for tick in ax.get_yticklabels():tick.set_color('gray')# 控制直方图的人脸和边界颜色
ax.hist(x, edgecolor='#E6E6E6', color='#EE6666');

这看起来更好,你可能会认为外观受 R 语言的ggplot可视化包的启发。但这需要付出很多精力!我们绝对不希望每次创建绘图时都要做所有调整。幸运的是,有一种方法可以调整这些默认值,它将适用于所有绘图。

修改默认值:rcParams

每次加载 Matplotlib 时,它都会定义一个运行时配置(rc),其中包含你创建的每个绘图元素的默认样式。可以使用plt.rc便利例程随时调整此配置。让我们修改rc参数,使我们的默认绘图看起来与之前相似,并看看它的样子。

我们首先保存当前rcParams字典的副本,这样我们就可以在当前会话中轻松重置这些更改:

IPython_default = plt.rcParams.copy()

现在我们可以使用plt.rc函数来改变其中的一些设置:

from matplotlib import cycler
colors = cycler('color',['#EE6666', '#3388BB', '#9988DD','#EECC55', '#88BB44', '#FFBBBB'])
plt.rc('axes', facecolor='#E6E6E6', edgecolor='none',axisbelow=True, grid=True, prop_cycle=colors)
plt.rc('grid', color='w', linestyle='solid')
plt.rc('xtick', direction='out', color='gray')
plt.rc('ytick', direction='out', color='gray')
plt.rc('patch', edgecolor='#E6E6E6')
plt.rc('lines', linewidth=2)

通过定义这些设置,我们现在可以创建一个绘图并查看我们的设置:

plt.hist(x);

让我们看看使用rc参数,简单线条图是什么样:

for i in range(4):plt.plot(np.random.rand(10))

我发现这比默认样式更美观。如果你不同意我的审美,好消息是你可以根据自己的喜好调整rc参数!这些设置可以保存在.matplotlibrc文件中,你可以阅读 Matplotlib 文档来了解。也就是说,我更喜欢使用样式表来定制 Matplotlib。

样式表

2014 年 8 月发布的 Matplotlib 1.4 版增加了一个非常方便的style模块,其中包含许多新的默认样式表,以及创建和打包自己的样式的功能。这些样式表的格式与前面提到的.matplotlibrc文件类似,但必须使用.mplstyle扩展名来命名。

即使你不创建自己的样式,默认包含的样式表也非常有用。可用的样式在plt.style.available中列出 - 这里为了简洁我只列出前五个:

plt.style.available[:5]'''
['fivethirtyeight','seaborn-pastel','seaborn-whitegrid','ggplot','grayscale']
'''

切换样式表的基本方法是调用:

plt.style.use('stylename')

但请记住,这将改变会话剩余部分的风格!或者,你可以使用样式上下文管理器,它可以临时设置样式:

with plt.style.context('stylename'):make_a_plot()

让我们创建一个函数,它将生成两种基本类型的绘图:

def hist_and_lines():np.random.seed(0)fig, ax = plt.subplots(1, 2, figsize=(11, 4))ax[0].hist(np.random.randn(1000))for i in range(3):ax[1].plot(np.random.rand(10))ax[1].legend(['a', 'b', 'c'], loc='lower left')

我们将使用它,以及各种内置样式的样式来探索这些绘图。

默认样式

默认样式是我们到目前为止所看到的内容;我们将从它开始。首先,让我们将运行时配置重置为笔记本默认值:

# 重置 rcParams
plt.rcParams.update(IPython_default);

现在让我们看看它的外观:

hist_and_lines()

FiveThiryEight 样式

fivethirtyeight风格模仿流行的 FiveThirtyEight 网站上的图形。正如你在这里看到的那样,它以深色,粗线条和透明的轴为代表:

with plt.style.context('fivethirtyeight'):hist_and_lines()

ggplot

R 语言中的ggplot包是非常流行的可视化工具。Matplotlib 的ggplot样式模仿该包的默认样式:

with plt.style.context('ggplot'):hist_and_lines()

“黑客的贝叶斯方法”风格

有一本非常好的在线简短书籍,叫做黑客的概率编程和贝叶斯方法;它具有使用 Matplotlib 创建的图形,并使用一组很好的rc参数,在整本书中创建一致且视觉上吸引人的风格。这种风格在bmh样式表中复现:

with plt.style.context('bmh'):hist_and_lines()

暗黑背景

对于演示文稿中使用的图形,使用深色而非浅色背景通常很有用。dark_background样式提供了这个:

with plt.style.context('dark_background'):hist_and_lines()

灰度

有时你可能会发现,自己正在为不接受彩色图形的印刷出版物准备图形。为此,此处展示的“灰度”样式非常有用:

with plt.style.context('grayscale'):hist_and_lines()

Seaborn 样式

Matplotlib 还有受 Seaborn 库启发的样式表(在“可视化和 Seaborn”中进行了更全面的讨论)。正如我们将看到的,将 Seaborn 导入笔记本时,这些样式会自动加载。我发现这些设置非常好,并且倾向于在我自己的数据探索中将它们用作默认设置。

import seaborn
hist_and_lines()

使用所有这些用于各种绘图样式的内置选项,对于交互式可视化和用于出版图形的创建,Matplotlib 变得更加有用。在本书中,我通常会在创建绘图时使用这些样式约定中的一个或多个。

数据科学 IPython 笔记本 8.14 自定义 Matplotlib:配置和样式表相关推荐

  1. 数据科学 IPython 笔记本 8.9 自定义图例

    8.9 自定义图例 原文:Customizing Plot Legends 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(Python Data ...

  2. 数据科学 IPython 笔记本 7.14 处理时间序列

    7.14 处理时间序列 原文:Working with Time Series 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(Python Dat ...

  3. 数据科学 IPython 笔记本 8.13 自定义刻度

    8.13 自定义刻度 原文:Customizing Ticks 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(Python Data Scienc ...

  4. 数据科学 IPython 笔记本 翻译完成

    原文:donnemartin/data-science-ipython-notebooks 译者:飞龙 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以 ...

  5. 数据科学 IPython 笔记本 8.3 Matplotlib 可视化

    8.3 Matplotlib 可视化 原文:Visualization with Matplotlib 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册> ...

  6. 数据科学 IPython 笔记本 8.17 使用 Seaborn 的可视化

    8.17 使用 Seaborn 的可视化 原文:Visualization with Seaborn 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册> ...

  7. 数据科学 IPython 笔记本 8.15 Matplotlib 中的三维绘图

    8.15 Matplotlib 中的三维绘图 原文:Three-Dimensional Plotting in Matplotlib 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<P ...

  8. 数据科学 IPython 笔记本 8.10 自定义颜色条

    8.10 自定义颜色条 原文:Customizing Colorbars 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(Python Data S ...

  9. 数据科学 IPython 笔记本 8.4 简单的折线图

    8.4 简单的折线图 原文:Simple Line Plots 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(Python Data Scienc ...

最新文章

  1. Spring系列之Spring框架和SpringAOP集成过程分析(十)
  2. 5G NPN 行业专网 — 部署模式
  3. SecureCRT 7 序列号
  4. 数据结构与算法-二叉查找树(java描述)
  5. 【好文收藏】k8s中Pod 无法正常解析域名:部署 DNS 调试工具排查
  6. .NET 6 中的HTTP 3支持
  7. 实现粗糙表面_什么是表面粗糙度,你真懂吗?
  8. 同轴全息matlab仿真,HoloSpec2D 二维全息谱的matlab程序,含有频谱校正 276万源代码下载- www.pudn.com...
  9. AS3 Signals
  10. .ashx接口单元测试
  11. 几何分布期望,方差推导
  12. 【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案--1 赛后总结与分析
  13. 详细讲解WIN7系统上Virtualbox4.2.8安装RedHat Enterprise Linux 6.4
  14. PCB的分类以及它的制造工艺
  15. 全志VR9虚拟现实专用芯片处理器介绍
  16. ExecuteNonQuery()返回值注意点
  17. 成为富人的十大心理特质,你有吗?
  18. 当微信小程序遇上filter~
  19. S32K的lin组件使用(不用LDF配置LIN)
  20. 微信公众号生成个性化菜单

热门文章

  1. (72)信号发生器DDS方波设计 (二)(第15天)
  2. (22)FPGA比较器设计(第5天)
  3. java scheduler_RxJava Scheduler介绍
  4. java实现浏览器ui中的收藏夹_谷歌改进Google Chrome浏览器中的PDF浏览器 带来全新UI...
  5. 【实验2】——模糊函数
  6. 数据结构之二叉排序树
  7. Linux内核分析 - 网络[八]:IP协议
  8. php srem,SREM命令_视频讲解_用法示例-redis编程词典-php中文网
  9. html 透视效果,html – CSS – 对背景图像的“敲除”/透视效果
  10. 使用maven-war-plugin 打包时排除不需要的文件