SciencePlots是一个基于Matplotlib的补充包,里面主要包含了一些以.mplstyle为后缀的图表样式的配置文件。这样,你画图的时候只需要通过调用这些配置文件,就能画出比较好看的数据可视化图表,也避免了你每次画图时都要从头开始手动配置图表的格式。
目前该工具包中包含Science,IEEE等期刊的图表格式,还包括一些对图表中的网格和字体颜色等的配置文件。
项目链接:GitHub - garrettj403/SciencePlots: Matplotlib styles for scientific plotting
pip install SciencePlots
import numpy as np
import matplotlib.pyplot as plt
#plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
#plt.rcParams['axes.unicode_minus']=False #这两行需要手动设置
def model(x, p):
return x ** (2 * p + 1) / (1 + x ** (2 * p))
pparam = dict(xlabel='Voltage (mV)', ylabel='Current ($\mu$A)')
x = np.linspace(0.75, 1.25, 201)
with plt.style.context(['science', 'no-latex']):
fig, ax = plt.subplots()
for p in [10, 20, 40, 100]:
ax.plot(x, model(x, p), label=p)
ax.legend(title='Order')
ax.autoscale(tight=True)
ax.set(**pparam)
# Note: $\mu$ doesn't work with Times font (used by ieee style)
ax.set_ylabel(r'Current (\textmu A)')
fig.savefig('fig2a.pdf')
fig.savefig('fig2a.jpg', dpi=300)
绘图效果还是很不错的
这个包的确非常简单易用,但是选择一些格式的时候会报没有字体的错误,例如:
findfont: Font family ['serif'] not found. Falling back to DejaVu Sans.
RuntimeWarning: Glyph 30005 missing from current font.
Font 'default' does not have a glyph for '\u7535' [U+7535], substituting with a dummy symbol.
第一个是说没有这个font family, 第二个是说中文字符的问题,总之使用起来并不是很顺畅。
要想解决这些问题,需要下载对应的字体,并且修改配置文件 + 重启python环境
主要有几步:
1.前往指定目录:/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf
,将下载好的SimHei字体移动到该目录下。
2.修改matplotlibrc文件: /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc,修改内容如下:
font.family : sans-serif
# 去掉前面的#
font.sans-serif : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
# 去掉前面的#,并在冒号后面添加SimHei
axes.unicode_minus : False
# 去掉前面的#,并将True改为False
3.重启python环境 这一点非常重要
Font family [‘sans-serif‘] not found.Falling back to DejaVu Sans.解决办法_sinat_40875078的博客-CSDN博客
1238: UserWarning: findfont: Font family [‘sans-serif’] not found. Falling back to DejaVu Sans._但行好事,莫问前程-CSDN博客
Mac python matplotlib Glyph xxxxx missing from current font的解决方案_Python学习与数据挖掘-CSDN博客
SciencePlots自身提供了中文支持,但是需要安装特定的字体,而且这个字体Windows没有...
FAQ · garrettj403/SciencePlots Wiki · GitHub
如果要使用中文字符,还是按照上面的解决办法,下载中文字体以后加到matplotlib/mpl-data/fonts/ttf 目录下,
修改matplotlibrc文件
并不算特别好用... 但是它的格式设置都是公开在.mplstyle文件里的,例如nature.mplstyle
自动写代码手动设置这些内容也不是不行.....
# Matplotlib style for Nature journal figures.
# In general, they advocate for all fonts to be panel labels to be sans serif
# and all font sizes in a figure to be 7 pt and panel labels to be 8 pt bold.
# Figure size
figure.figsize : 3.3, 2.5 # max width is 3.5 for single column
# Font sizes
axes.labelsize: 7
xtick.labelsize: 7
ytick.labelsize: 7
legend.fontsize: 7
font.size: 7
# Font Family
font.family: sans-serif
font.sans-serif: DejaVu Sans, Arial, Helvetica, Lucida Grande, Verdana, Geneva, Lucid, Avant Garde, sans-serif
mathtext.fontset : dejavusans
# Set line widths
axes.linewidth : 0.5
grid.linewidth : 0.5
lines.linewidth : 1.
lines.markersize: 3
# Always save as 'tight'
# savefig.bbox : tight
# savefig.pad_inches : 0.01 # Use virtually all space when we specify figure dimensions
# LaTeX packages
text.latex.preamble : \usepackage{amsmath} \usepackage{amssymb} \usepackage{sfmath}