如何在matplotlib中更改图中列之间的间距?

bwitn5fc  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(73)

我正在创建一个Python脚本,它获取股票数据并生成一个图表,但我面临的问题是股票数据不是每个星期六和星期天都可用,所以日期之间有一些差距。因此,图表看起来像这样:


的数据
正如你所看到的,这之间有很大的差距。我想要的是消除这个差距,这意味着删除不必要的日期,这是由matplotlib自动生成的,没有任何数据使它看起来像这样。有没有人知道怎么做,我尝试了3天的一切,但没有得到任何解决方案。
我的代码:

import pandas as pd
import pytz
import matplotlib.pyplot as plt
import json

data = json.loads(open("data.json", "r").read())

local_timezone = pytz.timezone("Asia/Kolkata")
data = data[:501]
# Extracting relevant data and creating a pandas DataFrame
timestamps = [
    pd.to_datetime(row["Data"][2]["ScalarValue"])
    for row in data
]
values = [float(row["Data"][3]["ScalarValue"]) for row in data]

df = pd.DataFrame({"Timestamps": timestamps, "Values": values})

df.set_index("Timestamps", inplace=True)


plt.figure(figsize=(12, 6))
plt.plot(df.index, df["Values"], label="Original Data")
plt.xlabel("Timestamps")
plt.ylabel("Price")
plt.title(
    "Stock Price"
)
plt.legend()
plt.grid(True)
plt.show()

字符串
data.json文件:

[
  {
    "Data": [
      {
        "ScalarValue": "Nifty Bank"
      },
      {
        "ScalarValue": "price"
      },
      {
        "ScalarValue": "2023-01-20 06:58:00.000000000"
      },
      {
        "ScalarValue": "42644.2"
      }
    ]
  },
  {
    "Data": [
      {
        "ScalarValue": "Nifty Bank"
      },
      {
        "ScalarValue": "price"
      },
      {
        "ScalarValue": "2023-01-20 06:59:00.000000000"
      },
      {
        "ScalarValue": "42642.25"
      }
    ]
  },
...
]

ccgok5k5

ccgok5k51#

您可以从datetime使用weekday()函数。您可以尝试使用完整的data.json文件。

data = json.loads(open("data.json", "r").read())

local_timezone = pytz.timezone("Asia/Kolkata")
data = data[:501]
# Extracting relevant data and creating a pandas DataFrame
timestamps = [
    pd.to_datetime(row["Data"][2]["ScalarValue"])
    for row in data 
    if pd.to_datetime(row["Data"][2]["ScalarValue"]).weekday() not in [5,6]
]
values = [float(row["Data"][3]["ScalarValue"]) for row in data 
          if pd.to_datetime(row["Data"][2]["ScalarValue"]).weekday() not in [5,6]]

df = pd.DataFrame({"Timestamps": timestamps, "Values": values})

df.set_index("Timestamps", inplace=True)


plt.figure(figsize=(12, 6))
plt.plot(df.index, df["Values"], label="Original Data")
plt.xlabel("Timestamps")
plt.ylabel("Price")
plt.title(
    "Stock Price"
)
plt.legend()
plt.grid(True)
plt.show()

字符串
weekday()函数返回一周中的第几天,其范围为060对应于 Monday6对应于 Sunday。要跳过 SaturdaySunday,您可以避免考虑工作日56

相关问题