开发者

Scale legend box border, dashed and dotted lines when the figure size is changed with matplotlib

I'm trying to use matplotlib to prepare some figures for publication. In order to make the font sizes match the text of the manuscript I'm trying to create the figure in the final size to begin with, so that I avoid scaling the figure when inserting it into the manuscript.

The problem I'm having is that as the figure is then pretty small, I can scale font sizes, axis sizes, line widths etc., but what I've been unable to figure out is how to scale dashed or dotted lines, as well as the thickness of the legend border box. For a simplified and somewhat exaggerated example, consider


#!/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, 开发者_StackOverflow社区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')

If you change the first executable line to small = False you can see how it should look in "normal" size. Compared to the normal size, the small plot suffers from a legend box with too thick borders, and the dashed line is too coarse, i.e. too long dashes and too long distance between the dashes.

So my question is, is there a way to fix these two problems?

The matplotlib version I'm using is 0.99.1.2.


To adjust the dashes, use

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

and the legend box line width,

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜