まず第一に、私はMatplotlibまたはSeabornの色にかなり慣れていません。私の目的は、カスタムパレットに従って色付けされた棒で棒グラフを作成することです。このようなものですが、私のカスタムパレットを使用しています(以下を参照、赤、オレンジ、緑、青のパレット)。
LinearSegmentedColormap
メソッドを使用してカスタムシーケンシャルパレットを作成しましたが、単純なplt.barplot()
では使用できません。確かに難しくはありませんが、道がわかりません。このスレッドから取得した、以下の関数を使用してパレットを作成しました: matplotlibを使用して独自のカラーマップを作成し、カラースケールをプロットします
_def make_colormap(seq):
"""Return a LinearSegmentedColormap
seq: a sequence of floats and RGB-tuples. The floats should be increasing
and in the interval (0,1).
"""
seq = [(None,) * 3, 0.0] + list(seq) + [1.0, (None,) * 3]
cdict = {'red': [], 'green': [], 'blue': []}
for i, item in enumerate(seq):
if isinstance(item, float):
r1, g1, b1 = seq[i - 1]
r2, g2, b2 = seq[i + 1]
cdict['red'].append([item, r1, r2])
cdict['green'].append([item, g1, g2])
cdict['blue'].append([item, b1, b2])
return mcolors.LinearSegmentedColormap('CustomMap', cdict)
#main#
c = mcolors.ColorConverter().to_rgb
rvb = make_colormap(
[c('red'), 0.125, c('red'), c('orange'), 0.25, c('orange'),c('green'),0.5, c('green'),0.7, c('green'), c('blue'), 0.75, c('blue')])
N = 1000
array_dg = np.random.uniform(0, 10, size=(N, 2))
colors = np.random.uniform(0, 5, size=(N,))
plt.scatter(array_dg[:, 0], array_dg[:, 1], c=colors, cmap=rvb)
plt.colorbar()
plt.show()
_
それはこのプロットを返します:
私が理解できる限り、バープロットにカラーマップ(LinearSegmentedColormap()
?のオブジェクトタイプ)を使用することはできませんが、カラーマップはカスタムシーケンシャルパレットを実現するユニークな方法です。
要約すると、私は2番目のプロット(散布図)のカラーマップを最初のプロット(棒グラフ)に適用]したいと思います。現時点では、barplot()
関数にはLinearSegmentedColormap
オブジェクトタイプを受け入れる引数がないため、これを行うことはできません。
私はおそらくそれを実際よりも難しくしているので、よりクリーンで正確な方法をいただければ幸いです。
バーがカラーマップに従って色付けされたバープロットを取得するには、bar(x,y, color=colors)
のcolor
引数を使用できます。ここで、colors
はすべての長さを含むバーの長さの数のリストです色。つまりそのリストのi
thエントリは、i
thバーの色です。
カラーマップからこのリストを作成するには、それぞれの値でカラーマップを呼び出す必要があります。
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import numpy as np
clist = [(0, "red"), (0.125, "red"), (0.25, "orange"), (0.5, "green"),
(0.7, "green"), (0.75, "blue"), (1, "blue")]
rvb = mcolors.LinearSegmentedColormap.from_list("", clist)
N = 60
x = np.arange(N).astype(float)
y = np.random.uniform(0, 5, size=(N,))
plt.bar(x,y, color=rvb(x/N))
plt.show()
Seaborn barplot
はこれに最適です 例 :
ax = sns.barplot("size", y="total_bill", data=tips, palette="Blues_d")