首先让我解释一下为什么你选择设置方法nbins
定位器参数失败,尽管原则上该方法可能完全符合您的要求。
图中的条形位于整数位置0,1,2,...N-1
。它们的标签被设置为固定的文本列表。因此,如果您选择仅使用 5 个刻度,则这些刻度的位置正确,但这些刻度的标签将被视为固定标签列表中的前 5 个元素。因此,第三个条具有第二个条的标签,第五个条具有第三个条的标签,依此类推。
知道了这一点,我们可以通过对当前标签进行切片,在每隔一个柱设置新的价格变动和价格变动标签。您可以通过以下方式获取当前刻度位置和标签plt.xticks()
,它返回一个元组ticks
and labels
。切片列表很容易通过::
操作员,
e.g. [0,1,2,3,4,5][1::2]
回报[1,3,5]
. Hence:
plt.xticks(plt.xticks()[0][1::2],
plt.xticks()[1][1::2])
完整示例:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([{'DATETIME': '2017-09-29 01:00,', 'Population': 1000},
{'DATETIME': '2017-09-29 02:00,', 'Population': 3000},
{'DATETIME': '2017-09-29 03:00,', 'Population': 4000},
{'DATETIME': '2017-09-29 04:00,', 'Population': 5000},
{'DATETIME': '2017-09-29 05:00,', 'Population': 7000},
{'DATETIME': '2017-09-29 06:00,', 'Population': 6000},
{'DATETIME': '2017-09-29 07:00,', 'Population': 5000},
{'DATETIME': '2017-09-29 08:00,', 'Population': 4000},
{'DATETIME': '2017-09-29 09:00,', 'Population': 4000},
{'DATETIME': '2017-09-29 10:00,', 'Population': 4000}])
df.index = df['DATETIME']
df.index = (pd.to_datetime(df.index)).strftime("%m/%d %H:00")
df.Population.plot.bar()
plt.tick_params(axis='both', which='both', labelsize=7)
plt.xticks(plt.xticks()[0][1::2],
plt.xticks()[1][1::2])
plt.tight_layout()
plt.show()