Python 熊猫数据帧打印:永久更改默认颜色贴图

Python 熊猫数据帧打印:永久更改默认颜色贴图,python,pandas,matplotlib,Python,Pandas,Matplotlib,对于广泛的打印脚本,我使用matplotlibs rcParams为数据帧配置一些标准打印设置 这适用于颜色和字体大小,但不适用于所述的默认颜色映射 以下是我目前的做法: # -*- coding: utf-8 -*- import pandas as pd import numpy as np import matplotlib import matplotlib.pyplot as plt from matplotlib import cm # global plotting optio

对于广泛的打印脚本,我使用matplotlibs rcParams为数据帧配置一些标准打印设置

这适用于颜色和字体大小,但不适用于所述的默认颜色映射

以下是我目前的做法:

# -*- 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使用colormap(通常应该这样做):

仅当我将其作为参数传递时,它才起作用,如第二个图中所示:

有没有办法永久性地定义熊猫数据帧图的标准颜色映射


提前谢谢

没有得到支持的官方方式;由于pandas的内部代码对
matplotlib.rcParams['axes.color\u cycle']
的使用进行了硬编码,您被卡住了,并返回到
列表('bgrcmyk')

然而,你可以使用各种各样的黑客;其中一个最简单的方法适用于所有
pandas.DataFrame.plot()
调用,即包装
pandas.tools.plotting.plot\u 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()
…产生:

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