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)
这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)
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |