2014-02-10 4 views
0

Я только начинаю с matplotlib.pyplot и немного застрял.штабелированная гистограмма - пространство между осью y и первым баром: matplotlib.pyplot

Используя пример в документации matpltlib.pyplot, я создал столбчатую диаграмму enter image description here используя следующий код:

import numpy as np 
import matplotlib.pyplot as plt 

N = 7 
OECD = (242, 244, 255, 263, 269, 276, 285) 
NonOECD = (282, 328, 375, 417, 460, 501, 535) 
Sum = ('524', '572', '630', '680', '729', '777', '820') 
ind = np.arange(N) 
width = 0.5 

p1 = plt.bar(ind, NonOECD, width, color = 'r') 
p2 = plt.bar(ind, OECD, width, color = 'b', bottom = NonOECD) 

plt.ylabel('Quadrillion Btu') 
plt.title('World Total Energy Consumption 2010 - 2040') 
plt.xticks(ind+width/2., ('2010', '2015', '2020', '2025', '2030', '2035', '2040')) 
plt.yticks(np.arange(0, 1001, 200)) 
plt.legend((p1[0], p2[0]), ('Non - OECD', 'OECD'), loc = 2, frameon = 'false') 
plt.tick_params(top = 'off', bottom = 'off', right = 'off') 
plt.grid(axis = 'y', linestyle = '-') 

plt.show() 

Однако, я бы предпочел, если первый бар (2010) не прав против оси y.
Я попытался просто прибавление 1 к отру в обоих plt1 и plt2
т.е.

p1 = plt.bar(ind+1, NonOECD, width, color = 'r') 
p2 = plt.bar(ind+1, OECD, width, color = 'b', bottom = NonOECD) 

Но, я не могу работать эквивалентное изменение для ticklabels. Итак, до сих пор все, что я производил, это: enter image description here

Сказав это, я могу сделать это, сделав N = 8, добавив дополнительный нулевой первый член в обоих кортежах? ОЭСР и NonOECD и добавление пустой xticklabel:
т.е.

N = 8 
OECD = (0, 242, 244, 255, 263, 269, 276, 285) 
NonOECD = (0, 282, 328, 375, 417, 460, 501, 535) 
Sum = (0, '524', '572', '630', '680', '729', '777', '820') 

plt.xticks(ind+width/2., ('', '2010', '2015', '2020', '2025', '2030', '2035', 2040')) 

Однако, я не могу использовать эту выдумку, как я хочу, чтобы отобразить итоговые on top of the stacks ....

+4

Вы хотите использовать 'plt.xlim' или' ax.set_xlim' – tacaswell

ответ

2

Вы хотите использовать функция «поля». Ваш код изменен:

fig = plt.figure() 
ax = fig.add_subplot(111) 
# the first argument is the margin of the x-axis, the second of the y-axis 
ax.margins(0.04, 0) 

p1 = ax.bar(ind, NonOECD, width, color = 'r') 
p2 = ax.bar(ind, OECD, width, color = 'b', bottom = NonOECD) 
Смежные вопросы