2016-08-04 12 views
3

広範なプロットスクリプトの場合、私はmatplotlibs rcParamsを使用して、pandas DataFramesの標準プロット設定を構成します。Pandas DataFrame Plot:デフォルトのカラーマップを永久に変更

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() 

最初のプロットは(それカラーマップを経由してカラーマップを使用していません通常は行う必要があります):? enter image description here

私は2番目のプロットのように引数として渡す場合にのみ動作します。

enter image description here

pandas DataFrameプロットの標準カラーマップを永久に定義する方法はありますか?

ありがとうございます!

答えて

1

公式にはサポートされていません。あなたが原因matplotlib.rcParams['axes.color_cycle']の使用をハードコードし、バックlist('bgrcmyk')に落ちるパンダの内部_get_standard_colors functionで立ち往生している:

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() 

...利回り:

blue_plot

関連する問題