Python Matplotlib在x轴上绘制多条暗线

Python Matplotlib在x轴上绘制多条暗线,python,pandas,matplotlib,Python,Pandas,Matplotlib,下面是正在讨论的情节。暗线覆盖着x轴,出于某种原因,我似乎无法调试它。我试图从一个数据框中画出两列图表,三个周期的SMA价格与时间的关系,如下面的代码所示 这是此代码的结果 import datetime import matplotlib.pyplot as plt import pandas as pd from binance.client import Client BASE = "ETH" QUOTE = "USDT" MARKET = BASE + QUOTE client

下面是正在讨论的情节。暗线覆盖着x轴,出于某种原因,我似乎无法调试它。我试图从一个数据框中画出两列图表,三个周期的SMA价格与时间的关系,如下面的代码所示

这是此代码的结果

import datetime

import matplotlib.pyplot as plt
import pandas as pd
from binance.client import Client

BASE = "ETH"
QUOTE = "USDT"
MARKET = BASE + QUOTE

client = Client("vitalik",
                "buterin")

klines = client.get_historical_klines(MARKET, Client.KLINE_INTERVAL_15MINUTE, "31 Dec, 2017", "13 Jan, 2018")

# temporary fix

for kline in klines:
    kline[0] = datetime.datetime.fromtimestamp(
        int(kline[0] / 1000)
    ).strftime('%Y-%m-%d %H:%M:%S')
    kline[6] = datetime.datetime.fromtimestamp(
        int(kline[6] / 1000)
    ).strftime('%Y-%m-%d %H:%M:%S')

df = pd.DataFrame(klines,
                  columns=["open_time", "open", "high", "low", "close", "volume", "close_time", "quote_asset_volume",
                           "trades", "base_volume", "quote_volume", "ignore"])

df['sma_3'] = df["close"].rolling(window=3).mean()

print(df.dtypes)

fig, ax = plt.subplots(figsize=(10, 6))
ax.xaxis_date()

plt.xticks(rotation=90)
plt.xlabel("Date")
plt.ylabel("Price")
plt.title(MARKET)
plt.plot_date(x=df["close_time"], y=df["sma_3"], fmt="r-")
plt.show()
打印(df.dtypes)
的结果是:

open_time              object
open                   object
high                   object
low                    object
close                  object
volume                 object
close_time             object
quote_asset_volume     object
trades                  int64
base_volume            object
quote_volume           object
ignore                 object
sma_5                 float64
sma_3                 float64
dtype: object

任何帮助都将不胜感激。谢谢。

我认为x标签太多,所以需要将其设置为不可见:

spacing = 10
visible = ax.xaxis.get_ticklabels()[::spacing]
for label in ax.xaxis.get_ticklabels():
    if label not in visible:
        label.set_visible(False)

plt.show()

我认为x标签太多,因此需要将其设置为不可见:

spacing = 10
visible = ax.xaxis.get_ticklabels()[::spacing]
for label in ax.xaxis.get_ticklabels():
    if label not in visible:
        label.set_visible(False)

plt.show()

使用字符串作为要在x轴上打印的数量。因此,每个点都将有自己的标签。所有这些标签的累积看起来像“暗线”

为了获得正确的标签,您需要使用datetime对象来打印,而不是字符串


我无法测试,因为我没有可用的
binance
,但最简单的选择可能是删除数据生成中的
.strftime(“%Y-%m-%d%H:%m:%S”)
部分

使用字符串作为要在x轴上打印的数量。因此,每个点都将有自己的标签。所有这些标签的累积看起来像“暗线”

为了获得正确的标签,您需要使用datetime对象来打印,而不是字符串


我无法测试,因为我没有可用的
binance
,但最简单的选择可能是删除数据生成中的
.strftime(“%Y-%m-%d%H:%m:%S”)
部分

这对普通x轴和y轴阵列有何帮助?我认为这是针对上述代码的黑客攻击。请你告诉其他人解决这个问题好吗problem@babygame0ver-我想是的,只需将
间距
更改为较小的数字,如
2
。我在x轴列表上使用get_ticklebels()fxn,但它表示AttributeError as列表不支持任何fxn。那么现在该怎么办呢?@babygame0ver-what-return
print(ax.xaxis.get_tickbels())
?@babygame0ver-Hmmm,不知道。也许最好的办法是提出新问题。这对普通x轴和y轴阵列有什么帮助?我认为这是针对上述代码的黑客攻击。请你告诉其他人解决这个问题好吗problem@babygame0ver-我想是的,只需将
间距
更改为较小的数字,如
2
。我在x轴列表上使用get_ticklebels()fxn,但它表示AttributeError as列表不支持任何fxn。那么现在该怎么办呢?@babygame0ver-what-return
print(ax.xaxis.get_tickbels())
?@babygame0ver-Hmmm,不知道。也许最好的办法是提出新问题。