我正在使用pandas .plot()绘制时间序列,并希望看到每个月显示为x-tick。
这是.plot()
的结果我试图使用其他帖子和matplotlib documentation中的示例并执行类似
的操作ax.xaxis.set_major_locator(
dates.MonthLocator(revenue_pivot.index, bymonthday=1,interval=1))
但是删除了所有的滴答声:(
我也试图通过xticks = df.index
,但它没有改变任何东西。
在x轴上显示更多刻度线的方法是什么?
答案 0 :(得分:7)
无需将任何参数传递给MonthLocator
。请务必在@ {Rotkiv的答案x_compat
来电中使用df.plot()
。
import pandas as pd
import numpy as np
import matplotlib.pylab as plt
import matplotlib.dates as mdates
df = pd.DataFrame(np.random.rand(100,2), index=pd.date_range('1-1-2018', periods=100))
ax = df.plot(x_compat=True)
ax.xaxis.set_major_locator(mdates.MonthLocator())
plt.show()
答案 1 :(得分:3)
您还可以使用pandas <option value="1">1</option>
<% if not $Quantity || $Quantity == 2 %>
<option value="2">2</option>
<% end_if %>
<% if not $Quantity || $Quantity == 3 %>
<option value="3">3</option>
<% end_if %>
<% if not $Quantity || $Quantity == 4 %>
<option value="4">4</option>
<% end_if %>
<% if not $Quantity || $Quantity == 5 %>
<option value="5">5</option>
<% end_if %>
<% if not $Quantity || $Quantity == 6 %>
<option value="6">6</option>
<% end_if %>
<% if not $Quantity || $Quantity == 7 %>
<option value="7">7</option>
<% end_if %>
<% if not $Quantity || $Quantity == 8 %>
<option value="8">8</option>
<% end_if %>
<% if not $Quantity || $Quantity == 9 %>
<option value="9">9</option>
<% end_if %>
<% if not $Quantity || $Quantity > 9 %>
<option value="10">10</option>
<% end_if %>
对象的属性手动格式化pandas DateTimeIndex
的x轴刻度和标签。
我发现使用Timestamp
的定位器比使用其他日期时间格式而不是大熊猫更容易(如果我没有记错的话),因此如果没有相应地转换日期,有时会显示奇怪的行为。
这是一个通用示例,它将每个月的第一天显示为基于pandas matplotlib.dates
对象属性的标签:
Timestamp
的产率:
希望这有帮助!
答案 2 :(得分:2)
正确的方法here 使用x_compat参数,可以抑制自动刻度分辨率调整
df.A.plot(x_compat=True)
答案 3 :(得分:0)
如果只想显示更多的报价,也可以深入研究pd.plotting._converter的结构:
dai = ax.xaxis.minor.formatter.plot_obj.date_axis_info
dai['fmt'][dai['fmt'] == b''] = b'%b'
绘制后,formatter
是TimeSeries_DateFormatter
,并且已经调用了_set_default_format
,因此self.plot_obj.date_axis_info is not None
。现在,您可以根据自己的喜好来操纵结构化数组.date_axis_info
,即包含更少的b''
和更多的b'%b'