したがって、あなたの要件は「多くの色」と「印刷時に2つの色が同じグレースケール値にマッピングされてはならない」ということですよね? 2 番目の基準は、「順次」カラーマップ (輝度が単調に増加または減少する) によって満たされる必要があります。cubehelix
matplotlib のすべての選択肢のうち、 (既に言及されている)、gnuplot
、およびが残っていると思いますgnuplot2
。
白い線は各色の輝度であるため、印刷時に各色が異なるグレースケール値にマッピングされることがわかります。黒い線は色相で、さまざまな色が循環していることを示しています。
キューブヘリックスは実際には関数 ( ) であり、ここに示すようfrom matplotlib._cm import cubehelix
に、らせんのパラメータを調整して、より広範囲に変化する色を生成できることに注意してください。つまり、cubehelix はカラーマップではなく、カラーマップのファミリーです。2 つのバリエーションを次に示します。
それほど大きく変化しない色 (多くの場合はより快適ですが、棒グラフには適していない可能性があります) については、ColorBrewer の 3 色マップ , YlOrRd
,PuBuGn
を試してくださいYlGnBu
:
https://www.flickr.com/photos/omegatron/7298887952/
ただし、棒グラフを識別するためにこの色だけを使用することはお勧めしません。主要な識別子として常にテキスト ラベルを使用する必要があります。また、これらの一部は、チャートの色ではなくヒートマップを対象としているため、背景に完全に溶け込む白いバーを生成することに注意してください。
from matplotlib import pyplot as plt
import pandas, numpy as np # I find np.random.randint to be better
# Make the data
x = [{i:np.random.randint(1,5)} for i in range(10)]
df = pandas.DataFrame(x)
# Make a list by cycling through the colors you care about
# to match the length of your data.
cmap = plt.get_cmap('cubehelix')
indices = np.linspace(0, cmap.N, len(x))
my_colors = [cmap(int(i)) for i in indices]
# Specify this list of colors as the `color` option to `plot`.
df.plot(kind='bar', stacked=True, color=my_colors)
そして、これらは新しい人たちです: