matplotlib图形边框自动调整一些边距

时间:2014-06-18 16:37:25

标签: matplotlib

当我绘制matplotlib图时,我总是喜欢那里的边框,但有时一些数据可能会被边框隐藏。 所以我希望我可以稍微远离有效数据绘制边框。我知道我可以手动调整xlim()和ylim(),但是如果我更改了数据,它应该再次进行优化。 是否有一种自动方法可以在图形和边界之间保留一些边距。

e.g。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

ticks = [ 
"9-28 11:00:00.234", 
"9-28 11:11:00.123", 
"9-28 11:40:00.654", 
"9-28 11:50:00.341", 
"9-28 12:00:00.773"]

y = np.array([10, 12, 9, 15, 11])
x = [pd.to_datetime(i, format="%m-%d %H:%M:%S.%f") for i in ticks]

plt.step(x,y)
plt.xticks(rotation=25) 
plt.xticks(x, ticks)
plt.show()

代码将输出如下图表: enter image description here

这些步骤几乎被边界搞砸了!我希望保留一些余地,以便更好地查看数据!

1 个答案:

答案 0 :(得分:2)

基于我上面评论的建议,但现在正确处理Timestamp个对象,你可以从中获取参数.value,这是以纳秒为单位的时间。然后你可以编写一个autolim()函数来正确调整限制:

def autolim(pxmin=0.05, pxmax=0.05, pymin=0., pymax=0.05):
    from pandas.tslib import Timestamp

    ax = plt.gca()
    x, y = ax.lines[0].get_data()
    x = sorted(x)
    y = sorted(y)
    dx = x[-1].value - x[0].value
    dy = y[-1] - y[0]
    xmin = Timestamp(x[0].value - dx*pxmin)
    xmax = Timestamp(x[-1].value + dx*pxmax)
    ymin = y[0] - dy*pymin
    ymax = y[-1] + dy*pymax
    ax.set_xlim(xmin, xmax)
    ax.set_ylim(ymin, ymax)

如果您在代码的plt.show()行之前调用此函数,则应获取:

enter image description here