当x轴是不连续的pandas DatetimeIndex时,如何删除冗余日期时间

时间:2017-06-22 04:57:43

标签: python pandas matplotlib series

我想绘制一个大熊猫系列,其中索引是无关紧要的DatatimeIndex。我的代码如下:

import matplotlib.dates as mdates
index = pd.DatetimeIndex(['2000-01-01 00:00:00', '2000-01-01 00:01:00',
           '2000-01-01 00:02:00', '2000-01-01 00:03:00',
           '2000-01-01 00:07:00',
           '2000-01-01 00:08:00'],
          dtype='datetime64[ns]')
df = pd.Series(range(6), index=index)
print(df)
plt.plot(df.index, df.values)
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%M"))
plt.show()

输出为:enter image description here 但结果并不是我真正想要的,因为2000-01-01 00:04:00也在图像上绘制。期望的结果是在x轴03:00紧邻07:00并且图像应该是直线。希望你的好主意。

1 个答案:

答案 0 :(得分:2)

一种可能的解决方案是将string转换为s = pd.Series(range(6), index=index) print(s) 2000-01-01 00:00:00 0 2000-01-01 00:01:00 1 2000-01-01 00:02:00 2 2000-01-01 00:03:00 3 2000-01-01 00:07:00 4 2000-01-01 00:08:00 5 dtype: int32 s.index = s.index.strftime('%M') s.plot() 并使用strftime

arange

另一个解决方案是按x = np.arange(len(s.index)) plt.plot(x, s) plt.xticks(x, s.index.strftime('%M')) plt.show() 绘图,然后添加Series.plot

public static void CreateItemsList(ref List<Item> itemsList)
        {
            var doc = XDocument.Load(@"..\..\ItemsXML.xml");

            itemsList = doc.Root
                .Descendants("ITEM")
                .Select(node => new Item
                {
                    ItemName = node.Element("ITEMNAME").Value,
                    ItemPrice = decimal.Parse(node.Element("ITEMPRICE").Value)
                })
                .ToList();

            Console.WriteLine(string.Join(",", itemsList.Select(x => x.ToString())));

        }

xticks