Pandas 如何用选择性记号绘制序列?

Pandas 如何用选择性记号绘制序列?,pandas,matplotlib,Pandas,Matplotlib,我有一个系列我想画成条形图:pd.Series([-4,2,3,3,4,5,9,20])。value_counts() 因为我有很多条,所以我只想显示一些(等距的)记号。 但是,除非我积极反对,否则pyplot将打印错误的标签。例如,如果我在下面的代码中遗漏了setxticklabels,我会得到 其中,索引中的每个元素都被提取并仅以指定的距离显示 此代码符合我的要求: import numpy as np import pandas as pd import matplotlib im

我有一个
系列
我想画成条形图:
pd.Series([-4,2,3,3,4,5,9,20])。value_counts()
因为我有很多条,所以我只想显示一些(等距的)记号。 但是,除非我积极反对,否则pyplot将打印错误的标签。例如,如果我在下面的代码中遗漏了
setxticklabels
,我会得到
其中,索引中的每个元素都被提取并仅以指定的距离显示

此代码符合我的要求:

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


但我还是觉得我在这里太聪明了。我是否缺少一个函数?这是最好的方法吗?

我想你把它复杂化了。您可以简单地使用以下命令。您只需要找到刻度和刻度标签之间的关系

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

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

如果要绘制数值,请考虑不使用pandas条形图;这是因为熊猫酒吧的情节本质上是绝对的

如果改为使用matplotlib条形图(本质上是数字),则根本不需要修改任何刻度

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