matplotlib 如何用日期时间改变x轴的范围?

vmjh9lq9  于 2023-04-12  发布在  其他
关注(0)|答案(2)|浏览(205)

我试图绘制一个x轴为日期,y轴为值的图表。它工作得很好,除了我不能得到合适的x轴范围。x轴范围总是Jan 2012到Jan 2016,尽管我的日期是从今天开始的。我甚至指定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

下面是输出:

cgvd09ve

cgvd09ve1#

编辑:

从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])

我得到:

坐标轴和我指定的日期吻合。

hfsqlsce

hfsqlsce2#

借助Paul H的解决方案,我能够更改基于时间的x轴的范围。
这里是一个更通用的解决方案,供其他初学者使用。

import matplotlib.pyplot as plt
import datetime as dt
import matplotlib.dates as mdates

# Set X range. Using left and right variables makes it easy to change the range.
#
left = dt.date(2020, 3, 15)
right = dt.date(2020, 7, 15)

# Create scatter plot of Positive Cases
#
plt.scatter(
  x, y, c="blue", edgecolor="black", 
  linewidths=1, marker = "o", alpha = 0.8, label="Total Positive Tested"
)

# Format the date into months & days
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m-%d')) 

# Change the tick interval
plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=30)) 

# Puts x-axis labels on an angle
plt.gca().xaxis.set_tick_params(rotation = 30)  

# Changes x-axis range
plt.gca().set_xbound(left, right)

plt.show()

相关问题