2016-11-26 204 views
0

我要繪製的柱狀圖中,這裏是數據:matplotlib.pyplot.plot,ValueError異常:無法將字符串轉換爲float:一個

large_letter = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] 
large_num = [52909, 52911, 52912, 52911, 52912, 52912, 52912, 52912, 52912, 52911] 
small_letter = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] 
small_num = [1872, 1873, 1873, 1873, 1873, 1872, 1872, 1872, 1872, 1872] 

我想繪製2個次要情節,以顯示每個字母「在每個表號,所以這裏是我的代碼

import matplotlib.pyplot as plt 
fig, (ax1, ax2) = plt.subplots(1, 2) 
ax1.bar(large_letter, large_num) 
ax2.bar(small_letter, small_num) 

但它返回以下錯誤:

ValueErrorTraceback (most recent call last) 
<ipython-input-90-e23f798dd50c> in <module>() 
    20 fig, (ax1, ax2) = plt.subplots(1, 2) 
---> 21 ax1.bar(large_letter, large_num) 
    22 ax2.bar(small_letter, small_num) 

/usr/lib64/python2.7/site-packages/matplotlib/__init__.pyc in inner(ax, *args, **kwargs) 
    1817      warnings.warn(msg % (label_namer, func.__name__), 
    1818         RuntimeWarning, stacklevel=2) 
-> 1819    return func(ax, *args, **kwargs) 
    1820   pre_doc = inner.__doc__ 
    1821   if pre_doc is None: 

/usr/lib64/python2.7/site-packages/matplotlib/axes/_axes.pyc in bar(self, left, height, width, bottom, **kwargs) 
    2085     edgecolor=e, 
    2086     linewidth=lw, 
-> 2087     label='_nolegend_' 
    2088    ) 
    2089    r.update(kwargs) 

/usr/lib64/python2.7/site-packages/matplotlib/patches.pyc in __init__(self, xy, width, height, angle, **kwargs) 
    638   Patch.__init__(self, **kwargs) 
    639 
--> 640   self._x = float(xy[0]) 
    641   self._y = float(xy[1]) 
    642   self._width = float(width) 

ValueError: could not convert string to float: A 

我怎樣才能解決這個問題?謝謝!

回答

2

它告訴你到底是什麼問題 - 它試圖將第一個參數轉換爲數字。看看documentation for matplotlib.pyplot.bar。這有點不直觀,但第一個參數是條的左側座標,而不是條的標籤。我不確定,但您可能需要tick_label參數來命名條形圖。

嘗試像

# Specify the width of each of the bars since we need it for calculating left of 
# bars. The default is 0.8 
width = 1.0 

# Find the lefts of the bars. You can change this to leave a gap between bars 
lefts = [x * width for x, _ in enumerate(large_num)] 

# Create bar graph 
ax1.bar(lefts, large_num, width=width, tick_label=large_letter) 
1

像danielu13說。像這樣的東西應該工作。

ax1.bar(range(len(large_letter)), large_num, tick_label=large_letter) 
ax2.bar(range(len(small_letter)), small_num, tick_label=small_letter) 
相關問題