Масштабировать границу поля легенды, пунктирные и пунктирные линии при изменении размера фигуры с помощью matplotlib - PullRequest
4 голосов
/ 07 июля 2010

Я пытаюсь использовать 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 Ответ

8 голосов
/ 10 июля 2010

Чтобы настроить тире , используйте

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

и поле легенды ширина линии,

lg = a.legend()
fr = lg.get_frame()
fr.set_lw(0.2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...