Xaxis-Tick 标签已消失,将熊猫绘制到子图上,但仍被存储

Foo*_*Bar 4 python matplotlib pandas

使用嵌套在其他pandas.DataFrame.plot()GridSpec子情节设置中的复杂脚本,我遇到以下问题:

当我创建一个 2-cols 1-row gridspec 时,刻度标签都是正确的。然而,当我创建一个 1-col 2-rows gridspec 时,只要我使用 绘制到第一(上行)轴上pandas.DataFrame.plot(),顶行的 x-ticklabels 就会消失(刻度线仍然存在)。

一旦我在下斧头上画了一些东西,顶部刻度就不会改变,这sharex似乎不是问题。

但是,我的 x 标签仍然存储:

axes[0].get_xaxis().get_ticklabels()
Out[59]: 
<a list of 9 Text major ticklabel objects>
Run Code Online (Sandbox Code Playgroud)

只是它们没有显示出来。我怀疑是 NullFormatter,但事实并非如此:

axes[0].get_xaxis().get_major_formatter()
Out[57]: 
<matplotlib.ticker.ScalarFormatter at 0x7f7414330710>
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我在第一个轴的顶部得到了刻度和标签

axes[0].get_xaxis().tick_top()
Run Code Online (Sandbox Code Playgroud)

但是,当我再回到 时tick_bottom(),我只有底部有刻度,没有标签。

尽管使用“正常”格式化程序,但什么会导致我存储的标签不显示?

这是一个简单的例子:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

from matplotlib import gridspec

df = pd.DataFrame(np.random.rand(100,2), columns=['A', 'B'])

figure = plt.figure()

GridSpec = gridspec.GridSpec(nrows=2, ncols=1)
[plt.subplot(gsSpec) for gsSpec in GridSpec]
axes = figure.axes
df.plot(secondary_y=['B'], ax=axes[0], sharex=False)
Run Code Online (Sandbox Code Playgroud)

Jul*_*rec 5

secondary_y=['B']是导致 xticks 消失的原因。我不确定为什么会这样。

幸运的是,您可以使用plt.setp(ax.get_xticklabels(), visible=True)( docs ) 手动重新打开它们:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

from matplotlib import gridspec

df = pd.DataFrame(np.random.rand(100,2), columns=['A', 'B'])

figure = plt.figure()

GridSpec = gridspec.GridSpec(nrows=2, ncols=1)
axes = [plt.subplot(gsSpec) for gsSpec in GridSpec]
ax = axes[0]
df.plot(secondary_y=['B'], ax=ax, sharex=True)
plt.setp(ax.get_xticklabels(), visible=True)
Run Code Online (Sandbox Code Playgroud)

重新打开 xticklabels

  • 这不适用于 pandas 0.25.1 和 matplotlib 3.1.1,有什么想法吗? (2认同)