Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matplotlib 向事件的打印x轴添加辅助标签_Matplotlib_Jupyter Notebook_Python 3.6 - Fatal编程技术网

Matplotlib 向事件的打印x轴添加辅助标签

Matplotlib 向事件的打印x轴添加辅助标签,matplotlib,jupyter-notebook,python-3.6,Matplotlib,Jupyter Notebook,Python 3.6,我有一个ax.stackplot显示了不同群体的人口随时间的变化。x轴是时间,y轴是人口。我在主标签上显示时间为1年,次标签上显示时间为1个月,但是,在“事件”中数据的更改更频繁。我想沿着x轴显示这些事件的标签,就像我在图中所画的那样: 我尝试使用plt.axes()添加第二个轴,但由于某种原因,第二个轴正在覆盖第一个轴的刻度。有人对如何做到这一点有什么建议吗 谢谢大家! 如果您没有太多的点,我认为最好的方法是使用ax.text: from matplotlib import pyplot i

我有一个ax.stackplot显示了不同群体的人口随时间的变化。x轴是时间,y轴是人口。我在主标签上显示时间为1年,次标签上显示时间为1个月,但是,在“事件”中数据的更改更频繁。我想沿着x轴显示这些事件的标签,就像我在图中所画的那样:

我尝试使用
plt.axes()
添加第二个轴,但由于某种原因,第二个轴正在覆盖第一个轴的刻度。有人对如何做到这一点有什么建议吗


谢谢大家!

如果您没有太多的点,我认为最好的方法是使用
ax.text

from matplotlib import pyplot
import matplotlib
import numpy as np

# Random plot
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)

fig, ax = pyplot.subplots()
ax.plot(t, s)

# ax.text(x, y, text, rotation)
ax.text(0, -0.35, "Event 1", rotation=90)  # rotation=90 is easier to read, for me
ax.text(0.5, -0.35, "Event 2", rotation=-90)  # opposite rotation
ax.text(0.75, -0.35, "Event 3", rotation=-90)

# This gives some space at the bottom of the figure
# so that the text is visible
fig.subplots_adjust(bottom=0.2)

pyplot.show()
结果:


查看以了解更多信息。

感谢您的回复,我能够根据您的建议提出解决方案。解决方案包括使用ax.twny()创建第二个axis对象,然后指定第二个x轴数据点和标签。以下是一个简单的示例,供感兴趣的人参考:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

# Create some meaningless data for testing.
x = np.arange(0, 10)
y = np.full(10, len(x))

# Set up figure and set axes parameters.
fig = plt.figure(num=None, figsize=(10, 8), dpi=80, facecolor='w', edgecolor='k')
ax = plt.axes()
ax.xaxis.set_minor_locator(ticker.FixedLocator([1, 3, 5, 7, 9]))

# Get a second axes (for secondary labels) and set parameters.
axl = ax.twiny()
axl.tick_params(axis='x', bottom=True, labelbottom=True, labeltop=False, top=False, length=15, colors=[.5,.5,.5])

# Plot data on primary axes
ax.bar(x, y)
interval = ax.xaxis.get_view_interval()

# Set label properties on secondary axes (for secondary labels)
axl.xaxis.set_view_interval(*interval)
axl.xaxis.set_ticklabels(['a', 'b'])
axl_loc = ticker.FixedLocator([0.5, 4.75])
axl.xaxis.set_major_locator(axl_loc)

plt.show()

plt.axes()
如果已经存在一个轴,则不会创建新轴。感谢您指出,解决方案是使用ax.twny()创建第二个轴对象,然后我指定了x轴。