我有一个要绘制为条形图的Series
:pd.Series([-4,2, 3,3, 4,5,9,20]).value_counts()
由于我有很多条,所以我只想显示一些(等距)刻度线。
但是,除非我积极反对,否则pyplot会打印错误的标签。例如。如果我在下面的代码中忽略了set_xticklabels
,我会得到
从索引中提取每个元素并以指定的距离显示它们。
这段代码可以满足我的要求:
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()
但是我仍然觉得我在这里变得不必要地聪明。我是否缺少功能?这是最好的方法吗?
答案 0 :(得分:1)
如果要绘制数字值,请考虑不使用熊猫柱状图;那是因为熊猫柱状图本质上是绝对的。
如果改为使用本质上是数字的matplotlib条形图,则根本不需要修补任何滴答声。
s = pd.Series([-4,2, 3,3, 4,5,9,20]).value_counts().sort_index()
plt.bar(s.index, s)
答案 1 :(得分:0)