Seaborn图未显示在轴上

时间:2018-09-10 21:15:07

标签: python pandas matplotlib seaborn

我有一个看起来像这样的pandas DataFrame:

counts = pd.DataFrame({'Pair A': {8: 4, 9: 1, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0},
 'Pair B': {8: 4, 9: 2, 10: 1, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0},
 'Pair C': {8: 3, 9: 2, 10: 1, 11: 1, 12: 1, 13: 1, 14: 1, 15: 1},
 'Pair D': {8: 2, 9: 1, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0}})

我只是使用以下代码使用DataFrame的一部分创建一个简单的图:

plt.figure()
sns.set_palette("pastel")
temp = pd.DataFrame(counts).drop([0,1,2,3,4,5,6], axis='index')
temp.index = temp.index + 1

temp.plot()
sns.set_style('ticks')
plt.ylabel('title')
plt.xlabel('xlabel')
plt.title('title')
plt.xticks(range(len(temp.index)), temp.index, rotation=45)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
sns.despine(offset=10, trim=True)
plt.xticks(rotation=45)

但是它会生成如下图像:

enter image description here

如何在X轴上居中绘制图形?

2 个答案:

答案 0 :(得分:1)

调用plt.xticks并提供2个位置参数时,第一个参数变为locs,这是标签将出现的x值,第二个变为labels,这是刻度标签值。因此,使用plt.xticks(range(len(temp.index)), temp.index, rotation=45)时,您将在位置0、1、2、3 ....处绘制x刻度标签,而数据处于不同范围(8,9,10 ....)。 >

因此,如果要自定义标签,可以更改label部分,例如plt.xticks(temp.index, ['x%s'% v for v in temp.index], rotation=45)

答案 1 :(得分:0)

看来这是

plt.xticks(range(len(temp.index)), temp.index, rotation=45)

导致此问题,如果用此替换:

plt.xticks(temp.index, temp.index, rotation=45)

一切正常。