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)