[英]Custimizing Matplotlib plots
I am trying to implement a custimizing procedure of matplotlib plots for the use of a latex work. 我正在尝试实现matplotlib图的优化程序以使用乳胶作品。 For more reference please take a look at the following link: LaTeXify Matplotlib 有关更多参考,请查看以下链接: LaTeXify Matplotlib
The following piece of code shows what I have tried. 以下代码显示了我尝试过的内容。 I implemented the following code: 我实现了以下代码:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib
from math import sqrt
SPINE_COLOR = 'gray'
def latexify(fig_width=None, fig_height=None, columns=1):
"""Set up matplotlib's RC params for LaTeX plotting.
Call this before plotting a figure.
Parameters
----------
fig_width : float, optional, inches
fig_height : float, optional, inches
columns : {1, 2}
"""
# code adapted from http://www.scipy.org/Cookbook/Matplotlib/LaTeX_Examples
# Width and max height in inches for IEEE journals taken from
# computer.org/cms/Computer.org/Journal%20templates/transactions_art_guide.pdf
assert(columns in [1,2])
if fig_width is None:
fig_width = 3.39 if columns==1 else 6.9 # width in inches
if fig_height is None:
golden_mean = (sqrt(5)-1.0)/2.0 # Aesthetic ratio
fig_height = fig_width*golden_mean # height in inches
MAX_HEIGHT_INCHES = 8.0
if fig_height > MAX_HEIGHT_INCHES:
print("WARNING: fig_height too large:" + fig_height +
"so will reduce to" + MAX_HEIGHT_INCHES + "inches.")
fig_height = MAX_HEIGHT_INCHES
params = {'backend': 'ps',
'text.latex.preamble':['\usepackage{gensymb}'],
'axes.labelsize': 8, # fontsize for x and y labels (was 10)
'axes.titlesize': 8,
'text.fontsize': 8, # was 10
'legend.fontsize': 8, # was 10
'xtick.labelsize': 8,
'ytick.labelsize': 8,
'text.usetex': True,
'figure.figsize': [fig_width,fig_height],
'font.family': 'serif'
}
matplotlib.rcParams.update(params)
def latexify(fig_width=None, fig_height=None, columns=1):
"""Set up matplotlib's RC params for LaTeX plotting.
Call this before plotting a figure.
Parameters
----------
fig_width : float, optional, inches
fig_height : float, optional, inches
columns : {1, 2}
"""
# code adapted from http://www.scipy.org/Cookbook/Matplotlib/LaTeX_Examples
# Width and max height in inches for IEEE journals taken from
# computer.org/cms/Computer.org/Journal%20templates/transactions_art_guide.pdf
assert(columns in [1,2])
if fig_width is None:
fig_width = 3.39 if columns==1 else 6.9 # width in inches
if fig_height is None:
golden_mean = (sqrt(5)-1.0)/2.0 # Aesthetic ratio
fig_height = fig_width*golden_mean # height in inches
MAX_HEIGHT_INCHES = 8.0
if fig_height > MAX_HEIGHT_INCHES:
print("WARNING: fig_height too large:" + fig_height +
"so will reduce to" + MAX_HEIGHT_INCHES + "inches.")
fig_height = MAX_HEIGHT_INCHES
params = {'backend': 'ps',
'text.latex.preamble': ['\usepackage{gensymb}'],
'axes.labelsize': 8, # fontsize for x and y labels (was 10)
'axes.titlesize': 8,
'text.fontsize': 8, # was 10
'legend.fontsize': 8, # was 10
'xtick.labelsize': 8,
'ytick.labelsize': 8,
'text.usetex': True,
'figure.figsize': [fig_width,fig_height],
'font.family': 'serif'
}
matplotlib.rcParams.update(params)
def format_axes(ax):
for spine in ['top', 'right']:
ax.spines[spine].set_visible(False)
for spine in ['left', 'bottom']:
ax.spines[spine].set_color(SPINE_COLOR)
ax.spines[spine].set_linewidth(0.5)
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
for axis in [ax.xaxis, ax.yaxis]:
axis.set_tick_params(direction='out', color=SPINE_COLOR)
return ax
df = pd.DataFrame(np.random.randn(10,2))
df.columns = ['Column 1', 'Column 2']
ax = df.plot()
ax.set_xlabel("X label")
ax.set_ylabel("Y label")
ax.set_title("Title")
plt.tight_layout()
plt.savefig("C:\Users\Laptop\Desktop\image1.pdf")
latexify()
ax = df.plot()
ax.set_xlabel("X label")
ax.set_ylabel("Y label")
ax.set_title("Title")
plt.tight_layout()
format_axes(ax)
plt.savefig("C:\Users\Laptop\Desktop\image2.pdf")
I obtain the following Syntaxerror and complete traceback: 我获得以下Syntaxerror并完成回溯:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Program Files\JetBrains\PyCharm 2018.3.3\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile
pydev_imports.execfile(filename, global_vars, local_vars) # execute the script
File "C:\Program Files\JetBrains\PyCharm 2018.3.3\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/Laptop/PycharmProjects/PythonThesisVU/PLOTS.py", line 41
'text.latex.preamble':['\usepackage{gensymb}'],
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \uXXXX escape
Does anybody know why it gives the syntax error and how I could make the code run smoothly without any errors? 有谁知道为什么会出现语法错误,以及如何使代码顺利运行而不会出现任何错误?
Any help would be much appreciated! 任何帮助将非常感激!
EDIT 1: Adjust the font family to avant. 编辑1:将字体系列调整为avant。
params = {'backend': 'ps',
'text.latex.preamble':[r'\usepackage{gensymb}', r'\usepackage{avant}'],
'axes.labelsize': 8, # fontsize for x and y labels (was 10)
'axes.titlesize': 8,
'font.size': 8, # was 10
'legend.fontsize': 8, # was 10
'xtick.labelsize': 8,
'ytick.labelsize': 8,
'text.usetex': True,
'figure.figsize': [fig_width,fig_height],
'font.family': 'avant'
The error is occurring at this line: 错误发生在此行:
'text.latex.preamble':['\usepackage{gensymb}'],
Python interprets the \\u\u003c/code> in
'\\usepackage{gensymb}'
as the start of a Unicode escape sequence . Python将
'\\usepackage{gensymb}'
的\\u\u003c/code>解释为Unicode转义序列的开始。
You can fix this by either escaping the
\\
with \\\\
or by using a raw string. 您可以通过用\\\\
转义\\
或使用原始字符串来解决此问题。
For example: 例如:
'text.latex.preamble':[r'\usepackage{gensymb}'],
or: 要么:
'text.latex.preamble':['\\usepackage{gensymb}'],
will correct the error. 将纠正错误。
text.fontsize
is not a valid parameter. text.fontsize
不是有效的参数。 It's font.size
instead. 它是font.size
。 Also backslashes must be escaped or a raw string must be used. 另外,必须转义反斜杠或必须使用原始字符串。 r'\\usepackage{gensymb}'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.