2016-12-08 24 views
1

使用在次要情节设置等pandas.DataFrame.plot()GridSpec中嵌套一个复杂的脚本,我有以下问题:X轴-Tick认证标签都消失与大熊猫到次要情节绘制,但仍保存

当我创建一个2 -cols 1行gridspec,tick标签都是正确的。然而,当我创建一个1行2行的gridspec时,只要我使用pandas.DataFrame.plot()绘制到第一行(上排),第一行的x标记消失(滴答剩下)。

一旦我在下斧头上画东西,情况并非如此,最上面的蜱变化了,sharex似乎不是问题。

然而,我的X-标签仍保存:

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

这只是他们没有显示。我怀疑NullFormatter,但是这也不情况:

axes[0].get_xaxis().get_major_formatter() 
Out[57]: 
<matplotlib.ticker.ScalarFormatter at 0x7f7414330710> 

我得到两个刻度和标签上的第一轴的顶部,当我做

axes[0].get_xaxis().tick_top() 

然而,当我再回去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) 
+0

你介意创建[MCVE(http://stackoverflow.com/help/ mcve),以便更容易查看和调试您的问题吗? –

+0

是的,真的需要一个mcve,我不能重现这种行为(我试过[this](https://gist.github.com/jmarrec/17df8922d268d63f32259f4bbe36ccfa),它的工作就像一个魅力) –

+0

@JulienMarrec补充说 – FooBar

回答

3

这引起xticks消失的secondary_y=['B']。我不确定它为什么这样做。

幸运的是,你可以使用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) 

Turning xticklabels back on