2013-09-08 3 views
2

Эта часть моего кода создает гистограмму на рисунке (1). Интересно, как изменить его для создания гистограммы на рисунке (2), которая является более читаемой.Matplotlib Bar Настройка

axs[4].set_xticks(range(N)) 
axs[4].set_xticklabels(words[inds],rotation = 'vertical') 
axs[4].set_xlabel('word') 
axs[4].set_yscale('log') 
axs[4].set_ylabel('pagerank') 
axs[4].set_title('Sorted PageRank biased by total word frequencies (c = '+str(c4)+')') 
axs[4].bar(range(N),p4[inds],lw=2.5, align='center') 

plt.subplots_adjust(hspace=.5) 

plt.savefig('./figures/pageranks.pdf') 

ответ

1

Вы можете определить свою собственную функцию и использовать plt.hlines для построения горизонтальных линий. Если вы хотите построить это в определенных осях, просто укажите эти оси в качестве аргумента для параметра ax.

import matplotlib.pyplot as plt 
import numpy as np 

def bar_tops(x, y, width=0.8, align='center', ax=None, **kwargs): 
    x = np.array(x) 
    y = np.array(y) 
    if align == 'center': 
     left = x - 0.5 * width 
     right = x + 0.5 * width 
    elif align == 'edge': 
     left = x 
     right = x + width 
    if ax == None: 
     ax = plt.gca() 
    ax.hlines(y, left, right, **kwargs) 

Пример использования:

bar_tops(np.arange(10), np.sort(np.random.rand(10)), lw=2) 
plt.show() 

Output

1

Использование pylab.step вместо pylab.bar дает что-то немного ближе к тому, что вы хотите. Он принимает те же аргументы, что и bars, но называет «шаги» вместо «баров».

import pylab as p 
ax = p.gca() 
xbins = p.linspace(0.,10.,10) 
step_heights = [10, 9, 9, 9, 7, 6, 6, 5, 4, 3] 
ax.step(xbins, step_heights, linewidth=2.5, color="k",where="mid") 
ax.set_ylim(0.,11.) 

step-plot

Вы также можете посмотреть на несколько более полной pylab.hist документации.

+0

это невозможно с 'step' метода для построения каждой точки в горизонтальном направлении. При использовании аргументов 'pre' /' post' для 'where' шаг усекается, а с помощью' mid' оба шага с каждой стороны усекаются – christopherlovell

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