在Matplotlib中使用连字符或减号符号与与乳胶的兼容性

时间:2015-05-12 21:00:37

标签: python matplotlib pdflatex

我遇到的问题是使用matplotlib.pyplot创建的pgf输出连字符而不是减号,而Latex无法解释。

我尝试使用找到的here解决方案,但它在tick标签中将数字从整数更改为浮点数(即2000变为2000.0)。我正在寻找一种解决方案,修复标志,但保留了pyplot中的默认格式。

有什么想法吗?示例如下。

myplot.py

import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter

def math_formatter(x, pos):
    return "$%s$" % x 

plt.figure()
plt.plot([1,2,3,4,5,6,7],[-1,-2,3,4,5,6,7])

axis = plt.gca()
axis.xaxis.set_major_formatter(FuncFormatter(math_formatter))
axis.yaxis.set_major_formatter(FuncFormatter(math_formatter)) 

plt.show()

mylatex.tex

\documentclass{article}

\usepackage{pgf}

\begin{document}
    \begin{figure}[H]
        \centering
        \input{myplot.pgf}
     \end{figure}
\end{document}

如果您在没有formatter参数的情况下绘图,则将标准格式设置为int,但latex将不会将连字符识别为减号。如果使用formatter参数,则所有int都将成为浮点数。

我正在寻找一个解决方案,其中连字符被更改为减号,但无论参数(int或float或其他),刻度将表现得像pyplot的默认行为(连字符是减号)。

3 个答案:

答案 0 :(得分:9)

默认情况下,Matplotlib的最新版本使用排版"正确" (这是有争议的)unicode minus signs (U+2212)表示负数,而不是ASCII hyphens。在我的系统上,在Latex中解释ASCII连字符没有任何问题,但默认情况下不是unicode减号。

如您所建议的那样,FuncFormatter使用return '%i' % x matplotlib.rcParams['axes.unicode_minus'] = False {{}}}将减号转换为连字符,并且是Latex兼容性的有效解决方案。除了这个解决方案之外,下面还有两个可供选择的解决方案,可以用更多的系统范围来解决这个问题。方法

matplotlib:使用连字符而不是减号

可以使用ASCII连字符(默认情况下由Latex正确解释)代替unicode减号来表示matplotlib中的负数。根据文档(here),可以通过执行以下操作来执行此操作:

\usepackage[utf8]{inputenc}
\DeclareUnicodeCharacter{2212}{$-$}

Latex:使用unicode减号

如果您更喜欢使用减号而不是连字符,可以在Latex文档的前言中添加:

U+2212

然后,Latex应该识别字符data-tweet-limit并正确地用负号表示负数。以下是我使用Latex进行炒作(顶部)和减号(底部)的输出:

http://matplotlib.org/1.3.0/examples/api/unicode_minus.html

答案 1 :(得分:0)

尝试这样的事情:

def math_formatter(x, pos):
   return "${}$".format(x).replace.("-", u"\u2212")

答案 2 :(得分:0)

解决方案是简单地转换为整数。

def math_formatter(x, pos):
    return "%i" %x