Matplotlib не может создать график при использовании tex с символом перевода строки в метках xtick - PullRequest
1 голос
/ 10 ноября 2019

Я создаю фигуру с несколькими уровнями меток xtick. Я мог бы добиться этого, имея дополнительную метку с символом новой строки. Но этот подход не работает, если я использую tex в генерации графиков, из-за ошибки, указывающей, что мой файл .dvi в tex.cache отсутствует. Я обнаружил, что файл tex существует, но латекс не создает файл dvi, потому что нет страницы, которую можно создать.

При использовании tex код работает отлично, если я изменяю ax.set_xticklabels(labels + ["\nA to C"]) на ax.set_xticklabels(labels + ["A to C"]) или ax.set_xticklabels(labels + ["DummyText\nA to C"]).

Как я могу успешно сгенерировать график, используя matplotlib + tex с символом перевода строки вxtick этикетки?


import matplotlib.pyplot as plt
import matplotlib
import numpy

# There will be errors in code if I uncomment the following
# matplotlib.rc('text', usetex = True)

fig, axs = plt.subplots(1, 1, squeeze=False)
ax = axs[0, 0]
labels = ["A", "B", "C", "D", "E"]
data1 = [1,2,3,4,5]
data2 = [1.5,2.5,2.5,3.5,7]
total_categories = len(data1)

width = 1
data1_color = '#fc8d62'
data2_color = '#66c2a5'
props = {'connectionstyle':'bar','arrowstyle':'-',\
                 'shrinkA':20,'shrinkB':20,'linewidth':2}

center_positions = numpy.arange(0,total_categories) * 2.5
ax.bar(center_positions - 0.5, data1, width=width, color=data1_color, align='center', edgecolor='black', hatch='//', label="Data1")
ax.bar(center_positions + 0.5, data2, width=width, color=data2_color, align='center', edgecolor='black', label="Data2")

# Setting xticks
ax.set_xticks(numpy.concatenate((center_positions, numpy.array([2.5]))))
ax.set_xticklabels(labels + ["\nA to C"])
ax.set_xticks([-1.25, 6.25, 8.75, 11.25], minor=True)
ax.tick_params( axis='x', which='minor', direction='out', length= 45)
ax.tick_params( axis='x', which='major', bottom='off', top='off' )
ax.set_xlim(-1.25, 11.25)
ax.set_xlabel("Methods", size=15)

ax.legend()
fig.savefig("Temp.pdf")

Target output

% tex file auto generated by matplotlib
\documentclass{article}
\usepackage{type1cm}



\usepackage{textcomp}

\usepackage[utf8]{inputenc}

\usepackage[papersize={72in,72in},body={70in,70in},margin={1in,1in}]{geometry}
\pagestyle{empty}
\begin{document}
\fontsize{10.000000}{12.500000}{\sffamily } % When there are other texts, a dvi file will be generated
\end{document}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...