为什么 plt.grid 函数为我绘制的数据设置了一个完整的灰色背景,而不是仅仅设置一些网格线? Python 相关
Why is the plt.grid function setting a complete grey background for my plotted data instead of just setting some grid lines? Python related
我开始学习数据科学,我被教导可以使用 matplotlib.pyplot
来绘制我的数据。这是其中的一些预览(1 小时时间范围内的 OHLC 价格):
还有用于调试目的的 SOLUSDT_close.head().to_dict()
的输出:
{'Close Price': {'2021-06-29 00:59:59.999': 33.65642566,
'2021-06-29 01:59:59.999': 33.309,
'2021-06-29 02:59:59.999': 32.76168975,
'2021-06-29 03:59:59.999': 33.118,
'2021-06-29 04:59:59.999': 33.267}}
所以,我只对绘制 Close Price
与 End Date
感兴趣,为此我编写了以下代码:
import pandas as pd
import matplotlib.pyplot as plt
# Import the csv file without index
SOLUSDT = pd.read_csv('C:/Users/ResetStoreX/Downloads/Binance futures data/SolUSDT-Mark_Prices_Klines_1h_Timeframe/zip/SOLUSDT-1h-June-29-2021-February-13-2022.csv', index_col=0)
# Create a new df that only contains the date and close price from the previous imported df
SOLUSDT_close = SOLUSDT[['End Date','Close Price']]
# Set the 'Date' column as the actual index
SOLUSDT_close.set_index('End Date', inplace=True)
# set the breadth and length of the plot as a good mix of values
plt.figure(figsize=(14,5))
# set a grid background to the plot
plt.grid(True)
# set the color of the trend as blue
plt.plot(SOLUSDT_close, 'b')
# give a title to the plot
plt.title('SOLUSDT close price from June 29 2021 to February 13 2022')
# give a label to the x axis
plt.xlabel('Date')
# gove a label to the y axis
plt.ylabel('Close Price')
# plot it
plt.plot(SOLUSDT_close)
然而,我得到的结果令人失望:
可以看出,网格线与灰色背景合并,并且它也没有在 x 轴上显示一些预期的结束日期值。
如果我决定再次删除 plt.grid(True)
语句和 运行 代码,它最终会绘制以下图表:
我想要实现的是绘制一张来自 CoinGecko 的图表(显然忽略了交易量,但显示了网格线和一些主要日期):
我可以在这里得到一些帮助吗?
这里唯一的问题是您的日期太多,而且每个日期都在 x-axis 上画线。一种方法是在 grid 函数中使用关键字 axis
:
plt.grid(True, axis='y')
另一个是仅 select 某些您想要放在 x-axis 上的时间(日期) - 如您现在所见,它们太多了。此外,不需要第二行绘图。这将是一个非常快速和肮脏的例子,但你明白了:
import pandas as pd
import matplotlib.pyplot as plt
df= pd.read_csv('./sol-usd-max.csv', usecols=['snapped_at','price'])
df.set_index('snapped_at', inplace=True)
# set the breadth and length of the plot as a good mix of values
plt.figure(figsize=(14,5))
# set a grid background to the plot
plt.grid(True, axis='y')
plt.grid(True, axis='x', which='major')
# set the color of the trend as blue
plt.plot(df[::10], 'b')
# give a title to the plot
plt.title('SOLUSDT close price from June 29 2021 to February 13 2022')
# give a label to the x-axis
plt.xlabel('Date')
# give a label to the y axis
plt.ylabel('Close Price')
更新
至于错误的日期时间格式,将其转换为日期时间(通过将其加载为日期时间或使用 df["snapped_at"] = pd.to_datetime(df["snapped_at"])
转换)也解决了问题:
import pandas as pd
import matplotlib.pyplot as plt
df= pd.read_csv('./sol-usd-max.csv', usecols=['snapped_at','price'], parse_dates=["snapped_at"])
# df.set_index('snapped_at', inplace=True)
# set the breadth and length of the plot as a good mix of values
plt.figure(figsize=(14,5))
# set a grid background to the plot
plt.grid(True)
# set the color of the trend as blue
plt.plot(df["snapped_at"], df["price"], c='b')
# give a title to the plot
plt.title('SOLUSDT close price from June 29 2021 to February 13 2022')
# give a label to the x axis
plt.xlabel('Date')
# give a label to the y axis
plt.ylabel('Close Price')
但这不是问题的主要关注点。我的意思是,如果数据类型正确就不会发生,但它不会直接导致背景变灰。
我开始学习数据科学,我被教导可以使用 matplotlib.pyplot
来绘制我的数据。这是其中的一些预览(1 小时时间范围内的 OHLC 价格):
还有用于调试目的的 SOLUSDT_close.head().to_dict()
的输出:
{'Close Price': {'2021-06-29 00:59:59.999': 33.65642566,
'2021-06-29 01:59:59.999': 33.309,
'2021-06-29 02:59:59.999': 32.76168975,
'2021-06-29 03:59:59.999': 33.118,
'2021-06-29 04:59:59.999': 33.267}}
所以,我只对绘制 Close Price
与 End Date
感兴趣,为此我编写了以下代码:
import pandas as pd
import matplotlib.pyplot as plt
# Import the csv file without index
SOLUSDT = pd.read_csv('C:/Users/ResetStoreX/Downloads/Binance futures data/SolUSDT-Mark_Prices_Klines_1h_Timeframe/zip/SOLUSDT-1h-June-29-2021-February-13-2022.csv', index_col=0)
# Create a new df that only contains the date and close price from the previous imported df
SOLUSDT_close = SOLUSDT[['End Date','Close Price']]
# Set the 'Date' column as the actual index
SOLUSDT_close.set_index('End Date', inplace=True)
# set the breadth and length of the plot as a good mix of values
plt.figure(figsize=(14,5))
# set a grid background to the plot
plt.grid(True)
# set the color of the trend as blue
plt.plot(SOLUSDT_close, 'b')
# give a title to the plot
plt.title('SOLUSDT close price from June 29 2021 to February 13 2022')
# give a label to the x axis
plt.xlabel('Date')
# gove a label to the y axis
plt.ylabel('Close Price')
# plot it
plt.plot(SOLUSDT_close)
然而,我得到的结果令人失望:
可以看出,网格线与灰色背景合并,并且它也没有在 x 轴上显示一些预期的结束日期值。
如果我决定再次删除 plt.grid(True)
语句和 运行 代码,它最终会绘制以下图表:
我想要实现的是绘制一张来自 CoinGecko 的图表(显然忽略了交易量,但显示了网格线和一些主要日期):
我可以在这里得到一些帮助吗?
这里唯一的问题是您的日期太多,而且每个日期都在 x-axis 上画线。一种方法是在 grid 函数中使用关键字 axis
:
plt.grid(True, axis='y')
另一个是仅 select 某些您想要放在 x-axis 上的时间(日期) - 如您现在所见,它们太多了。此外,不需要第二行绘图。这将是一个非常快速和肮脏的例子,但你明白了:
import pandas as pd
import matplotlib.pyplot as plt
df= pd.read_csv('./sol-usd-max.csv', usecols=['snapped_at','price'])
df.set_index('snapped_at', inplace=True)
# set the breadth and length of the plot as a good mix of values
plt.figure(figsize=(14,5))
# set a grid background to the plot
plt.grid(True, axis='y')
plt.grid(True, axis='x', which='major')
# set the color of the trend as blue
plt.plot(df[::10], 'b')
# give a title to the plot
plt.title('SOLUSDT close price from June 29 2021 to February 13 2022')
# give a label to the x-axis
plt.xlabel('Date')
# give a label to the y axis
plt.ylabel('Close Price')
更新
至于错误的日期时间格式,将其转换为日期时间(通过将其加载为日期时间或使用 df["snapped_at"] = pd.to_datetime(df["snapped_at"])
转换)也解决了问题:
import pandas as pd
import matplotlib.pyplot as plt
df= pd.read_csv('./sol-usd-max.csv', usecols=['snapped_at','price'], parse_dates=["snapped_at"])
# df.set_index('snapped_at', inplace=True)
# set the breadth and length of the plot as a good mix of values
plt.figure(figsize=(14,5))
# set a grid background to the plot
plt.grid(True)
# set the color of the trend as blue
plt.plot(df["snapped_at"], df["price"], c='b')
# give a title to the plot
plt.title('SOLUSDT close price from June 29 2021 to February 13 2022')
# give a label to the x axis
plt.xlabel('Date')
# give a label to the y axis
plt.ylabel('Close Price')
但这不是问题的主要关注点。我的意思是,如果数据类型正确就不会发生,但它不会直接导致背景变灰。