【问题标题】:Matplotlib plots multiple dark lines on x axisMatplotlib 在 x 轴上绘制多条暗线
【发布时间】:2018-01-15 19:37:18
【问题描述】:

以下是有问题的情节。黑线覆盖了 x 轴,由于某种原因,我似乎无法调试它。我试图从数据框中绘制两列图表,即 3 周期 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()

print(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

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

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    我认为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 轴和 y 轴阵列有何帮助?我认为这个黑客特定于上述代码。请您告诉除此之外的其他方法来解决此问题
    • @babygame0ver - 我想是的,只需将spacing 更改为像2 这样的小数字。
    • 我在 x 轴列表上使用 get_ticklabels() fxn,但它说 AttribueError 作为列表不支持任何 fxn。那么现在该怎么办呢?
    • @babygame0ver - 什么返回 print (ax.xaxis.get_ticklabels())
    • @babygame0ver - 嗯,不知道。也许最好的办法是创建新问题。
    【解决方案2】:

    您正在使用字符串作为在 x 轴上绘制的数量。因此,每个点都会有自己的标签。所有这些标签的积累看起来就像“黑线”。

    为了获得正确的标签,您需要使用日期时间对象来绘制,而不是字符串。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 2019-04-17
      相关资源
      最近更新 更多