使用matplotlib在改变图形大小时缩放图例边框、虚线和点划线

4 投票
1 回答
4792 浏览
提问于 2025-04-16 00:54

我正在尝试使用matplotlib来准备一些图形,以便发表。为了让字体大小与手稿中的文字匹配,我想一开始就创建出最终大小的图形,这样在把图形插入手稿时就不需要再调整大小了。

我遇到的问题是,由于图形比较小,我可以调整字体大小、坐标轴大小、线条宽度等等,但我一直搞不明白如何调整虚线或点线的样式,以及图例边框的厚度。举个简单且有点夸张的例子,看看下面的代码:


#!/usr/bin/python

small = True


from matplotlib import use
use('pdf')

from matplotlib import rc
rc('ps', usedistiller='xpdf')
rc('text', usetex=True)

if small:
    figsize = (1.0, 0.5)
    rc('font', size=2)
    rc('axes', labelsize=2, linewidth=0.2)
    rc('legend', fontsize=2, handlelength=10)
    rc('xtick', labelsize=2)
    rc('ytick', labelsize=2)
    rc('lines', lw=0.2, mew=0.2)
    rc('grid', linewidth=0.2)
else:
    figsize = (8,8)

import numpy as np

x = np.arange(0, 10, 0.001)
y = np.sin(x)

import matplotlib.pyplot as plt
f = plt.figure(figsize=figsize)
a = f.add_subplot(111)
a.plot(x, y, '--', label='foo bar')
a.legend()
f.savefig('mplt.pdf')

如果你把第一行可执行的代码改成 small = False,你就能看到它在“正常”大小下的样子。和正常大小相比,小图的图例框边框太厚了,而且虚线看起来也太粗了,也就是说,虚线的短线和短线之间的距离都太长了。

所以我的问题是,有没有办法解决这两个问题呢?

我使用的matplotlib版本是0.99.1.2。

1 个回答

9

要调整 虚线 的样式,可以使用

a.plot(x, y, '--', label='foo bar', dashes=(2,2))

同时也可以调整 图例框 的线条宽度,

lg = a.legend()
fr = lg.get_frame()
fr.set_lw(0.2)

撰写回答