2016-08-22 1 views
0

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

[[1,100.1],[2,133.222],[3,198.0]] 

Я пытаюсь использовать эти данные, чтобы нарисовать гистограмму в Matplotlib, где первый элемент в каждом элементе списка есть ось x (это всегда целое число от 1 до 1000, без повторов), а второй элемент - значение оси y.

Я использую Python 3. Как бы это сделать?

ответ

3

Вам нужно отделить значения x от значений y. Это может быть сделано с помощью zip:

Первое:

import numpy as np 
import matplotlib.pypl as plt 

Сейчас:

In [263]: lst = [[1,100.1],[2,133.222],[3,198.0]] 

In [264]: xs, ys = [*zip(*lst)] 

In [265]: xs 
Out[265]: (1, 2, 3) 

In [266]: ys 
Out[266]: (100.1, 133.222, 198.0) 

Теперь выводим бары:

In [267]: plt.bar(xs, ys) 

Гистограммы не установленные БАРС ширины автоматически , В данном случае ширина оказалась тонкими, но более систематическим способом будет принимать различия между значениями х, как это:

In [269]: np.diff(xs) 
Out[269]: array([1, 1]) 

Обычно у вас есть равноудаленные х значения, но это необходимость не так. Вы можете установить ширину до минимальной разности между значениями х, поэтому гистограмма может генерироваться следующим образом:

In [268]: plt.bar(xs, ys, width=0.9 * np.min(np.diff(xs))) 
+1

Работали фантастики. Спасибо за вашу помощь! – Cellydy

0

Я хотел бы пойти на что-то вроде этого:

import matplotlib.pyplot as plt 

data = [[1,100.1],[2,133.222],[3,198.0]] 
x = map(lambda x: x[0], data) 
y = map(lambda x: x[1], data) 

plt.bar(x,y)