matplotlib xticks 基于 旋转_Matplotlib 自定义色彩

定制Colorbars


绘图图例标识离散点的离散标签。对于基于点,线或区域颜色的连续标签,标记的颜色条可以是一个很好的工具。在Matplotlib中,颜色条是一个单独的轴,可以为绘图中的颜色含义提供关键。因为这本书是用黑白打印的,所以这一部分有一个随附的在线补充,你可以在其中查看全彩色的数字(https://github.com/jakevdp/PythonDataScienceHandbook)。我们首先设置笔记本以绘制和导入我们将使用的功能:

import matplotlib.pyplot as plt
plt.style.use('classic')
%matplotlib inline
import numpy as np

正如我们在本节中多次看到的那样,可以使用以下plt.colorbar函数创建最简单的颜色条:

x = np.linspace(0, 10, 1000)
I = np.sin(x) * np.cos(x[:, np.newaxis])

plt.imshow(I)
plt.colorbar();

db513b1ff99e1c0ab83028a186de8e68.png

我们现在将讨论一些定制这些色块的想法,并在各种情况下有效地使用它们。


定制Colorbars


可以使用cmap创建可视化的绘图功能的参数来指定色彩映射:

plt.imshow(I, cmap='gray');

b68f783135fa5c4430e3b13b8ef526af.png

所有可用的色彩映射都在plt.cm命名空间中; 使用IPython的tab-completion将为您提供内置可能性的完整列表:

plt.cm.<TAB>

但是能够选择色彩图只是第一步:更重要的是如何决定可能性!选择结果比您最初预期的要简单得多。

选择颜色表

在可视化中对颜色选择的完整处理超出了本书的范围,但是为了阅读有关该主题和其他主题的阅读,请参阅文章“十个简单的更好的数字规则”。Matplotlib的在线文档也对色彩图选择进行了有趣的讨论

从广义上讲,您应该了解三种不同类型的色彩映射:

  • 连续色彩映射:这些色彩映射由一个连续的颜色序列组成(例如,binaryviridis)。
  • 不同的色彩映射:这些通常包含两种不同的颜色,显示与均值(例如,RdBuPuOr)的正偏差和负偏差。
  • 定性色图:这些混合色没有特定的序列(例如,rainbowjet)。

jet颜色表,这是在之前版本2.0 Matplotlib默认值,是一个质的颜色表的一个例子。它的默认状态非常不幸,因为定性地图往往是表示定量数据的不良选择。问题之一是定性图通常在尺度增加时不显示任何均匀的亮度变化。

我们可以通过将jet颜色条转换为黑白来看到这一点:

from matplotlib.colors import LinearSegmentedColormap

def grayscale_cmap(cmap):
    """Return a grayscale version of the given colormap"""
    cmap = plt.cm.get_cmap(cmap)
    colors = cmap(np.arange(cmap.N))
    
    # convert RGBA to perceived grayscale luminance
    # cf. http://alienryderflex.com/hsp.html
    RGB_weight = [0.299, 0.587, 0.114]
    luminance = np.sqrt(np.dot(colors[:, :3] ** 2, RGB_weight))
    colors[:, :3] = luminance[:, np.newaxis]
        
    return LinearSegmentedColormap.from_list(cmap.name + "_gray", colors, cmap.N)
    

def view_colormap(cmap):
    """Plot a colormap with its grayscale equivalent"""
    cmap = plt.cm.get_cmap(cmap)
    colors = cmap(np.arange(cmap.N))
    
    cmap = grayscale_cmap(cmap)
    grayscale = cmap(np.arange(cmap.N))
    
    fig, ax = plt.subplots(2, figsize=(6, 2),
                           subplot_kw=dict(xticks=[], yticks=[]))
    ax[0].imshow([colors], extent=[0, 10, 0, 1])
    ax[1].imshow([grayscale], extent=[0, 10, 0, 1])
view_colormap('jet')

6af769f7fceb8c259833dfa1f04a34e5.png

请注意灰度图像中的明亮条纹。即使是全彩色,这种不均匀的亮度也意味着眼睛会被吸引到颜色范围的某些部分,这可能会强调数据集的不重要部分。最好使用viridis色彩映射,例如(默认为Matplotlib 2.0),它专门构造为在整个范围内具有均匀的亮度变化。因此,它不仅可以很好地适应我们的色彩感知,而且可以很好地转换为灰度打印:

view_colormap ('viridis' )

379e6ce49461c8547fcabcaf9b64d85d.png

如果您喜欢彩虹方案,那么连续数据的另一个好选择是cubehelix色彩映射:

view_colormap ('cubehelix' )

154aa718f584c5d2f3c6d183d5cdef5e.png

对于其他情况,例如显示某些均值的正偏差和负偏差,诸如RdBu红 - 蓝)的双色颜色条可能是有用的。但是,正如您在下图中看到的那样,重要的是要注意,在转换为灰度时,正负信息将会丢失!

view_colormap ('RdBu' )

09109dfc940603823b9c61e8ce331a73.png

我们将继续看到使用其中一些色彩映射的示例。

Matplotlib中有大量的色彩图; 要查看它们的列表,可以使用IPython来探索plt.cm子模块。有关Python中更具原则性的颜色方法,您可以参考Seaborn库中的工具和文档(请参阅使用Seaborn进行可视化)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值