我正在使用Python 2.7,Matplotlib 1.5.1,并尝试将LaTeX用于所有文本呈现。我试图使Plot 1的轴刻度标签的字体与Plot 2中的字体匹配。出于某种原因,由于我没有在Plot 1中明确设置刻度标签,因此它们保留在默认的LaTeX字体中。我想所有的刻度标签,无论是否明确设置,都与Plot 2中的字体相匹配。虽然知道如何将两组刻度标签字体更改为第3个,但是一致的字体会很有用,我更感兴趣了解如何将Plot 1的刻度字体设置为下面的Plot 2中显示的确切字体。
此外,由于我认为这可能是同一情况下某人更常见的查询,因此最好知道如何设置两组刻度标签以匹配Plot 1中的那些。
from matplotlib import pyplot as plt
plt.rc('text', usetex=True)
my_fig = plt.figure(figsize=(8,4))
x = range(10)
y = range(10)
ax1 = my_fig.add_subplot(1, 2, 1)
ax1.plot(x, y)
ax1.set_title('Plot 1')
ax2 = my_fig.add_subplot(1, 2, 2)
ax2.plot(x, y)
ax2.set_xticklabels(range(10))
ax2.set_yticklabels(range(10))
ax2.set_title(r'\textit{Plot 2}')
答案 0 :(得分:0)
首先,使用这样的set_yticklabels
是危险的,因为定位器仍然是自动定位器(根据数据范围自动放置滴答)但标签来自FixedFormatter
,这意味着第一个滴答是始终的标有序列中的第一个位置,从您的数据中解析您的刻度标签。
from matplotlib import pyplot as plt
import matplotlib.ticker as mticker
plt.rc('text', usetex=True)
my_fig = plt.figure(figsize=(8,4))
x = range(10)
y = range(10)
ax1 = my_fig.add_subplot(1, 2, 1)
ax1.plot(x, y)
ax1.set_title('Plot 1')
ax2 = my_fig.add_subplot(1, 2, 2)
ax2.plot(x, y)
# just being very explicit about what `set_xticks` and `set_xticklabels`
# is doing
ax2.xaxis.set_major_locator(mticker.FixedLocator(range(10)))
ax2.yaxis.set_major_locator(mticker.FixedLocator(range(10)))
ax2.yaxis.set_major_formatter(mticker.FixedFormatter(range(10)))
ax2.xaxis.set_major_formatter(mticker.FixedFormatter(
['${}$'.format(_) for _ in range(10)]))
ax2.set_title(r'\textit{Plot 2}')
比较
In [157]: ax2.xaxis.get_ticklabels()[1]
Out[157]: Text(1,0,'$1$')
In [158]: ax2.yaxis.get_ticklabels()[1]
Out[158]: Text(0,1,'1')
In [159]: ax1.yaxis.get_ticklabels()[1]
Out[159]: Text(0,0,'$0$')
如果右侧是x轴,两个轴都在左侧,则数字在数学模式下排版。在左侧的情况下,LaTeX标记由ScalarFormatter
(默认格式化程序)添加。如果您使用了FixedFormatter
(我在此处明确指出,OP代码通过sex_xticklabels
隐式执行),则不会添加额外的标记,并且标签列表的内容只会传递给{{ 1}}用于绘制刻度标签的实例。
TL; DR
Text
,使用set_xticklabels
并让默认set_xticks
'做正确的事情&#39 ;