当我绘制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()
代码将输出如下图表:
这些步骤几乎被边界搞砸了!我希望保留一些余地,以便更好地查看数据!
答案 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()
行之前调用此函数,则应获取: