重新采样后如何索引或绘制日期时间,以便它们正确显示在条形图轴上?

JR林德曼

我想像其他两个图一样在日期时间显示我的第三个图x轴数据(请参见链接图)。我对每个图表都使用了类似的方法,但是对第三数据集进行了重新采样,以便在我的时间段内每小时每小时在条形图中绘制降水量。当我最初尝试像在前两个格式中一样格式化第三张图的日期时,x轴标签要么消失,要么数据无法正确绘制。在下面的链接中,数据按照我的预期方式显示。

降雨的三个子图

我的时间序列数据看起来像这样,我只在乎“阅读”和“价值”:

Reading,Receive,Value,Unit,Quality
2018-04-07 13:09:28,2018-04-07 13:09:35,0.00,in,A
2018-04-07 06:01:25,2018-04-07 06:01:35,0.04,in,A
2018-04-07 04:38:15,2018-04-07 04:38:35,0.04,in,A

这是我在第二幅图中实现正确方案的方法:

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.patches as patches
import matplotlib.dates as mdates
import datetime as dt

#read data from csv
data2 = pd.read_csv('Arroyo_Corte_Madera_del_Presidio_38021_Precipitation_Accumulation_0.txt', usecols=['Reading','Value'], parse_dates=['Reading'])

#set date as index
data2.set_index('Reading',inplace=True)

#plot data
ax2 = plt.subplot(3, 1, 2)
data2.plot(ax=ax2)

#set ticks every 12 hours
ax2.xaxis.set_major_locator(mdates.HourLocator(byhour=range(0,24,12)))
plt.xticks(rotation=0, ha='center')

#format date
ax2.xaxis.set_major_formatter(mdates.DateFormatter('%b %d\n%H:%M:%S'))

ax2.legend().set_visible(False)
ax2.set_title('Accumulated Rainfall\nApril 5-7, 2018')
ax2.set_xlabel('')
ax2.set_ylabel('Inches Since Oct 1 2017')
ax2.set_ylim(17.5, 22)

arrow_date2 = mdates.datestr2num('04/07/2018 04:30:00')
start_date2 = mdates.datestr2num('04/07/2018 03:00:00')
end_date2 = mdates.datestr2num('04/07/2018 06:00:00')
text_date2 = mdates.datestr2num('04/07/2018 03:00:00')
ax2.axvspan(start_date2, end_date2, 0.86, 0.97, color='green', alpha=0.35)

ax2.annotate("Approximate time of\nSlope Failure", xy=(arrow_date2, 21.5), xycoords='data', xytext=(text_date2, 19), textcoords='data', arrowprops=dict(arrowstyle="->", connectionstyle="arc3"))

到目前为止,我的代码是第三个子图:

#read data from csv
data =pd.read_csv('Arroyo_Corte_Madera_del_Presidio_38021_Precipitation_Increment_0.txt', usecols=['Reading','Value'], parse_dates=['Reading'])

#set date as index
data.set_index('Reading',inplace=True)
resamp = data.resample('1H').sum().reset_index()

#plot data
ax3 = plt.subplot(3, 1, 3)
resamp.plot(kind='bar',ax=ax3, x='Reading', y='Value', width=0.9)

#set ticks every other hour
plt.xticks(ha='center')
for label in ax3.xaxis.get_ticklabels()[::2]:
       label.set_visible(False)

ax3.legend().set_visible(False)
ax3.set_title('Rainfall in Hours\nApril 6-7, 2018')
ax3.set_xlabel('')
ax3.set_ylabel('Precipitation Increment (in)')

plt.show()

如何修复代码以使轴标签以我希望的方式绘制?

JR林德曼

很明显,我的代码是错误的。当我重新采样数据时,我重置了索引。这创建了一个新的索引列,该列弄乱了我想要的x值(“读数”)。另外,我不应该在resamp.plot中绘制“ x”。该解决方案有助于:与Pandas进行绘图这是更正的代码:

#read data from csv
data = pd.read_csv('Arroyo_Corte_Madera_del_Presidio_38021_Precipitation_Increment_0.txt', usecols=['Reading','Value'], parse_dates=['Reading'])

#set date as index
data.set_index('Reading',inplace=True)
resamp = data.resample('1H').sum()   # changed here

#plot data
ax3 = plt.subplot(3, 1, 3)
resamp.plot(ax=ax3, y='Value', kind='bar', width=0.9) # changed here

ax3.set_xticklabels([dt.strftime('%b %d\n%H:%M:%S') for dt in resamp.index])
plt.xticks(rotation=0, ha='center')
for i, tick in enumerate(ax3.xaxis.get_major_ticks()):
     if (i % (4) != 0): # 4 hours 
         tick.set_visible(False)
ax3.legend().set_visible(False)
ax3.set_title('Rainfall in Hours\nApril 6-7, 2018')
ax3.set_xlabel('')
ax3.set_ylabel('Precipitation Increment (in)')
ax3.set_ylim(0.00, 0.40)

plt.show()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 matplotlib,如何绘制条形图而不显示日期索引值之间的日期?

如何在条形图范围轴上显示单位

使用Coreplot布置条形图,并使用labelFormatter在X轴上显示日期。但是条形图没有显示

如何在matplotlib中的x轴上使用正确的日期时间索引正确绘制回归输出?

如何在Pandas数据框中正确绘制条形图?x值一直显示为索引

如何在同一图表上用单独的轴绘制条形图和线形图?

Seaborn:绘制在Y轴上显示属性均值的条形图?

如何获得对当前图形和轴对象的引用,以便我可以强制条形图y轴仅显示整数

堆叠条形图,在 x 轴上放置良好的日期

matplotlib轴条形图由于从熊猫df索引x轴而无法将条形图彼此相邻绘制

在左轴上绘制线图,在右轴上绘制条形图

Highcharts - 条形图在 Y 轴上显示完整标签

如何缩放条形图的条形图,以便显示包含数据的完整图形

如何在charjs中在y轴上显示条形图

调整条形图 y 轴,以便可以很好地绘制更高的 y 值

如何在Kibana的条形图中在X轴上正确排序日期?

如何以正确的顺序绘制分组的条形图

如何隐藏条形图轴上的线?

x轴上24小时的条形图,日期时间数据仅在此部分的开头

如何在DASH上绘制重叠/叠加的条形图?

绘制条形图.js时间序列

MySQL获取绘制条形图的日期

轴上的MATLAB条形图

使用plottable.js在时间轴上的条形图-条形位置

用ggplot2中定义为时间序列的X轴绘制条形图

带有最近日期的条形图,其中日期是日期时间索引

Python Matplotlib –条形图代表它们在x轴上的位置

在 TextView 背景上绘制条形图

在matplotlib上绘制条形图