Как установить правильный диапазон оси для plt.pcolor () в Python - PullRequest
0 голосов
/ 04 апреля 2019

Когда я хочу построить тепловую карту развернутого фрейма данных

import pandas as pd 
import seaborn as sns 
%matplotlib inline

sample = pd.DataFrame.from_dict({'x': np.tile(np.arange(2,5),(1,5))[0],
                                            'y': np.tile(np.arange(0,5),(1,3))[0],
                                            'value': np.random.rand(15)
                                            }) 
sample_pvt = sample.pivot_table(index='x',columns='y')  
plt.pcolor(sample_pvt)

Несмотря на то, что x находится в диапазоне от 2 до 5, на графике отображается только диапазон от 0 до 3.Я знаю, что использование seaborn может решить эту проблему, но есть ли способ указать диапазон оси в pcolor?Спасибо

1 Ответ

1 голос
/ 06 апреля 2019

Seaborn будет просто комментировать строки и столбцы графика pcolor (mesh).Чтобы добиться того же, здесь,

import matplotlib.pyplot as plt

import pandas as pd 
import numpy as np

sample = pd.DataFrame.from_dict({'x': np.tile(np.arange(2,5),(1,5))[0],
                                            'y': np.tile(np.arange(0,5),(1,3))[0],
                                            'value': np.random.rand(15)
                                            }) 
sample_pvt = sample.pivot_table(index='x',columns='y')  
sample_pvt.columns = sample_pvt.columns.droplevel(0)


plt.pcolor(sample_pvt)
plt.xticks(np.arange(len(sample_pvt.columns))+0.5,  sample_pvt.columns)
plt.yticks(np.arange(len(sample_pvt.index))+0.5,  sample_pvt.index)

plt.show()

enter image description here

Чтобы вместо этого разместить пиксели в числовом правильном порядке, вам нужно сначала решить, если х иЗначения y на самом деле являются центрами или краями пикселей.Для центров:

import matplotlib.pyplot as plt

import pandas as pd 
import numpy as np; np.random.seed(42)

sample = pd.DataFrame.from_dict({'x': np.tile(np.arange(2,5),(1,5))[0],
                                            'y': np.tile(np.arange(0,5),(1,3))[0],
                                            'value': np.random.rand(15)
                                            }) 
sample_pvt = sample.pivot_table(index='x',columns='y')  
sample_pvt.columns = sample_pvt.columns.droplevel(0)

x = np.linspace(sample_pvt.columns[0]-0.5, sample_pvt.columns[-1]+0.5, len(sample_pvt.columns)+1)
y = np.linspace(sample_pvt.index[0]-0.5, sample_pvt.index[-1]+0.5, len(sample_pvt.index)+1)
plt.pcolor(x, y, sample_pvt)

plt.show()

enter image description here

Для краев

x = np.linspace(sample_pvt.columns[0], sample_pvt.columns[-1]+1, len(sample_pvt.columns)+1)
y = np.linspace(sample_pvt.index[0], sample_pvt.index[-1]+1, len(sample_pvt.index)+1)
plt.pcolor(x, y, sample_pvt)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...