2014-02-10 4 views
5

Мой код построения графиков, похоже, не показывает график (строки с 12 по 59, вероятно, не нарушают его, но я включил их на всякий случай - у меня были данные, которые были приняты некоторое время, чтобы внести в отсортированный список).Matplotlib plt.show() не показывает график

Я возился с ней и пробовал разные вещи, но я думаю, что главная проблема заключается в том, что я не понимаю, что figure(), plt.show(), import matplotlib.pyplot as plt, from pylab import * и некоторые другие линии на самом деле означают. Я не знаю, когда мне нужно их использовать или почему я должен их использовать.

Не мог бы кто-нибудь помочь мне и объяснить, как нарисовать .svg из двух списков и показать в конце подробную информацию о том, почему каждая строка включена и когда я положил plt. спереди и когда я положил ax. спереди и когда Я ничего не ставил перед собой и т. Д.? Извините, это займет так много времени, чтобы ответить, но я действительно не понимаю matplotlib или любой из примеров на их веб-сайте.

import matplotlib 
matplotlib.use('SVG') 
import matplotlib.pyplot as plt 
import string, math 
from pylab import * 
from decimal import * 

name = raw_input("Enter the filename:\n") 

myfile = open("datafiles/"+name+".data", 'r') 

xData = [] 
yData = [] 
plots = [name] 
mydata = myfile.readlines() 

i = 0 
N = len(mydata) 
while (i < N): 
    string = mydata[i] 
    data = [str(x) for x in string.split(" ")] 
    data=filter(lambda x: len(x)>0, data) 
    xData.append(data[1]) 
    yData.append(data[2]) 
    i = i + 1 

i = 0 
while (i < N): 
    if (float(xData[i]) <= 0): 
     xData[i] = "" 
     yData[i] = "" 
    if (xData[i] == "nan" or xData[i] == "-nan"): 
     xData[i] = "" 
     yData[i] = "" 
    i = i + 1 

xData=filter(lambda x: len(x)>0, xData) 
yData=filter(lambda x: len(x)>0, yData) 

N = len(xData) 
i = 0 

while (i < N): 
    xData[i] = float(xData[i]) 
    yData[i] = float(yData[i]) 
    i = i + 1 

j = 0 
while (j < N): 
    i = 0 
    while (i < (N-j-1)): 
     if (xData[i]>xData[i+1]): 
      a, b = xData[i], xData[i+1] 
      xData[i+1], xData[i] = a, b 

      a, b = yData[i], yData[i+1] 
      yData[i+1], yData[i] = a, b 
     i = i + 1 
    j = j + 1 

plot = plt.figure(1) 
plt.plot(xData, yData) 
plt.show(1) 
plt.savefig(name) 

ответ

7

Вы пытаетесь использовать бэкенд, который не будет производить графики с plt.show(). Вместо этого вам нужно использовать другой бэкэнд, такой как WXAgg или QT4agg, выбор которого будет зависеть от вашей системы. См. this information на бэкендах Matplotlib. Вместо этого вы должны использовать толькоplt.savefig('filename.svg'), если вы желаете иметь файл в формате svg. Полученный файл будет в вашем рабочем каталоге, вам нужно будет открыть его только после завершения вашего скрипта.

Выработать немного, чтобы ответить на некоторые из ваших вопросов о не понимая, что отдельные линии означают:

plt.show() будет производить интерактивный сюжет на экране, если вы используете бэкэнд (визуализатор), который поддерживает замышляет ваш пользовательский интерфейс.

import matplotlib.pyplot as plt просто импортирует функции и классы из библиотеки pyplot из пакета matplotlib, а часть plt похожа на создание псевдонима для доступа к этим функциям. Например, plt.show(), plt.figure и т. Д. Вместо того, чтобы вводить matplotlib.pyplot.show() каждый раз. С другой стороны, from pylab import * импортирует все функции без префикса. В общем, я бы избегал использовать import *, потому что это может ввести в заблуждение, чтобы прочитать ваш код позже. Кроме того, pylab, вероятно, не является чем-то необходимым для кода, который вы здесь указали.

plt.figure() - это команда, которая инициализирует вашу фигуру. В этом случае, поскольку вы использовали plot = plt.figure, вы можете ввести plot.plot(xData, yData), потому что ваш график переменной теперь является частью класса фигур. Вы бы использовали ax, например, если у вас были дополнительные оси, подзаголовки или цветовые полосы, на которых вам нужно было выполнить какое-либо действие.

Я бы рекомендовал пройти через сайт matplotlib, чтобы дать вам более подробное, но все же относительно краткое и простое введение в использование matplotlib.

+0

Ну ладно, спасибо. Поэтому, когда я комментирую 'matplotlib.use ('SVG'), он может отображать интерактивную вещь, но тогда я не могу сохранить ее как' .svg'. Есть ли способ иметь и то и другое? У меня еще не было возможности прочитать всю ссылку, хотя, если ответ будет, я найду его сегодня вечером, когда вернусь домой. –

1

Если вы сделали pip install matplotlib в virtualenv с --no-site-packages и plt.show() не показывает свой сюжет:

1) либо apt-get установить Matplotlib, то virtualenv --system-site-packages FOLDERNAME

2) Или из this guide:

pip uninstall matplotlib 
sudo apt-get install python-gtk2-dev 
ln -sf /usr/lib/python2.7/dist-packages/{glib,gobject,cairo,gtk-2.0,pygtk.py,pygtk.pth} $VIRTUAL_ENV/lib/python2.7/site-packages 
pip install matplotlib 

В руководстве по-прежнему есть еще один шаг, но для меня это не было необходимо (установите backend на GTKAgg в ~/.config/matplotlib/matplotlibrc)

Смежные вопросы