如何绘制带有选择刻度的系列?

时间:2019-03-02 13:56:57

标签: pandas matplotlib

我有一个要绘制为条形图的Seriespd.Series([-4,2, 3,3, 4,5,9,20]).value_counts() 由于我有很多条,所以我只想显示一些(等距)刻度线。 但是,除非我积极反对,否则pyplot会打印错误的标签。例如。如果我在下面的代码中忽略了set_xticklabels,我会得到 wrong labels
从索引中提取每个元素并以指定的距离显示它们。

这段代码可以满足我的要求:

import numpy as np 
import pandas as pd 
import matplotlib 
import matplotlib.pyplot as plt 
s = pd.Series([-4,2, 3,3, 4,5,9,20]).value_counts().sort_index()  
mi,ma = min(s.index), max(s.index)  
s = s.reindex(range(mi,ma+1,1), fill_value=0)  
distance = 10 
a = s.plot(kind='bar') 
condition = lambda t: int(t[1].get_text()) % 10 == 0 
ticks_,labels_=zip(*filter(condition, zip(a.get_xticks(), a.get_xticklabels())))  
a.set_xticks(ticks_)   
a.set_xticklabels(labels_) 
plt.show() 

correct labels

但是我仍然觉得我在这里变得不必要地聪明。我是否缺少功能?这是最好的方法吗?

2 个答案:

答案 0 :(得分:1)

如果要绘制数字值,请考虑不使用熊猫柱状图;那是因为熊猫柱状图本质上是绝对的。

如果改为使用本质上是数字的matplotlib条形图,则根本不需要修补任何滴答声。

s = pd.Series([-4,2, 3,3, 4,5,9,20]).value_counts().sort_index()
plt.bar(s.index, s)

enter image description here

答案 1 :(得分:0)

我认为您过于复杂了。您可以简单地使用以下内容。您只需要找到刻度和刻度标签之间的关系即可。

a = s.plot(kind='bar') 

xticks = np.arange(0, max(s)*10+1, 10) 
plt.xticks(xticks + abs(mi), xticks)

enter image description here