我正在使用Python
和Matplotlib
来尝试生成以下内容:四个图表绘制系统中收到的消息数量VS在给定时间段内处理这些消息的延迟,每隔5分钟。
也就是说, X
轴显示时间 A
到 B
的时间(格式为" %Y-%m-%d %H:%M
"),间隔为五分钟,而左 Y
轴显示在任何给定时刻收到的消息数量,右侧 Y
轴显示处理这些消息的延迟。
现在,我必须在图表中绘制两个X
轴,但我需要每个图表的时间戳相同,即所有必须在同一时间点开始和结束,即使某些图表在这些时间内没有任何事件(例如,图表#1从2015年10月5日15:50开始,并于2015年11月5日14:00停止,即使其中一个事件发生开始发生在10/5的17:00)。这就是杀手。
有谁知道我该怎么做?非常感谢
答案 0 :(得分:-1)
有谁知道我该怎么做?
是
如果Stack Overflow允许在问题中使用非MCVE帖子,简单的答案,只说"是",将会开箱即用,但毫无疑问会给StackOverflow这个伟大的社区带来真正的体验是
暂时考虑一下&你明白了。这绝对是一个没人会欣赏的方式。
问:怎么......?您可以重复使用一些格式化技巧。您可能已经体验过,matplotlib
的复杂结构是敏感的,其中格式化发生在Figure
处理中。因此,有些事情会在"之前发挥作用。绘制数据,有些只是"之后"绘制数据点/线。因此,请不要犹豫,测试/重新排序部分,以获得Look&感觉您希望在合理的时间内完成这些抛光工作(实际价值通常在与数据相关的见解和与现象相关的经验转换为一些新的战略价值,称为知识,不是吗? )。
所以几美分:
#---------------------------------------------------- # X-AXIS FORMATTING
aPlotAX.set_xlim( x_min, x_MAX ) # X-AXIS LIMITs ---
#lt.gca().xaxis.set_major_locator( matplotlib.ticker.FixedLocator( secs ) )
#lt.gca().xaxis.set_major_formatter( matplotlib.ticker.FuncFormatter( lambda pos, _: time.strftime( "%d-%m-%Y %H:%M:%S", time.localtime( pos ) ) ) )
aPlotAX.xaxis.set_major_locator( AutoDateLocator() )
aPlotAX.xaxis.set_minor_locator( HourLocator() )
#PlotAX.xaxis.set_minor_locator( MinuteLocator() ) # if not too dense
aPlotAX.xaxis.set_major_formatter( DateFormatter( '%Y-%m-%d %H:%M' ) )
# -------------------------------------------------------------------- X-FORMAT
#----------------------------------------------- # 90-deg x-tick-LABELs
try:
plt.setp( plt.gca().get_xticklabels(), rotation = 90,
horizontalalignment = 'right'
)
except:
print "DEBUG: EXC() on plt.setp( plt.gca().get_xticklabels(), rotation = 90, ... )"
# --------------------------------------------- # "tight"-en LAYOUT
try:
plt.tight_layout()
except:
print "DEBUG: EXC() on plt.tight_layout()"
'''
SOME pre-SAVE_AS-configuration(s) |||||||||||||||||||||||||||||||||||||||||||||
#Fig.set_figwidth( 1600.0 )
#Fig.set_figheight( 1400.0 )
# facecolor = 'k', # for inverse colourscheme
# edgecolor = 'w',
aFig = plt.figure( figsize = ( 5, 5 ), dpi = 100 ) # size not in [inch], but in [spatial-units] a 100-px-each...
#lt .savefig( <aFileNAME.PNG>, transparent = True, dpi = 300 ) # .PNG with alpha-channel background std-[px]-size are 800x600 at dpi
#lt .savefig( <aFileNAME.SVG>, transparent = True, dpi = 300 ) # .SVG with alpha-channel background std-[px]-size are 800x600 at dpi
#lt .savefig( <aFileNAME.000>, transparent = True, dpi = 300, format = "svg" ) # .SVG with alpha-channel background std-[px]-size are 800x600 at dpi
#lt .savefig( <aFileNAME.PDF>, transparent = True, dpi = 300 ) # .PDF with alpha-channel background std-[px]-size are 800x600 at dpi
# from matplotlib.backends.backend_pdf import PdfPages # .PDF-multi-page document
# pdf_pages = PdfPages('barcharts.pdf')
# aFig = plt.Figure...
# plt.plot...
# pdf_pages.savefig( aFig ) # .closes aPdfPAGE
# ...plot
# pdf_pages.savefig( aFig ) # .closes aPdfPAGE
# pdf_pages.close() # Finally: fileIO on disk