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

ccfb7734cd7ec28303f1e966e9162c62.png

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

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

d064f8657769e97015d33249b3ad69ac.png

采取默认设置的柱状图

c4f016e35b7e1bde73d41ab111c825bc.png

稍加调整的柱状图

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

c5b4361f3baa3a57f55cb2f4c0cb65e0.png

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

颜色设置

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

58e945d580f218500ba1ea7a88cb73c6.png

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

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

如果你想创建自己的调色板,有一些有用的工具可以在线帮助。比如 http://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 中按顺序进行检索并设置各个系列的颜色。

98b6fff462ea56016d54dbfca2ffb448.png

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

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

#A list of hex colours running between blue and purple
CB91_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']

cd4b6d76d6227edd6e5fa784e8136437.png

坐标轴调整

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

355388eba9c2024eae9569716b34797a.png

通过 Seaborn 生成的 heatmap

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

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

import matplotlib.pyplot as plt
import seaborn as sns
sns.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 usual
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
#Bring in our custom settings
#Assumes that cb91visuals.py is in the repo's root folder
from 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 labels
for 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)

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

cdb3a4ffacd324de7d26881828f1f34b.png

作者:Callum Ballard

deephub翻译组:Oliver Lee

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值