Расстояние между тепловыми картами Сиборна по оси x

#python #pandas #seaborn #heatmap #spacing

Вопрос:

В настоящее время я использую seaborn.heatmap() для отображения двоичных данных, которые я организовал в панде.Фрейм данных. Индекс фрейма данных является дискретным и соответствует разным местоположениям, в то время как столбцы являются непрерывными и представляют время. Как я могу сделать так, чтобы ось x на тепловой карте имела правильное расстояние между значениями измерений?

Чтобы быть более точным, я хочу, чтобы разница между 0 и 1 000 была в 1 000 раз больше, чем между 0 и 1 и 10 000 раз больше разницы между 1 и 1,1. Вот минимум того, как организованы мои данные:

 import seaborn as sns import numpy as np import pandas as pd import matplotlib.pyplot as plt  df=pd.DataFrame(np.random.randint(0,2,size=(5, 8)), columns=[1,1.1,2,3,4,1001,1002,1003], index=['A','B','C','D','E']) sns.heatmap(df,cmap='binary', square=True)  

Полученное изображение выглядит следующим образом: https://i.stack.imgur.com/uxSrH.png

Данные между измерениями (например. для значения измерения 500, которое не является частью фрейма данных, должно быть равно 0. Я не против отказаться от квадрата=Истина.

Для тех из вас, кому интересно, 0/1 являются ложными/Истинными утверждениями, которые указывают, проводил ли я измерение на этом участке отбора проб в данном месте в данный момент времени.

Огромное спасибо

Комментарии:

1. Я не уверен, что понимаю. У вас есть двоичные данные, поэтому вы не можете создать «тепловую карту». У вас будет только два цвета, несмотря ни на что, если ваши данные будут только 0 и 1. И поскольку ось x также дискретна, вы не получите расстояние, которое ищете, и я не думаю, что это то, что вам нужно.

2. Спасибо за ваш ответ. Он должен быть похож только на тепловую карту и показывать, где у меня есть измерение

Ответ №1:

Вы можете использовать plt.pcolor() , что создает неравномерно расположенную сетку с линиями сетки, указанными в ее первом и втором параметре. Поскольку сетка ячеек 5×8 требует линий сетки 6×9, как список значений x, так и значений y необходимо расширить на единицу.

В примере используется 101 вместо 1001 , потому что разница в 1000 раз приведет к тому, что все будет сведено к тонкой линии, за исключением области между 4 и 1001.

 import numpy as np import pandas as pd import matplotlib.pyplot as plt  # slightly modified example data df = pd.DataFrame(np.random.randint(0, 2, size=(5, 8)), columns=[1, 1.1, 2, 3, 4, 101, 102, 103],  index=['A', 'B', 'C', 'D', 'E']) plt.pcolor(list(df.columns)   [2 * df.columns[-1] - df.columns[-2]],  np.arange(len(df.index) 1),  df.values, cmap='binary') plt.yticks(np.arange(0.5, len(df.index)), df.index) # labels between the grid lines plt.show()  

plt.pcolor для создания сетки