Python Matplotlib 轴对于带有趋势线的日期是空白的
Python Matplotlib axis is blank for date with trend line
我可以使用价格数据正确绘制趋势线,但日期格式的 X Y 轴均为空白。我不确定是什么弄乱了轴的绘图配置。这是 Python 2.7 代码:
y = df['Close']
# calc the trendline
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)
#
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')) #
plt.show()
此外,df['Close']
的值样本为:
114.684
114.679
df['Time']
将包含示例值:
23:20
23:21
更新:我找到了你问题的根源。
除了以下问题之外,您还错误地复制了链接问题的答案。
您写道:ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%3.4f'))
您需要:ax.yaxis.set_major_formatter(FormatStrFormatter('%3.4f'))
查看更新后的图表:
在您的代码中,您在实际绘制任何内容之前就开始更改轴。
如果您将 ax.plot(x, p(x), 'r--')
移动到 add_subplot
行的正下方,这将起作用:
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
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--')
# 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'))
# floats-for-tick-lables
plt.show()
我可以使用价格数据正确绘制趋势线,但日期格式的 X Y 轴均为空白。我不确定是什么弄乱了轴的绘图配置。这是 Python 2.7 代码:
y = df['Close']
# calc the trendline
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)
#
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')) #
plt.show()
此外,df['Close']
的值样本为:
114.684
114.679
df['Time']
将包含示例值:
23:20
23:21
更新:我找到了你问题的根源。
除了以下问题之外,您还错误地复制了链接问题的答案。
您写道:ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%3.4f'))
您需要:ax.yaxis.set_major_formatter(FormatStrFormatter('%3.4f'))
查看更新后的图表:
在您的代码中,您在实际绘制任何内容之前就开始更改轴。
如果您将 ax.plot(x, p(x), 'r--')
移动到 add_subplot
行的正下方,这将起作用:
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
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--')
# 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'))
# floats-for-tick-lables
plt.show()