Python 在X轴上散布年和月,在Y轴上散布日

Python 在X轴上散布年和月,在Y轴上散布日,python,datetime,matplotlib,scatter-plot,Python,Datetime,Matplotlib,Scatter Plot,我有一个日期时间序列(称为日期),如下所示: 0 2012-06-26 1 2011-02-22 2 2012-06-06 3 2013-02-10 4 2004-01-01 5 2011-01-25 6 2015-11-02 我想用Y轴上的日期和X轴上的月份和年份做一个散点图 我一直在玩pyplot.plot\u date,但找不出任何解决方案 它应该是只有Y轴上有日期的东西 有什么建议吗?由于我对您的问题不太清楚,我假设您希望将所有输

我有一个日期时间序列(称为日期),如下所示:

0     2012-06-26
1     2011-02-22
2     2012-06-06
3     2013-02-10
4     2004-01-01
5     2011-01-25
6     2015-11-02
我想用Y轴上的日期和X轴上的月份和年份做一个散点图

我一直在玩pyplot.plot\u date,但找不出任何解决方案

它应该是只有Y轴上有日期的东西


有什么建议吗?

由于我对您的问题不太清楚,我假设您希望将所有输入日期时间条目分散绘制在最早年份和最近年份之间(仅从给定输入中选择)

此外,这是我在“matplotlib”库中的第一次尝试。所以,我只希望下面的答案能引导你达到预期的结果

import datetime
import numpy
import matplotlib.pyplot as plt
from matplotlib.dates import MONDAY
from matplotlib.dates import DateFormatter, MonthLocator, WeekdayLocator
from matplotlib.dates import date2num

# Input datetime series.
dt_series = ["2012-06-26", "2011-02-22", "2012-06-06", "2013-02-10", "2004-01-01", "2011-01-25", "2015-11-02"]

mondays = WeekdayLocator(MONDAY)
months = MonthLocator(range(1, 13), bymonthday=1, interval=6)
monthsFmt = DateFormatter("%b'%y")

# Loop to create our own X-axis and Y-axis values.
# mths is for X-axis values, which are months along with year.
# dates is for Y-axis values, which are dates.
mths = list()
dates = list()
for dt in dt_series:
    mths.append(date2num(datetime.datetime.strptime(dt.replace('-', ''), "%Y%m%d")))
    dates.append(numpy.float64(float(dt.split('-')[2])))

fig, ax = plt.subplots(squeeze=True)
ax.plot_date(mths, dates, 'o', tz=None, xdate=True, ydate=False)
ax.xaxis.set_major_locator(months)
ax.xaxis.set_major_formatter(monthsFmt)
ax.xaxis.set_minor_locator(mondays)
ax.autoscale_view()
ax.grid(True)

fig.autofmt_xdate()

plt.show()
我还建议您浏览我用作参考的以下链接:


谢谢

看看matplotlib,它真的很有用。 这也可能有助于您开始打印

    dates = [
    '2012-06-26',
    '2011-02-22',
    '2012-06-06',
    '2013-02-10',
    '2004-01-01',
    '2011-01-25',
    '2015-11-02',
]

year = []
month = []
day = []


# Sorts your data in an useable dataset
def sort_data():
    for i in range(len(dates)):
        extracted_year = dates[i][0:4]
        extracted_year = int(extracted_year)
        year.append(extracted_year)
    for j in range(len(dates)):
        extracted_month = dates[j][5:7]
        extracted_month = int(extracted_month)
        month.append(extracted_month)
    for k in range(len(dates)):
        extracted_day = dates[k][8:10]
        extracted_day = int(extracted_day)
        day.append(extracted_day)

sort_data()

# Just checking if sort_date() worked correctly
print(year)
print(month)
print(day)

就目前而言,我的最佳解决方案是将年和月转换为浮动,将天转换为整数:

from matplotlib import pyplot
dates = [
 '2012-06-26',
 '2011-02-22',
 '2012-06-06',
 '2013-02-10',
 '2004-01-01',
 '2011-01-25',
 '2015-11-02',]

fig, ax = pyplot.subplots()
ax.scatter(date.apply(lambda x: float(x.strftime('%Y.%m'))),date.apply(lambda x: x.day), marker='o')

不幸的是,现在还不清楚你想要实现什么。由于您只有一个时间序列,而散射需要x和y输入,所以不清楚哪些数据应该在哪里。也许你可以举个例子,告诉我们时间序列的第一个日期应该如何出现在图表中。此外,问题的定义也不明确:“没有什么对我有用”不是一个充分的问题描述。请确保您已经阅读并理解了如何制作一个。那么你的问题就相应了。我有一系列发生在特定日期的事件,我想用散点图表示它们,Y轴上有天,X轴上有月和年。类似于但在Ydoes matplotlib上有天的情况是否需要对数据集进行排序?我可以用Date.apply(lambda x:x.month)或dates.apply(lambda x:x.year)从中拆分月份和年份,因为它是datetime64格式。但我不知道如何在Y上绘制日期,在X上绘制月份和年份。嗨@MuzZzdY,你试过这个吗?这正是你所要求的。