带有趋势线的日期,Python Matplotlib轴为空白 [英] Python Matplotlib axis is blank for date with trend line

查看:180
本文介绍了带有趋势线的日期,Python Matplotlib轴为空白的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以使用价格数据正确绘制趋势线,但日期格式的X X Y轴均为空白.我不确定是什么弄乱了该轴的绘图配置.这是Python 2.7代码:

I can correctly plot a trendline with price data but the both X Y axis of date formatting is blank. I am not sure what is messing up this plot configuration for the axis. Here is the Python 2.7 code:

y = df['Close']

# calc the trendline http://stackoverflow.com/questions/26447191/how-to-add-trendline-in-python-matplotlib-dot-scatter-graphs

l = []
for t in df['Time']:
    datetime_object = datetime.datetime.strptime(str(t), '%H:%M')
    print datetime_object.hour
    print datetime_object.minute
    l.append((3600 * datetime_object.hour + 60 * datetime_object.minute))
x = l
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
fig = plt.figure()
ax = fig.add_subplot(111)

#http://stackoverflow.com/questions/17709823/plotting-timestamps-hour-minute-seconds-with-matplotlib
plt.xticks(rotation=25)
ax = plt.gca()
ax.set_xticks(x)
xfmt = md.DateFormatter('%H:%M')
ax.xaxis.set_major_formatter(xfmt)

ax.plot(x, p(x), 'r--')
ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%3.4f')) #http://stackoverflow.com/questions/29188757/matplotlib-specify-format-of-floats-for-tick-lables
plt.show()

此外,df['Close']的值样本为:

114.684
114.679

df['Time']将包含样本值:

23:20
23:21

推荐答案

更新:我找到了问题的根源.

Update: I found the source of your problem.

除了以下问题之外,您还错误地将答案复制到链接的问题中.

In addition to the below problem you incorrectly copied the answer to the linked question.

您写道:ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%3.4f')) 您需要:ax.yaxis.set_major_formatter(FormatStrFormatter('%3.4f'))

查看更新的图形:

https://imgur.com/a/RvO4z

在您的代码中,您在实际绘制任何内容之前就开始了轴更改.

In your code, you begin axis changes before you have actually plotted anything.

如果将ax.plot(x, p(x), 'r--')移到add_subplot行的下面,这将起作用:

If you move your ax.plot(x, p(x), 'r--') to just below your add_subplot line this will work:

import numpy as np
from matplotlib import pyplot as plt
import datetime

import matplotlib
from matplotlib.ticker import FormatStrFormatter

df = pandas.DataFrame()
df['Time'] = pandas.Series(['23:2','22:1'])
df['Close'] = pandas.Series([114.,114.])

y = df['Close']

# calc the trendline http://stackoverflow.com/questions/26447191/how-to-add-trendline-in-python-matplotlib-dot-scatter-graphs

l = []
for t in df['Time']:
    datetime_object = datetime.datetime.strptime(str(t), '%H:%M')
    print datetime_object.hour
    print datetime_object.minute
    l.append((3600 * datetime_object.hour + 60 * datetime_object.minute))
x = l
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
fig = plt.figure()
ax = fig.add_subplot(111)
#Added:
ax.plot(x, p(x), 'r--')

#http://stackoverflow.com/questions/17709823/plotting-timestamps-hour-   minute-seconds-with-matplotlib
plt.xticks(rotation=25)
ax = plt.gca()
ax.set_xticks(x)
xfmt = md.DateFormatter('%H:%M')
ax.xaxis.set_major_formatter(xfmt)

# REMOVED: ax.plot(x, p(x), 'r--')
# Changed: ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%3.4f')) 
ax.yaxis.set_major_formatter(FormatStrFormatter('%3.4f'))
#http://stackoverflow.com/questions/29188757/matplotlib-specify-format-of-    floats-for-tick-lables
plt.show()

这篇关于带有趋势线的日期,Python Matplotlib轴为空白的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆