Python 如何在matplotlib中使用日期时间更改x轴的范围?

Python 如何在matplotlib中使用日期时间更改x轴的范围?,python,django,date,matplotlib,Python,Django,Date,Matplotlib,我试着在x轴上画一个日期图,在y轴上画一个值图。它工作的很好,除了我不能得到x轴的范围是适当的。x轴范围始终为2012年1月至2016年1月,尽管我的日期是从今天开始。我甚至指定xlim应该是第一个也是最后一个日期 我是为python django写这篇文章的,如果相关的话 import datetime import matplotlib.pyplot as plt x = [datetime.date(2014, 1, 29), datetime.date(2014, 1, 29),

我试着在x轴上画一个日期图,在y轴上画一个值图。它工作的很好,除了我不能得到x轴的范围是适当的。x轴范围始终为2012年1月至2016年1月,尽管我的日期是从今天开始。我甚至指定xlim应该是第一个也是最后一个日期

我是为python django写这篇文章的,如果相关的话

 import datetime
 import matplotlib.pyplot as plt

 x = [datetime.date(2014, 1, 29), datetime.date(2014, 1, 29), datetime.date(2014, 1, 29)] 
 y = [2, 4, 1]

 fig, ax = plt.subplots()
 ax.plot_date(x, y)
 ax.set_xlim([x[0], x[-1]])

 canvas = FigureCanvas(plt.figure(1))
 response = HttpResponse(content_type='image/png')
 canvas.print_png(response)
 return response
以下是输出:

编辑: 看到OP的实际数据后,所有值都在同一日期/时间。因此matplotlib会自动缩小x轴。您仍然可以使用
datetime
对象手动设置x轴限制


如果我在matplotlib v1.3.1上执行类似操作:

import datetime
import matplotlib.pyplot as plt

x = [datetime.date(2014, 1, 29)] * 3 
y = [2, 4, 1]

fig, ax = plt.subplots()
ax.plot_date(x, y, markerfacecolor='CornflowerBlue', markeredgecolor='white')
fig.autofmt_xdate()
ax.set_xlim([datetime.date(2014, 1, 26), datetime.date(2014, 2, 1)])
ax.set_ylim([0, 5])
我得到:


轴限制与我指定的日期匹配。

在Paul H的解决方案的帮助下,我能够更改基于时间的x轴的范围

对于其他初学者,这里有一个更通用的解决方案

导入matplotlib.pyplot作为plt
将日期时间导入为dt
#设置X范围。使用左变量和右变量可以轻松更改范围。
#
左=日期(2020年3月15日)
右=日期(2020年7月15日)
#创建阳性病例的散点图
#
plt.散射(
x、 y,c=“蓝色”,edgecolor=“黑色”,
线宽=1,marker=“o”,alpha=0.8,label=“总阳性检测”
)
#将日期格式化为月和日
plt.gca().xaxis.set\u major\u格式化程序(mdates.DateFormatter(“%m-%d”))
#更改滴答声间隔
plt.gca().xaxis.set\u major\u定位器(mdates.DayLocator(间隔=30))
#以一定角度放置x轴标签
plt.gca().xaxis.set_tick_参数(旋转=30)
#更改x轴范围
plt.gca().setxbound(左、右)
plt.show()

我们需要查看您的一些数据才能运行您的示例。简单的自助回答是在向轴添加数据后调用
print(ax.get_xlim())
,查看返回的值。然后,您可以根据需要调整它们。@aled1027您的所有点都是同时调整的。这真的是你正在处理的数据吗?谢谢你的帮助。我把它修好了。当我从数据库检索数据时,数据没有小时、分钟和秒。此解决方案可以使用
ax.set\xlim([datetime.datetime(2014,1,28,23,50,0),datetime.datetime(2014,1,29,0,10,0)])从
datetime.date
推广到
datetime.datetime
。同样有效的方法是
导入熊猫作为pd
,并使用
ax.set_xlim([pd.to_datetime('2014-01-28 23:50:00')、pd.to_datetime('2014-01-29 00:10:00'))
@Qaswed不确定这是如何“通用化的”,但是的,
date
datetime
都是对象work@PaulH“广义”从某种意义上说,
datetime
允许
datetime(2014,1,28,23,50,0)
datetime(2014,1,29,0,0,0)
,但是(据我所知)
date
只允许
日期(2014,1,29)
。关于这个答案,使用
ax set\xbound()
而不是通常的
ax.set\im()
,(一些)澄清