Python Matplotlib:删除重叠边界的绘图直方图

时间:2016-06-23 17:19:56

标签: python matplotlib histogram

我正在使用Python中的Matplotlib使用matplotlib.bar()函数绘制直方图。这给了我看起来像这样的情节:

enter image description here

我正在尝试制作一个直方图,只绘制每个条形图的大写字母和不与另一个条形边框直接共享空间的边,更像是这样:(我使用gimp编辑了这个)

enter image description here

如何使用Python实现这一目标?使用matplotlib的答案更可取,因为这是我最有经验的,但我对使用Python的任何东西都持开放态度。

对于它的价值,这是相关的代码:

import numpy as np
import matplotlib.pyplot as pp

bin_edges, bin_values = np.loadtxt("datafile.dat",unpack=True)
bin_edges = np.append(bin_edges,500.0)

bin_widths = []
for j in range(len(bin_values)):
    bin_widths.append(bin_edges[j+1] - bin_edges[j])

pp.bar(bin_edges[:-1],bin_values,width=bin_widths,color="none",edgecolor='black',lw=2)


pp.savefig("name.pdf")

1 个答案:

答案 0 :(得分:4)

我想最简单的方法是使用step函数而不是bar:  http://matplotlib.org/examples/pylab_examples/step_demo.html

示例:

import numpy as np
import matplotlib.pyplot as pp

# Simulate data
bin_edges = np.arange(100)
bin_values = np.exp(-np.arange(100)/5.0)

# Prepare figure output
pp.figure(figsize=(7,7),edgecolor='k',facecolor='w')
pp.step(bin_edges,bin_values, where='post',color='k',lw=2)
pp.tight_layout(pad=0.25)
pp.show()

如果您给出的bin_edges代表左边缘,请使用=' post&#39 ;;如果他们是rightern方面使用=' pre'。我看到的唯一问题是,如果您使用post(pre),则步骤并不能正确绘制最后一个(第一个)bin。但是你可以在你的数据之前/之后添加另一个0 bin来使它正确地绘制所有内容。

示例2 - 如果您想要存储一些数据并绘制直方图,您可以执行以下操作:

# Simulate data
data = np.random.rand(1000)

# Prepare histogram
nBins = 100
rng = [0,1]
n,bins = np.histogram(data,nBins,rng)
x = bins[:-1] + 0.5*np.diff(bins)

# Prepare figure output
pp.figure(figsize=(7,7),edgecolor='k',facecolor='w')
pp.step(x,n,where='mid',color='k',lw=2)
pp.show()