ext grid新增时默认值_自动美化你的Matplotlib,使用Seaborn控制图表的默认值

5da8be2e25799a0fd49f241ee8ea72f2.png

如果您曾经在 Python 中进行过数据可视化,那么很可能您使用了 Matplotlib 库。 这个库包含了许多绘图的功能。但是一些概念上简单的可视化需要大量的代码才能完成。 而在这个时代,人们希望能够与图表进行交互——这是普通 Matplotlib 库无法提供的功能。 更重要的是,采用默认设置的 Matplotlib 图表通常看起来很糟糕。

当然,默认的 Matplotlib 设置能够使得您的可视化视觉效果看起来十分朴素,但是显然是有点过时的。 它默认的蓝色阴影通常难以满足许多数据科学家的需求。

951cbbc69a32c5cf92c7a8314d46f5bb.png

采取默认设置的柱状图

a5447cb82ee43483879fbe34530af58a.png

稍加调整的柱状图

同时,Matplotlib 的一个不足之处在于它的可定制性。 您可以创建非常复杂的视觉效果,但是不可否认,实现复杂的视觉效果需要很多行代码,而大部分数据科学家很少有太多时间用于这一方面。

f1b002ca6f3712a34739b8ed3c7834a8.png

不想每个 plot 都有那个烦人的边框吗? 想使用您品牌的调色板而不必每次都指定十六进制代码吗? 要对所有图表标签使用 Comic Sans 字体吗? 寻求专业库的帮助吧。

颜色设置

Matplotlib 中有自带的颜色系统(例如广为人知的"bisque"、"lavenderblush" 和 "lightgoldenrodyellow"),绘图时可以通过十六进制代码的形式设置颜色。 可以很方便地自定义调色板。 例如, CB91 字体的背景通过一组预定义的颜色代码进行设置。

2a6d001498d14250c264fc8f04237386.png

上图使用到的颜色代码有:

CB91_Blue = '#2CBDFE'CB91_Green = '#47DBCD'CB91_Pink = '#F3A0F2'CB91_Purple = '#9D2EC5'CB91_Violet = '#661D98'CB91_Amber = '#F5B14C'

如果你想创建自己的调色板,有一些有用的工具可以在线帮助。比如 Colormind.io通过深度学习从照片、电影和流行艺术中学习色彩风格,因此色调搭配得很好。

通过上述代码定义了颜色集,就可以将其声明为一个颜色列表,然后更改 Matplotlib 的颜色库 cycler。

color_list = [CB91_Blue, CB91_Pink, CB91_Green, CB91_Amber, CB91_Purple, CB91_Violet]plt.rcParams['axes.prop_cycle'] = plt.cycler(color=color_list)

现在,就成功替换了 Matplotlib 绘图所需的默认颜色库,当新建一个多系列绘图时,将会在 cycler 中按顺序进行检索并设置各个系列的颜色。

164499122297e1c2e3c688b9e7cc5ee7.png

您还可以使用十六进制颜色列表定义渐变颜色,但是需要在列表中定义许多十六进制值(至少40个)。手动创建这么长的列表可能会很麻烦,这里我建议使用colordesigner.io自动生成所需列表(只需选择要渐变的颜色,最大化渐变步数,然后从生成的HTML中提取十六进制代码)。

如下代码展示了我使用的一个十六进制颜色列表(介于蓝色和紫色):

#A list of hex colours running between blue and purpleCB91_Grad_BP = ['#2cbdfe', '#2fb9fc', '#33b4fa', '#36b0f8',                '#3aacf6', '#3da8f4', '#41a3f2', '#449ff0',                '#489bee', '#4b97ec', '#4f92ea', '#528ee8',                '#568ae6', '#5986e4', '#5c81e2', '#607de0',                '#6379de', '#6775dc', '#6a70da', '#6e6cd8',                '#7168d7', '#7564d5', '#785fd3', '#7c5bd1',                '#7f57cf', '#8353cd', '#864ecb', '#894ac9',                '#8d46c7', '#9042c5', '#943dc3', '#9739c1',                '#9b35bf', '#9e31bd', '#a22cbb', '#a528b9',                '#a924b7', '#ac20b5', '#b01bb3', '#b317b1'] 
36e18ad6701bdfa01989c08265e95ea3.png

坐标轴调整

Seaborn 是一个以 Matplotlib 为基础的库,可以通过一两行代码创建更复杂的图表类型(如 Heatmaps、Violins 和 Joint Plots)。

5fc7bc0812e5a4a97c2ca9dd4ed60d78.png

通过 Seaborn 生成的 heatmap

Seaborn 的一个鲜为人知的特性是它能够使用.set方法控制 Matplotlib 默认值设置(改变颜色、坐标轴和默认字体)。我们还可以使用 .set_context()方法调整字体大小设置。

详细资料可以查看官方教程。下面是一个简单的例子:

import matplotlib.pyplot as pltimport seaborn as snssns.set(font=’Franklin Gothic Book’,        rc={ ‘axes.axisbelow’: False, ‘axes.edgecolor’: ‘lightgrey’, ‘axes.facecolor’: ‘None’, ‘axes.grid’: False, ‘axes.labelcolor’: ‘dimgrey’, ‘axes.spines.right’: False, ‘axes.spines.top’: False, ‘figure.facecolor’: ‘white’, ‘lines.solid_capstyle’: ‘round’, ‘patch.edgecolor’: ‘w’, ‘patch.force_edgecolor’: True, ‘text.color’: ‘dimgrey’, ‘xtick.bottom’: False, ‘xtick.color’: ‘dimgrey’, ‘xtick.direction’: ‘out’, ‘xtick.top’: False, ‘ytick.color’: ‘dimgrey’, ‘ytick.direction’: ‘out’, ‘ytick.left’: False, ‘ytick.right’: False})sns.set_context("notebook", rc={"font.size":16,                                "axes.titlesize":20,                                "axes.labelsize":18})

定义自己的默认设置文件

每次都将前文所提及的所有设置代码写在 Jupyter notebook 前面,会显得整个代码不够简洁。这一点在需要涉及众多十六进制颜色声明时尤其明显。并且也不利于在多个 notebook 中重复使用。

因此,将相关代码统一集成到一个代码文件里,然后在需要时对其进行调用,是一个十分有效的方法。 这样每次编写代码时,只需要在开始部分引入该 .py 文件即可。

Bring in data visualisation libraries as usualimport matplotlib.pyplot as plt%matplotlib inlineimport seaborn as sns#Bring in our custom settings#Assumes that cb91visuals.py is in the repo's root folderfrom cb91visuals import *

其它技巧

除了颜色、坐标轴、字体设置外,Matplotlib/Seaborn 还可以对以下内容进行设置。

· 图例框:图例周围的小框通常是不必要的,并且增加了视觉上的混乱。可通过以下方式关闭:

plt.legend(frameon=False)

· 删除坐标轴:有时我们想删除一个轴,这可以通过 Seaborn 的 destine 方法完成(根据需要指定左、右、上或下):

sns.despine(left=True, bottom=True)

· 柱状图上的数字标签:这是软件包中真正应该提供的功能,您可以使用 for looping 和 Matplotlib 的 .text()方法将数字标签添加到柱状图列的顶部。

#Here, 'labels' refers to the bigrams on the y-axis#i.e. 'Look forward', 'Jó éjt', etc.#and X is the list of values determining bar length#Loop through these labelsfor n, i in enumerate(labels):    #Create an axis text object    ax.text(X[n]-0.003, #X location of text (with adjustment)            n, #Y location            s=f'{round(X[n],3)}%', #Required label with formatting            va='center', #Vertical alignment            ha='right', #Horizontal alignment            color='white', #Font colour and size            fontsize=12)

通过上述代码实现了在水平柱状图上添加数字标签。

dba66c382fa2adc293b621468c6c34a9.png

作者:Callum Ballard

deephub翻译组:Oliver Lee

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值