在Matplotlib中设置更漂亮的默认绘图颜色

62

默认情况下,matplotlib所使用的颜色(例如: http://matplotlib.org/examples/pylab_examples/pie_demo.html)有些平淡和丑陋。我也注意到如果在单个图中绘制超过5-6个不同的系列,matplotlib会开始重复颜色。

我看到其他可视化包(默认情况下用其他语言编写)中出现了一些华丽的图表,可以通过不同的色调仅使用一种颜色涵盖5-6个不同的系列。有人有一个好的颜色集来在matplotlib中使用吗?并且有一种方法可以将其设置为默认值吗?


那张图片中的颜色看起来对我来说相当不错。您可以查看这个问题来了解如何更改默认的颜色循环,但我不确定“有没有好的颜色集”是否是我们可以回答的东西。 - DSM
网上有1000个站点可以帮助你选择好的配色方案,但它们不会特别针对图表。 - Mark Ransom
9个回答

68

9
这个包似乎现在已经包含在matplotlib中了:http://matplotlib.org/users/style_sheets.html - asmaier

50

该问题是2年前提出的,而今天获取更好的图表样式要容易得多。你甚至不需要外部软件包。正如@asmaier在他的评论中提到的,mpltools.style功能已经整合到Matplotlib 1.4中,因此您可以使用以下方式切换样式:

plt.style.use(style_name)
例如:
import matplotlib.pyplot as plt
import numpy as np

plt.style.use('ggplot')

num_lines = 6

ax = plt.subplot(111)

for i in range(num_lines):
    x = np.linspace(0,20,200)
    ax.plot(x,np.sin(x)+i)

plt.show()

您可以使用以下命令列出所有可用的样式:

输入图像描述

print plt.style.available

在Matplotlib 1.5中,新增了几种新的样式,其中包括了许多来自Seaborn项目的样式:

plt.style.use('seaborn-dark-palette')

这里输入图像描述


2
样式演示请参见 https://matplotlib.org/gallery/style_sheets/style_sheets_reference.html,如果您想尝试几种不同的样式,您需要在应用新样式之前使用 plt.style.use('default') 重置样式,因为这些样式是可组合的。 - colllin
我得到了以下错误信息:AttributeError: 'AxesSubplot'对象没有'set_color_cycle'属性。其中,ax.set_color_cycle(sns.color_palette("coolwarm_r",num_lines))是出错的代码行。 - olippuner
set_color_cycle has now been deprecated. You should instead use: ax.set_prop_cycle('color', sns.color_palette("coolwarm_r", num_lines)) - Daniel Jones

25

请看最近朋友向我介绍的一个库prettyplotlib,它修改了matplotlib以更好地符合Edward Tufte的想法,并且结合了Cynthia Brewer在颜色感知方面的一些精心研究。


3
请注意,根据 GitHub 页面的说明,prettyplotlib 不再维护,并且维护者建议使用 seaborn(https://seaborn.pydata.org/index.html)包,该包也支持 prettyplotlib 的颜色方案。 - NOhs

16

Seaborn包(基于Matplotlib)具有漂亮的默认图形样式,我发现这是创建吸引人的颜色循环的好方法。

他们在这里对调色板进行了很好的讨论: https://stanford.edu/~mwaskom/software/seaborn/tutorial/color_palettes.html

以下代码演示了如何自动为简单线图选择新的color_cycle:

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns   

num_lines = 6

ax = plt.subplot(111)
ax.set_color_cycle(sns.color_palette("coolwarm_r",num_lines))

for i in range(num_lines):
    x = np.linspace(0,20,200)
    ax.plot(x,np.sin(x)+i)

plt.show()

enter image description here

如果你只想改变线条颜色,而不使用其他 seaborn 预设,比如灰色背景,请导入以下代码:

import seaborn.apionly as sns

4
您可以设置一个.matplotlibrc文件。这里有一个非常详细的注释示例:这里。看起来您想要更改的选项是axes.color_cycle。我没有关于如何让界面更美观的建议 - 这有点主观 Stack Overflow ;-)(而且我对默认值很满意)。

2

前段时间,我在 matplotx 中创建了名为“dufte”的极简风格,可通过以下方式安装:

pip install matplotx

并与之一同使用

plt.style.use(matplotx.styles.dufte)

enter image description here


2

如果想要在 matplotlib 中使用更丰富的颜色集,请查看palettable,其中包含精美的Wes Anderson调色板。

$ pip install palettable
$ python
>>> from palettable.colorbrewer.qualitative import Dark2_7

1
你可以使用matplotlib的colormap功能。
一个很好的例子在这个问题中。你可以使用这个脚本来展示你的色图选项。

0

我在我的工作中使用ggplot风格,你可以在这个链接matplotlib.org中看到其他风格列表。

使用方法:

import matplotlib.pyplot as plt
plt.style.use('ggplot')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接