在 Matplotlib 和 OSX 中使用数学模式和下标时出现错误偏移
Wrong offset when using math mode and subscripts in Matplotlib and OSX
我有一些图,我想在某些标签中使用子索引,但每当我使用数学模式时,所有标签都会出现偏移。我可以为所有标签设置一些偏移量吗?使用数学模式有什么我遗漏的吗?
这是标签中没有数学模式的图:
这就是数学模式的样子(注意刻度线):
作为参考,这是我的完整代码(我从 获得了堆叠代码):
import numpy as NP
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import matplotlib.cm as cm
data = '''0 0 0 0 0 0 0 0
0 0 0 0 0 0 0.015 0.015
0 0 0 0 0 0 0 0
0 0 0 0 0.04 0.04 0 0
0 0 0 0 0.03 0.01 0.19 0.14
0 0 0.772 0 0.07 0.01 0.12 0.11
0 0.879 0 0 0 0.07 0 0.085
0.056 0 0 0 0 0 0 0
'''.splitlines()
data = tuple(reversed([NP.array([float(j) for j in i.split(' ')]) for i in data]))
colors = cm.rainbow(NP.linspace(0, 1, 8))
axes = plt.figure().add_subplot(111)
axes.set_xticklabels([r'$m_%d$'%i for i in ([i+1 for i in range(8)])])
plt.stackplot(NP.arange(8)+1,
data,
colors=colors)
plt.xlim(1,8)
plt.ylabel("Error")
plt.legend([mpatches.Patch(color=i) for i in colors],
[r'$m_%d$'%i for i in ([i+1 for i in range(8)])])
plt.show()
更新:问题出在用于交互式显示的后端
按照评论中提供的提示,我尝试写入文件并且标签显示正确。问题似乎出在 MacOSX 后端。
- Python 2.7.9(默认,2014 年 12 月 11 日,02:36:08)[GCC 4.2.1 兼容 Apple LLVM 5.1 (clang-503.0.40)] on darwin
- matplotlib.版本 1.4.3
- matplotlib.get_backend() MacOSX
Matplotlib 的 MacOSX 后端似乎存在错误。为了解决它,我不得不切换后端。我尝试了常见问题解答 (http://matplotlib.org/faq/usage_faq.html#what-is-a-backend) 中的几个,并且使用 WXAgg 获得了最佳结果。 TkAgg 非常缓慢,WX 不支持数学模式。
如果大家有兴趣的话,导入pyplot之前要添加的代码是:
import matplotlib
matplotlib.use('WXAgg')
这是结果(看起来都略有不同):
WXAgg
TkAgg
吴昕
我有一些图,我想在某些标签中使用子索引,但每当我使用数学模式时,所有标签都会出现偏移。我可以为所有标签设置一些偏移量吗?使用数学模式有什么我遗漏的吗?
这是标签中没有数学模式的图:
这就是数学模式的样子(注意刻度线):
作为参考,这是我的完整代码(我从 获得了堆叠代码):
import numpy as NP
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import matplotlib.cm as cm
data = '''0 0 0 0 0 0 0 0
0 0 0 0 0 0 0.015 0.015
0 0 0 0 0 0 0 0
0 0 0 0 0.04 0.04 0 0
0 0 0 0 0.03 0.01 0.19 0.14
0 0 0.772 0 0.07 0.01 0.12 0.11
0 0.879 0 0 0 0.07 0 0.085
0.056 0 0 0 0 0 0 0
'''.splitlines()
data = tuple(reversed([NP.array([float(j) for j in i.split(' ')]) for i in data]))
colors = cm.rainbow(NP.linspace(0, 1, 8))
axes = plt.figure().add_subplot(111)
axes.set_xticklabels([r'$m_%d$'%i for i in ([i+1 for i in range(8)])])
plt.stackplot(NP.arange(8)+1,
data,
colors=colors)
plt.xlim(1,8)
plt.ylabel("Error")
plt.legend([mpatches.Patch(color=i) for i in colors],
[r'$m_%d$'%i for i in ([i+1 for i in range(8)])])
plt.show()
更新:问题出在用于交互式显示的后端
按照评论中提供的提示,我尝试写入文件并且标签显示正确。问题似乎出在 MacOSX 后端。
- Python 2.7.9(默认,2014 年 12 月 11 日,02:36:08)[GCC 4.2.1 兼容 Apple LLVM 5.1 (clang-503.0.40)] on darwin
- matplotlib.版本 1.4.3
- matplotlib.get_backend() MacOSX
Matplotlib 的 MacOSX 后端似乎存在错误。为了解决它,我不得不切换后端。我尝试了常见问题解答 (http://matplotlib.org/faq/usage_faq.html#what-is-a-backend) 中的几个,并且使用 WXAgg 获得了最佳结果。 TkAgg 非常缓慢,WX 不支持数学模式。 如果大家有兴趣的话,导入pyplot之前要添加的代码是:
import matplotlib
matplotlib.use('WXAgg')
这是结果(看起来都略有不同):
WXAgg
TkAgg
吴昕