Переменные RC в matplotlib не применяются к графам, осям в веб-приложении - PullRequest
1 голос
/ 18 января 2011

Я пытаюсь установить ширину линии для matplotlib в веб-приложении, которое генерирует графики, используя

matplotlib.rc('lines', linewidth=0.5)

Это прекрасно работает при работе с matplotlib в интерактивном режиме, но в моем веб-приложении это не дает никакого эффекта, и единственный способ получить правильную ширину линии - это предоставить аргумент для отдельных вызовов, т.е.

vals = map(itemgetter(1), sorted(series1.items(), reverse=True))
group1_rects = ax.barh(ind, vals, width, color='r', snap=True, linewidth=0.5)
vals = map(itemgetter(1), sorted(series2.items(), reverse=True))
group2_rects = ax.barh(ind+width, vals, width, color='b', linewidth=0.5)

Есть ли какая-нибудь хитрость, чтобы вызов matplotlib.rc работал в веб-приложениях?

Код, который я использую для рисования фигуры, выглядит следующим образом:

@contextmanager
def render_plot(w=8,h=8):
    fig = Figure(figsize=(w,h))           
    canvas = FigureCanvas(fig)
    response.content_type = 'image/png'
    #Here is where I hope to put RC settings
    matplotlib.rc('lines', linewidth=0.5)
    yield fig
    s = StringIO()
    canvas.print_figure(s)
    response.content = s.getvalue()

1 Ответ

1 голос
/ 18 января 2011

То, что вы опубликовали, должно работать. Просто для справки следующее прекрасно работает для меня, используя python 2.6 и matplotlib 1.0

from contextlib import contextmanager

import matplotlib as mpl
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure

@contextmanager
def render_plot(w=8,h=8):
    fig = Figure(figsize=(w,h))           
    canvas = FigureCanvas(fig)
    mpl.rc('lines', linewidth=5)
    yield fig
    s = file('temp.png', 'w')
    canvas.print_figure(s)

with render_plot() as fig:
    ax = fig.add_subplot(111)
    ax.plot(range(10))

alt text

Этот пример работает в вашей системе?

...