首页 > 解决方案 > 如何在python中为plt.pcolor()设置右轴范围

问题描述

当我想绘制旋转数据框的热图时

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 中指定轴范围?谢谢

标签: pythonmatplotlib

解决方案


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()

在此处输入图像描述

要改为以数字正确的方式放置像素,您需要首先确定 x 和 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()

在此处输入图像描述

对于边缘,

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)

在此处输入图像描述


推荐阅读