Pandas DataFrame绘图:永久更改默认的颜色映射

3

对于大量绘图脚本,我使用matplotlib的rcParams来配置pandas数据框的一些标准绘图设置。

这在颜色和字体大小方面效果很好,但不适用于默认的colormap,如此处所述

以下是我的目前方法:

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import cm


# global plotting options
plt.rcParams.update(plt.rcParamsDefault)
matplotlib.style.use('ggplot')
plt.rcParams['lines.linewidth'] = 2.5
plt.rcParams['axes.facecolor'] = 'silver'
plt.rcParams['xtick.color'] = 'k'
plt.rcParams['ytick.color'] = 'k'
plt.rcParams['text.color'] = 'k'
plt.rcParams['axes.labelcolor'] = 'k'
plt.rcParams.update({'font.size': 10})
plt.rcParams['image.cmap'] = 'Blues'  # this doesn't show any effect


# dataframe with random data
df = pd.DataFrame(np.random.rand(10, 3))

# this shows the standard colormap
df.plot(kind='bar')
plt.show()

# this shows the right colormap
df.plot(kind='bar', cmap=cm.get_cmap('Blues'))
plt.show()

第一个图没有通过colormap使用颜色映射(通常应该这样做): enter image description here 只有在像第二个图那样将它作为参数传递时,它才会起作用: enter image description here 是否有办法永久定义pandas DataFrame绘图的标准colormap?
提前感谢!
1个回答

2

目前没有官方支持的方法可以解决这个问题;原因是pandas内部使用的_get_standard_colors函数硬编码了使用matplotlib.rcParams['axes.color_cycle']并且会回退到list('bgrcmyk')

colors = list(plt.rcParams.get('axes.color_cycle',
                               list('bgrcmyk')))

有各种各样的技巧可以使用,然而其中最简单的之一,适用于所有pandas.DataFrame.plot()调用的方法是包装pandas.tools.plotting.plot_frame

import matplotlib
import pandas as pd
import pandas.tools.plotting as pdplot

def plot_with_matplotlib_cmap(*args, **kwargs):
    kwargs.setdefault("colormap", matplotlib.rcParams.get("image.cmap", "Blues"))
    return pdplot.plot_frame_orig(*args, **kwargs)

pdplot.plot_frame_orig = pdplot.plot_frame
pdplot.plot_frame = plot_with_matplotlib_cmap
pd.DataFrame.plot = pdplot.plot_frame

在笔记本上进行测试:

%matplotlib inline
import pandas as pd, numpy as np
df = pd.DataFrame(np.random.random((1000,10))).plot()

...产生:

蓝色图表


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