2016-12-08 41 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