繁体   English   中英

Matplotlib中图表开头/结尾的X轴标签

[英]X-axis label at start/end of chart in Matplotlib

我使用matplotlib和pyplot在Python中创建了温度图,但无法弄清楚如何为x轴和最后一个标签上的第一个值添加日期标签。 我尝试了多次DayLocator迭代,但无济于事。 我想保持实际情节的界限相同,并希望保持每天的次要刻​​度,如图中输入图像描述 ,因此在线图的开头或结尾没有空格。 数据时间为06/01至08/30。 这是我的完整代码,除了06/01的第一个刻度以及08/30的最后一个刻度之外没有显示:

import csv
import pylab
from datetime import datetime
from matplotlib import pyplot as plt
import matplotlib.dates as mdates

filename ='Summer17.csv'
with open(filename) as f:
   reader = csv.reader(f)
   header_row = next(reader)

dates_list, temperature, dewpoint = [], [], []
for row in reader:
    if len(row) < 4: 
        continue
    datestring = ("2017/{0:}/{1:} {2:}".format(*row))
    date_obj = datetime.strptime(datestring, "%Y/%m/%d %H:%M")
    dates_list.append(date_obj) 
    temp = float(row[3])
    temperature.append(temp)




fig = plt.figure(dpi=128, figsize=(10,6))
ax = fig.add_axes([0.1, 0.1, 0.85, 0.75])
plt.plot(dates_list,temperature, linewidth=0.5, c='red')
plt.xlim(dates_list[1],dates_list[-1])

myFmt = mdates.DateFormatter('%m/%d') 
months = mdates.MonthLocator() 
days1 = mdates.DayLocator(bymonthday=(1,15))   # every Day
dayss = mdates.DayLocator()

ax.xaxis.set_major_formatter(myFmt)
ax.xaxis.set_major_locator(days1)
ax.xaxis.set_minor_locator(dayss)

在此输入图像描述

如果2017-06-01实际上是绘图列表的一部分,则会显示。 DayLocator(bymonthday=(1,15))为每个月的第一个和第十五个设置滴答, 2017-06-01是一个月的第一个,因此它将被显示。 (如果不是, 2017-06-01不是列表的一部分。)

问题现在可能是2017-08-30可能是列表的一部分,但它不是任何月份的第15个月的第1个。 因此,想法可以是使用DayLocator(bymonthday=(1,15))来查找要显示的刻度,但在显示它们之前,将额外需要的2017-08-30添加到位置列表并使用FixedLocator

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker
import datetime
import numpy as np

start = datetime.datetime(2017,6,1)
end = datetime.datetime(2017,8,30)
dates_list = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days+1)]

temperature = np.cumsum(np.random.randn(len(dates_list)))

myFmt = mdates.DateFormatter('%m/%d') 
months = mdates.MonthLocator()  
days = mdates.DayLocator(bymonthday=(1,15))   
dayss = mdates.DayLocator()

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(dates_list,temperature, linewidth=0.5, c='red')

ax.set_xlim(dates_list[0],dates_list[-1])

ax.xaxis.set_major_formatter(myFmt)
ax.xaxis.set_major_locator(days)
ax.xaxis.set_minor_locator(dayss)

# add the (2017,8,30) to the ticks
locs = list(ax.get_xticks())+ [mdates.date2num(datetime.datetime(2017,8,30))]
locator= matplotlib.ticker.FixedLocator(locs)
ax.xaxis.set_major_locator(locator)

plt.show()

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM