Python Matplotlib栏自定义

Python Matplotlib栏自定义,python,matplotlib,Python,Matplotlib,这部分代码生成图(1)中的条形图。我想知道如何修改它以生成图(2)中的条形图,它更具可读性 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 bia

这部分代码生成图(1)中的条形图。我想知道如何修改它以生成图(2)中的条形图,它更具可读性

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')

使用
pylab.step
而不是pylab.bar会让你的目标更接近你想要的。它采用与
条相同的参数,但打印“步骤”而不是“条”


您可能还想查看更完整的
pylab.hist
文档。

您可以定义自己的函数,并使用它绘制水平线。如果要在某个轴上绘制,只需将此轴作为
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()

使用
步骤
方法无法水平绘制每个点。在
中使用
pre
/
post
参数时,步骤被截断,而使用
mid
时,每侧的两个步骤都被截断
bar_tops(np.arange(10), np.sort(np.random.rand(10)), lw=2)
plt.show()