2016-11-22 4 views
2

тепловых карт у меня есть Сиборн Heatmap, который выглядит следующим образом:Искусственные клещ этикетки для Сиборна

enter image description here

... сгенерированные из панд dataframe случайно сгенерированных значений части из которых выглядит следующим образом:

enter image description here

значения по оси у, все в диапазоне [0,1], а также те, на оси х в диапазоне [0,2 * пи], и я просто хочу несколько коротких поплавки на регулярные интервалы для моих меток, но я могу только получить значения, которые находятся в моем фреймворке данных. Когда я пытаюсь указать значения, которые я хочу, они не помещают их в нужное место, как показано на рисунке выше. Он мой код прямо сейчас. Как я могу получить метки осей, которые я пытался указать с помощью xticks и yticks в этом коде в правильных местах (которые были бы равномерно распределены вдоль осей)?

import pandas as pd 
import numpy as np 
import matplotlib as plt 
from matplotlib.mlab import griddata 

sns.set_style("darkgrid") 
PHI, COSTH = np.meshgrid(phis, cos_thetas) 
THICK = griddata(phis, cos_thetas, thicknesses, PHI, COSTH, interp='linear') 

thick_df = pd.DataFrame(THICK, columns=phis, index=cos_thetas) 
thick_df = thick_df.sort_index(axis=0, ascending=False) 
thick_df = thick_df.sort_index(axis=1) 

cmap = sns.cubehelix_palette(start=1.6, light=0.8, as_cmap=True, reverse=True) 

yticks = np.array([0,0.2,0.4,0.6,0.8,1.0]) 

xticks = np.array([0,1,2,3,4,5,6]) 

g = sns.heatmap(thick_df, linewidth=0, xticklabels=xticks, yticklabels=yticks, square=True, cmap=cmap) 

plt.show(g) 
+0

Обратите внимание, что я также попытался вещами одних строки 'xticks = [(х, ул), если i% 10 == 0 else '' для i, x в перечислении (xticks)] ', но значения все еще длинные, случайные поплавки. – Arnold

+0

Если вы хотите только, например. отметьте отметку каждые пять полей, которые вы можете попробовать создать массив с четырьмя пустыми строками между каждым значением. Было бы разумно, что в ваших массивах тиков должно быть столько элементов, сколько у вашей тепловой карты есть строки/столбцы. Также я бы использовал строки вместо чисел. – Khris

+0

Но это то, что мой комментарий выше, и проблема в том, что каждые пять значений или что-то еще длинное, неприятное поплавок. Вы имеете в виду использование этого, чтобы указать местоположение, а затем установить там отдельное строковое значение? Я могу это сделать? – Arnold

ответ

3

Вот то, что должен делать то, что вы хотите:

cmap = sns.cubehelix_palette(start=1.6, light=0.8, as_cmap=True, reverse=True) 

yticks = np.linspace(0,1,6) 

x_end = 6 
xticks = np.arange(x_end+1) 

ax = sns.heatmap(thick_df, linewidth=0, xticklabels=xticks, yticklabels=yticks[::-1], square=True, cmap=cmap) 

ax.set_xticks(xticks*ax.get_xlim()[1]/(2*math.pi)) 
ax.set_yticks(yticks*ax.get_ylim()[1]) 

plt.show() 

Seaborn heatmap

Вы могли бы пройти ['{:,.2f}'.format(x) for x in xticks] вместо xticks, чтобы поплавок с 2 десятичными знаками.

Обратите внимание, что я переворачиваю ярлыки, потому что это то, что делает морской порт: см. matrix.py#L138.

Seaborn вычисляет позицию клеща примерно в том же месте (например: #L148), для вас, что составляет:

# thick_df.T.shape[0] = thick_df.shape[1] 
xticks: np.arange(0, thick_df.T.shape[0], 1) + .5 
yticks: np.arange(0, thick_df.T.shape[1], 1) + .5 
+1

Это сработало отлично. Спасибо! – Arnold

Смежные вопросы