在绘制价格与时间的数据时动态减少 matplotlib 中的 xticks 数量
Reduce the number of xticks in matplotlib dynamically while plotting data of prices vs time
我的 python matplotlib 脚本:
plt.plot(graphdf["Price"],color='red')
plt.xticks(rotation=90)
需要动态减少刻度数的帮助,我的程序不断地抓取数据,并且在绘制它时 x 轴在一段时间后变得混乱,比如在大约 40 个 xtick 标签之后.
(我没有固定数量的数据点,每次我的程序抓取额外数据时它都会不断增长例如:在 9:37 我只有 3 个数据点,在 9:45 我将有 5 个数据点等。我在下图中连续绘制它)
我有一个简单的数据集,其中包含价格与时间(股票市场价格)的关系,如下所示:
我的图表是这样的
选项 1:x 轴 datetime
类型
回答
我想你的数据在一个名为 data.csv
的文件中。如果用pd.read_csv
加载,需要注意'Time'
列的格式。查看输出:
print(graphdf.info())
如果 'Time'
列的 DType
是 object
,pandas
将此列的值标识为 str
。在这种情况下,您需要使用以下方法将它们转换为 datetime
:
graphdf['Time'] = pd.to_datetime(graphdf['Time'], format = '%H:%M')
最后,您可以设置在 x 轴上看到的标签格式:
ax.xaxis.set_major_formatter(md.DateFormatter('%H:%M'))
检查 以供参考。
完整代码
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as md
graphdf = pd.read_csv('data.csv')
graphdf['Time'] = pd.to_datetime(graphdf['Time'], format = '%H:%M')
fig, ax = plt.subplots()
ax.plot(graphdf['Time'],graphdf['Price'],color='red')
plt.xticks(rotation=90)
ax.xaxis.set_major_formatter(md.DateFormatter('%H:%M'))
plt.show()
情节
选项 2:x 轴 str
类型
回答
如果您不希望 x 轴作为一般时间 %H:%M
轴,但又想保留原始刻度,则必须将 x 轴保持为 str
类型并且简单地采样原始刻度,然后将它们应用于轴:
xticks = graphdf['Time'][::2]
ax.set_xticks(xticks)
您可以 slice 原始报价与 [::n]
,其中 n
是步骤。如果 n = 2
您选择了替代报价;如果 n = 3
你每 3 次选择一个刻度,依此类推。
完整代码
import pandas as pd
import matplotlib.pyplot as plt
graphdf = pd.read_csv('data.csv')
fig, ax = plt.subplots()
ax.plot(graphdf['Time'],graphdf['Price'],color='red')
plt.xticks(rotation=90)
xticks = graphdf['Time'][::2]
ax.set_xticks(xticks)
plt.show()
情节
我的 python matplotlib 脚本:
plt.plot(graphdf["Price"],color='red')
plt.xticks(rotation=90)
需要动态减少刻度数的帮助,我的程序不断地抓取数据,并且在绘制它时 x 轴在一段时间后变得混乱,比如在大约 40 个 xtick 标签之后.
(我没有固定数量的数据点,每次我的程序抓取额外数据时它都会不断增长例如:在 9:37 我只有 3 个数据点,在 9:45 我将有 5 个数据点等。我在下图中连续绘制它)
我有一个简单的数据集,其中包含价格与时间(股票市场价格)的关系,如下所示:
我的图表是这样的
选项 1:x 轴 datetime
类型
回答
我想你的数据在一个名为 data.csv
的文件中。如果用pd.read_csv
加载,需要注意'Time'
列的格式。查看输出:
print(graphdf.info())
如果 'Time'
列的 DType
是 object
,pandas
将此列的值标识为 str
。在这种情况下,您需要使用以下方法将它们转换为 datetime
:
graphdf['Time'] = pd.to_datetime(graphdf['Time'], format = '%H:%M')
最后,您可以设置在 x 轴上看到的标签格式:
ax.xaxis.set_major_formatter(md.DateFormatter('%H:%M'))
检查
完整代码
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as md
graphdf = pd.read_csv('data.csv')
graphdf['Time'] = pd.to_datetime(graphdf['Time'], format = '%H:%M')
fig, ax = plt.subplots()
ax.plot(graphdf['Time'],graphdf['Price'],color='red')
plt.xticks(rotation=90)
ax.xaxis.set_major_formatter(md.DateFormatter('%H:%M'))
plt.show()
情节
选项 2:x 轴 str
类型
回答
如果您不希望 x 轴作为一般时间 %H:%M
轴,但又想保留原始刻度,则必须将 x 轴保持为 str
类型并且简单地采样原始刻度,然后将它们应用于轴:
xticks = graphdf['Time'][::2]
ax.set_xticks(xticks)
您可以 slice 原始报价与 [::n]
,其中 n
是步骤。如果 n = 2
您选择了替代报价;如果 n = 3
你每 3 次选择一个刻度,依此类推。
完整代码
import pandas as pd
import matplotlib.pyplot as plt
graphdf = pd.read_csv('data.csv')
fig, ax = plt.subplots()
ax.plot(graphdf['Time'],graphdf['Price'],color='red')
plt.xticks(rotation=90)
xticks = graphdf['Time'][::2]
ax.set_xticks(xticks)
plt.show()