对于广泛的绘图脚本,我使用matplotlibs rcParams为pandas DataFrames配置一些标准绘图设置。
这适用于颜色和字体大小,但不适用于here
所述的默认色彩映射这是我目前的做法:
# -*- 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 DataFrame图的标准色图?
提前致谢!
答案 0 :(得分:2)
没有支持的官方方式;由于大熊猫的内部_get_standard_colors function硬编码使用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()
...产率: