2014-08-28 3 views
3

Я хочу, чтобы отрицательные стержни были обращены вниз, а положительные вверх, с осью x (0-линия), проходящей прямо между ними. Я пробовал этоPyplot - гистограмма положительных и отрицательных значений

chart = fig.bar(x, negative_data, width=35, color='r') 
ax2 = plt.gca().twinx() 
ax2.bar(x, positive_data, width=35, color='b') 

Но вместо этого я получаю слитые красные и белые полосы, обращенные вниз. Кажется, что массивы negative_data/positive_data указывают только высоту бара, но как указать ориентацию? Мне нужно что-то, чтобы указать координаты вершин каждого бара.

Кроме того, как я могу сделать ширины чем-то разумным, возможно динамическим, поскольку график изменяется пользователем?

Вот пример проблематичных ширины:

x = [250, 1500, 2750, 4250, 6000, 8500, 13200] 
negative_data = [0, 0, 0, 0, 0, 0, 0] 
positive_data = [3, 0, 0, 0, 1, 0, 0] 

Как я могу сделать сюжет из тех хорошо выглядеть?

ответ

14

Вам не нужно, чтобы добавить двойной оси, вы можете построить обе гистограммы на одной и той же оси, как это:

x = range(7) 
negative_data = [-1,-4,-3,-2,-6,-2,-8] 
positive_data = [4,2,3,1,4,6,7,] 

fig = plt.figure() 
ax = plt.subplot(111) 
ax.bar(x, negative_data, width=1, color='r') 
ax.bar(x, positive_data, width=1, color='b') 

bar chart with negative an positive y values

Барс с шириной одной наполнит осей и будет масштабироваться с фигурой по мере ее изменения.

+0

Прохладный, работает! Вы хоть представляете, что я делаю с шириной? –

+0

Что вы хотите, чтобы ширина выглядела? – Molly

+0

Либо стержни касаются друг друга, либо с очень небольшим промежутком между ними. Прямо сейчас я получаю чрезвычайно тонкие вертикальные линии. Они также выглядят черными, может быть, потому, что они такие тонкие, я не вижу цвета. Спасибо! –

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