带有Qt5Agg后端的matplotlib返回空的ticklabels

时间:2017-01-05 23:13:04

标签: python matplotlib pyqt5

在以下代码段中,我想在图表的所有Y轴刻度标签上附加一个百分号:

import matplotlib as mpl
import pandas as pd
from matplotlib import pyplot as plt
print mpl.__version__, mpl.get_backend()

df = pd.DataFrame({'a': [10, 40], 'b': [20, 30]})
ax = df.plot(kind='bar', title='Plot of Percentage')
plt.draw()
ax.set_yticklabels([x.get_text() + '%' for x in ax.get_yticklabels()])
ax.get_figure().savefig('test.png', bbox_inches='tight')

在python 2.7.13 + matplotlib 1.5.3中,使用后端Qt5Agg,ax.get_yticklabels()返回空Text个对象的列表,产生以下输出图像:

enter image description here

上面的代码片段在python 2.6.9 + matplotlib 1.4.2 + Qt4Agg后端和python 2.6.6 + matplotlib 1.3.1 + TkAgg后端下正常工作。

可能与:https://github.com/matplotlib/matplotlib/issues/6103/

有关

1 个答案:

答案 0 :(得分:0)

在画布完全绘制之前,实际上并未填充标记标记。由于ticklabels由@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); [...] ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); toggle.setDrawerSlideAnimationEnabled(false); drawer.addDrawerListener(toggle); toggle.syncState(); } 确定,因此最佳解决方案当然不是尝试更改ticklabels本身,而是使用方便的Formatter。

这里matplotlib.ticker.***Formatter似乎是个不错的选择。

FuncFormatter

enter image description here

无需绘制任何内容,此解决方案也独立于后端。