【问题标题】:Matplotlib shows x-axis labels incomplete ; how to prevent overlapping? [duplicate]Matplotlib 显示 x 轴标签不完整;如何防止重叠? [复制]
【发布时间】:2020-12-13 23:10:08
【问题描述】:

我已经编写了显示 MACD 指标图的代码。我所做的是在这里:

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

df = pd.read_csv(#stock_chart)
df = df.rename(columns={"<DTYYYYMMDD>":"Date"})
df['Date'] = pd.to_datetime(df['Date'].astype(str), format="%Y%m%d")
print(df.head())
#seting index for graph
df = df.set_index(df['Date'].values)
print(df.head())

我的数据框的头部是

#Macd
S_term = 12
L_term = 26
s_ema = df.close.ewm(span=S_term, adjust=False).mean()
l_ema = df.close.ewm(span=L_term, adjust=False).mean()
#calculate MACD
macd = s_ema - l_ema

signal_term = 9
signal_line = macd.ewm(span= signal_term, adjust=False).mean()

#plot the graphs
plt.figure(figsize=(100,10)) #width = 12.2in, height = 4.5
plt.plot(df.index, macd, label='macd', color = 'red')
plt.plot(df.index, signal_line, label='Signal Line', color='blue')
plt.tight_layout()

plt.xticks(rotation=0)
plt.legend(loc='upper left')
plt.show()

终于,我明白了:

无论如何,问题是尽管行索引标签是这样的:2020-08-19 or "%Y%m%d",图形标签不完整,如果我重新排序,数据会相互重叠。我该怎么办?

【问题讨论】:

  • 不完整是什么意思?
  • 我的意思是它必须在 x 轴上显示这样的东西 === 2004-10-25 但它只显示 2004 ... 好吗?

标签: python pandas matplotlib


【解决方案1】:

您可以使用Date locatorsDate formatters

import numpy
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas

N = 192
numpy.random.seed(N)

dates = pandas.date_range('1/1/2004', periods=N, freq='m')

df = pandas.DataFrame(
    data=numpy.random.randn(N), 
    index=dates,
    columns=['A']
)

fig, ax = plt.subplots()

ax.plot(df.index, df['A'])

ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))

fig.autofmt_xdate()

plt.show()

interval 是每次迭代之间的间隔。例如,如果是interval=2,则每隔一秒标记一次。

import numpy
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas

N = 192
numpy.random.seed(N)

dates = pandas.date_range('1/1/2004', periods=N, freq='m')

df = pandas.DataFrame(
    data=numpy.random.randn(N), 
    index=dates,
    columns=['A']
)

fig, ax = plt.subplots()

ax.plot(df.index, df['A'])
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=5))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))


fig.autofmt_xdate()

plt.show()

【讨论】:

  • 这不是我想做的,我想找到一种方法来完全显示 x 轴标签...谢谢!
  • @Dave3652 如果你真的想完全显示标签,只使用ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))。但这将导致不可避免的滴答声重叠。并且没有容易修复它。我为您提供了一个如何显示月份间隔的示例。
猜你喜欢
  • 2012-11-11
  • 2017-06-03
  • 2017-07-20
  • 2014-12-29
  • 2021-08-10
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
相关资源
最近更新 更多