使用sort_values和pandas / pyplot时,定义x轴的绘图顺序

时间:2018-02-25 20:02:41

标签: python-3.x pandas matplotlib

我正在绘制时区(UTC)'的条形图。 Vs '频率',在twitter帖子的pandas数据框中使用value_counts()作为列' UTC_Hrs'

UTC_Hrs
-5.0
11.0

0.0

我希望从-11.0到+ 13.0订购x轴,但我无法解决如何操作的问题。

order = ["-11.0", "-10.0", "-9.0", "-8.0", "-7.0", "-6.0",  "-5.0", "-4.0",
         "-3.5", "-3.0", "0.0", "1.0" , "2.0","3.0", "4.0", "5.0",                
         "5.5","6.0","7.0", "8.0", "9.0", "10.0", "11.0", "13.0"]

通过使用,value_counts(sort = False),我发现了如何在df中进行排序:

df['UTC_Hrs'].value_counts(sort=False).plot(kind='bar')

我还发现了如何假装我使用了它; - ):

set_xticklabels(order) 

我尝试过其他答案和熊猫文档启发的其他多种变体,但没有任何效果。最复杂的事情,也许我最接近的是使用字典和映射,但无法解决如何在value_counts上调用它,认为这是错误的方法。

UTC_Hrs = df['UTC_Hrs'] 
mapping = {UTC_Hrs: i for i, UTC_Hrs in enumerate(order)}
key = df['UTC_Hrs'].map(mapping)
dfx = df.iloc[key.argsort()]
dfx.plot(kind='bar')??? value_counts by referencing dict?

非常感谢任何帮助和建议,谢谢

1 个答案:

答案 0 :(得分:1)

您可以将reindex与交集orders.index一起使用,但必须使用相同的类型 - string s或float s:

s = df['UTC_Hrs'].astype(str).value_counts()
s.reindex(np.intersect1d(order, s.index)).plot.bar()
s = df['UTC_Hrs'].value_counts()
s.reindex(np.intersect1d(np.array(order).astype(float), s.index)).plot.bar()