我有一个简单的matplotlib pcolor图,可以使用以下MWE进行复制:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
test_data = np.array([[-0.00842278, -0.03332517, -0.01478557, -0.00275494],
[ 0.16338327, 0.08383871, 0.03093892, 0.03380778],
[-0.02246485, -0.1490697 , -0.14918824, -0.12745594],
[ 0.02477743, 0.1537171 , 0.13111042, 0.11950057],
[-0.15408288, -0.04697411, -0.0068787 , -0.01576426],
[ 0.03508095, 0.19434805, 0.13647802, 0.11276903],
[-0.16683297, 0.05313956, 0.0283734 , 0.01179509],
[-0.08839198, -0.02095752, -0.00573671, 0.00360559],
[ 0.15476156, -0.06324123, -0.04798161, -0.03844384],
[-0.056892 , -0.09804484, -0.09506561, -0.08506755],
[ 0.2318552 , -0.02209629, -0.04530164, -0.02950514],
[-0.11914883, 0.00965362, -0.02431899, -0.0203009 ],
[ 0.16025558, 0.02234824, -0.01480751, -0.01487853],
[ 0.17345419, -0.04348332, -0.07625766, -0.05771962]])
test_df = pd.DataFrame(1 - abs(test_data))
test_df.columns = ['3', '6', '9', '12']
test_df.index = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '15', '20', '25', '30']
plt.pcolor(test_df, cmap=plt.cm.RdYlGn, vmin=0, vmax=1)
plt.show()
产生这个:
从上面可以看出,轴标签不正确,也没有与图的彩色矩形正确对齐。
我可以使用以下代码在x轴上创建预期的轴标记:
ax = plt.gca()
labels = [u'', u'3', u'', u'6', u'', u'9', u'', u'12', u'']
ax.set_xticklabels(labels)
产生这个:
我的问题是我无法在y轴上重现这一点,因为标签与矩形的中心不一致。
有没有办法让x和y轴标签正确,如数据框标题和索引中所述?确保标签的中心位于矩形上,而不是边缘上。
答案 0 :(得分:2)
这样做并不好(你将tick标签与数据分离),但你可以这样做:
fig,ax = plt.subplots()
ax.pcolor(test_df, cmap=plt.cm.RdYlGn, vmin=0, vmax=1)
ax.set_yticks(np.arange(len(test_df.index))+0.5)
ax.set_yticklabels(test_df.index)
ax.set_xticks(np.arange(len(test_df.columns))+0.5)
ax.set_xticklabels(test_df.columns)
我们将每个0.5, 1.5, 2.5
(以它们为中心)等设置为滴答,然后设置dataframe
索引和列中的刻度标签。
答案 1 :(得分:1)
我发现使用127.0.0.1 localhost testproject.dev
# later on for mulisite sub domains
127.0.0.1 localhost.com
127.0.0.1 subdomain.localhost.com
:
sns
正如您将注意到的,它绘制完全相同的内容,但直接使用索引和列作为标签。
另一个不同之处在于它使用import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib # magic command for sns to use matplotlib
test_data = np.array([[-0.00842278, -0.03332517, -0.01478557, -0.00275494],
[ 0.16338327, 0.08383871, 0.03093892, 0.03380778],
[-0.02246485, -0.1490697 , -0.14918824, -0.12745594],
[ 0.02477743, 0.1537171 , 0.13111042, 0.11950057],
[-0.15408288, -0.04697411, -0.0068787 , -0.01576426],
[ 0.03508095, 0.19434805, 0.13647802, 0.11276903],
[-0.16683297, 0.05313956, 0.0283734 , 0.01179509],
[-0.08839198, -0.02095752, -0.00573671, 0.00360559],
[ 0.15476156, -0.06324123, -0.04798161, -0.03844384],
[-0.056892 , -0.09804484, -0.09506561, -0.08506755],
[ 0.2318552 , -0.02209629, -0.04530164, -0.02950514],
[-0.11914883, 0.00965362, -0.02431899, -0.0203009 ],
[ 0.16025558, 0.02234824, -0.01480751, -0.01487853],
[ 0.17345419, -0.04348332, -0.07625766, -0.05771962]])
Cols = ['3', '6', '9', '12']
Index = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '15', '20', '25', '30']
test_df = pd.DataFrame(1 - abs(test_data),index=Index, columns=Cols)
sns.heatmap(test_df,cmap=plt.cm.RdYlGn,vmin=0,vmax=1,cbar=True)
的原始索引,因此您的图表不像matplotlib解决方案那样颠倒。
请注意,在我的电脑上,我必须放大窗口以查看颜色条,否则它会被隐藏。