![](/img/trans.png)
[英]How to plot dates on the x-axis using Seaborn (or matplotlib)
[英]How to plot text below xticks (using x-coords) in matplotlib when x-axis are dates?
我正在尝试在 matplotlib 图中的 x 刻度线下方绘制任意文本(请参见下面的示例图)。 我使用日期作为 x 轴,例如,我想显示与每个日期关联的某些变量的计数。
在下面的示例中,我使用图中 0-1 的相对位置作为文本应定位位置的 x 坐标。 但是,我只是猜测了这些相对值(使用试错法),所以我想知道如何使用 x 数据的实际位置而不是使用这些 0-1 相对缩放在 x 刻度下方绘制文本这是 figtext 中的默认设置?
import numpy as np
import matplotlib.pyplot as plt
import datetime
x = [datetime.datetime(2010, 12, 1, 0, 0),
datetime.datetime(2011, 1, 1, 0, 0),
datetime.datetime(2011, 5, 1, 1, 0)]
y = [4, 9, 2]
fig, ax = plt.subplots()
ax.bar(x, y, width = 20)
xticks = ax.get_xticks()
xtick_rel_position = np.linspace(0.13, 0.81, len(xticks)) # <- these are just guessed
counts = np.random.randint(0, 25, len(xticks))
for i, xpos in enumerate(xtick_rel_position):
plt.figtext(xpos, 0.028, "Below tick\nlabel "+str(i),
size = 6, ha = 'center')
plt.figtext(xpos, 0.005, "Count: "+str(counts[i]),
size = 6, ha = 'center')
# For better aesthetics
ax.yaxis.set_visible(False)
plt.show()
我试过包括transform = ax.transAxes
和来自ax.get_xticks()
的实际 x 坐标, ax.get_xticks()
不会改变任何东西。
使用ax.text作为相对于轴位置而不是 fig 位置的文本位置:
import matplotlib.pyplot as plt
import datetime
import numpy as np
x = [datetime.datetime(2010, 12, 1, 0, 0),
datetime.datetime(2011, 1, 1, 0, 0),
datetime.datetime(2011, 5, 1, 1, 0)]
y = [4, 9, 2]
fig, ax = plt.subplots()
ax.bar(x, y, width = 20, align='center')
counts = np.random.randint(0, 25, len(ax.get_xticks()))
for i, xpos in enumerate(ax.get_xticks()):
ax.text(xpos,-1, "Below tick\nlabel "+str(i),
size = 6, ha = 'center')
ax.text(xpos, -1.25, "Count: "+str(counts[i]),
size = 6, ha = 'center')
您可以使用date2num
函数进行转换,并使用DataFormatter
正确显示日期。 最后get_xticks
用于获取文本的刻度位置,以便在下方准确显示:
import numpy as np
import matplotlib.pyplot as plt
import datetime
import matplotlib
x = [datetime.datetime(2010, 12, 1, 0, 0),
datetime.datetime(2011, 1, 1, 0, 0),
datetime.datetime(2011, 5, 1, 1, 0)]
y = [4, 9, 2]
hfmt = matplotlib.dates.DateFormatter('%b %Y')
months = matplotlib.dates.MonthLocator(range(1, 13), bymonthday=1, interval=1)
xs = matplotlib.dates.date2num(x)
fig, ax = plt.subplots()
ax.bar(xs, y, width=20)
ax.xaxis.set_major_locator(months)
ax.xaxis.set_major_formatter(hfmt)
ax.yaxis.set_visible(False)
for i, x in enumerate(ax.get_xticks()):
plt.text(x, -1.3, "Below tick\nlabel {}\nCount x".format(i), size=7, ha='center')
fig.subplots_adjust(bottom=0.15) # Add space at bottom
plt.show()
这将显示:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.