web-dev-qa-db-ja.com

Seaborn Heatmap:プロットの上にカラーバーを移動します

seabornライブラリを使用して作成された基本的なヒートマップがあり、カラーバーをデフォルトの垂直から右側に、ヒートマップの上にある水平のカラーバーに移動したいと思います。これどうやってするの?

次に、サンプルデータとデフォルトの例を示します。

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

# Create data
df = pd.DataFrame(np.random.random((5,5)), columns=["a","b","c","d","e"])

# Default heatma
ax = sns.heatmap(df)
plt.show()

default heatmap

10
r3robertson

ドキュメント を見ると、引数cbar_kwsが見つかります。これにより、matplotlibのfig.colorbarメソッドに渡される引数を指定できます。

cbar_kws:キーの辞書、値のマッピング、オプション。 fig.colorbarのキーワード引数。

したがって、fig.colorbarに可能な引数を使用して、cbar_kwsへの辞書を提供できます。

この場合、カラーバーを上に配置するにはlocation="top"が必要です。 colorbarはデフォルトでgridspecを使用してカラーバーを配置するため、位置を設定できないため、そのgridspecをオフにする必要があります(use_gridspec=False)。

sns.heatmap(df, cbar_kws = dict(use_gridspec=False,location="top"))

完全な例:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.random((5,5)), columns=["a","b","c","d","e"])

ax = sns.heatmap(df, cbar_kws = dict(use_gridspec=False,location="top"))

plt.show()

enter image description here

あなたは海の図の上にカラーバーを置くために軸ディバイダーを使わなければなりません。コメントを探してください。

_import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
from mpl_toolkits.axes_grid1.axes_divider import make_axes_locatable
from mpl_toolkits.axes_grid1.colorbar import colorbar

# Create data
df = pd.DataFrame(np.random.random((5,5)), columns=["a","b","c","d","e"])

# Use axes divider to put cbar on top
# plot heatmap without colorbar
ax = sns.heatmap(df, cbar = False)
# split axes of heatmap to put colorbar
ax_divider = make_axes_locatable(ax)
# define size and padding of axes for colorbar
cax = ax_divider.append_axes('top', size = '5%', pad = '2%')
# make colorbar for heatmap. 
# Heatmap returns an axes obj but you need to get a mappable obj (get_children)
colorbar(ax.get_children()[0], cax = cax, orientation = 'horizontal')
# locate colorbar ticks
cax.xaxis.set_ticks_position('top')

plt.show()
_

enter image description here

詳細については、このmatplotlibの公式の例をご覧ください。 https://matplotlib.org/gallery/axes_grid1/demo_colorbar_with_axes_divider.html?highlight=demo%20colorbar%20axes%20divider

ヒートマップsns.heatmap(df, cbar_kws = {'orientation':'horizontal'})のような引数は、カラーバーを下の位置に配置するため、役に立ちません。

4
Serenity

ヒートマップの正方形のジオメトリを維持するためにプロットのサイズを制御できるサブプロットの例を示したいと思います。この例は非常に短いです:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

# Create data
df = pd.DataFrame(np.random.random((5,5)), columns=["a","b","c","d","e"])

# Define two rows for subplots
fig, (cax, ax) = plt.subplots(nrows=2, figsize=(5,5.025),  gridspec_kw={"height_ratios":[0.025, 1]})

# Draw heatmap
sns.heatmap(df, ax=ax, cbar=False)

# colorbar
fig.colorbar(ax.get_children()[0], cax=cax, orientation="horizontal")

plt.show()

enter image description here

4
pcu