我有名單,看起來名單如下:情節名單
[[1,100.1],[2,133.222],[3,198.0]]
我試圖用這個數據在matplotlib,其中第一個元素繪製條形圖列表中的每個元素都是x軸(它始終是1-1000之間的整數,不重複),第二個元素是y軸值。
我正在使用Python 3.我該如何繪製?
我有名單,看起來名單如下:情節名單
[[1,100.1],[2,133.222],[3,198.0]]
我試圖用這個數據在matplotlib,其中第一個元素繪製條形圖列表中的每個元素都是x軸(它始終是1-1000之間的整數,不重複),第二個元素是y軸值。
我正在使用Python 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)
條形圖不會自動設置欄寬度。在目前的情況下,寬度竟然是罰款,但更加系統的方法是取x值之間的差異,像這樣:
In [269]: np.diff(xs)
Out[269]: array([1, 1])
通常你有一個等距x值,但這需要不是這樣。您可能需要設置寬度爲x值之間的最小差異,所以條形圖可以這樣產生:
In [268]: plt.bar(xs, ys, width=0.9 * np.min(np.diff(xs)))
我會去這樣的事情:
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)
曾任職太棒了。謝謝你的幫助! – Cellydy