使用正确的x轴标记绘制预先绑定的数据

时间:2017-03-10 11:05:05

标签: python-3.x matplotlib histogram

我有一系列文件输出来自另一个代码,其中包含我想用matplotlib绘制的预分箱数据。

其中一个文件的内容的一个简单示例是:

hist_file=[  0.00000000e+00,   1.52915100e+24,   0.00000000e+00,
             0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
             0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
             0.00000000e+00,   2.03886800e+24,   0.00000000e+00,
             0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
             0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
             0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
             0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
             0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
             0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
             0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
             0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
             0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
             0.00000000e+00,   5.09717100e+23,   0.00000000e+00,
             1.00000000e+00]

其中hist_file[0]是对数据模拟中相应转储时间的引用,hist_file[-2]是整个数据的下限,hist_file[-1]是上限。 (因此在这组数据中,转储为0,数据集的下限为0,上限为1)。 hist_file[1:-2]是我试图可视化的分箱数据。

使用bar我可以绘制数据(参见下面的代码块):

import matplotlib.pyplot as plt

hist_data=hist_file[1:-2]
plt.bar(range(0,len(hist_data)), hist_data)

但是,xticks不对应于数据的实际bin值(区间[0,1])。如下图所示

See figure 1.

我认为可行的方法如下:

import numpy as np
hist_interval=np.linspace(hist_file[-2], hist_file[-1],len(hist_data))
plt.bar(hist_interval, hist_data)

但这会产生如下的条形图,显然不对。

so

此外,我知道虽然我有len(hist_data)个分档,但是边缘将是len(hist_data)+1,由于它们的大小不同,我完全无法解析。同样地,我尝试使用plt.set_xaxisticks并且没有取得任何进展。

总而言之,任何帮助都会非常感谢:D

1 个答案:

答案 0 :(得分:1)

我并不完全确定您在哪里遇到问题,但以下将是您如何绘制数据的示例。

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(13)

xmin = 0 # minimum value (left edge of first bin)
xmax = 1 # maximum value (right edge of last bin)
N = 4    # number of values (bins)
# data
data = np.random.rand(N)
# coordinates of left bin edge:
x = np.arange(0,N)*(xmax-xmin)/float(N)
# bar width
width=(xmax-xmin)/float(N)

plt.bar(x, data, width=width, align="edge", edgecolor="k")
#set x ticks to bin edges
plt.xticks(list(x)+[xmax])
plt.show()

enter image description here

以下是xmax = 100和15个栏的相同示例:

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(13)

xmin = 0 # minimum value (left edge of first bin)
xmax = 100 # maximum value (right edge of last bin)
N = 15    # number of values (bins)
# data
data = np.random.rand(N)
# coordinates of left bin edge:
x = np.arange(0,N)*(xmax-xmin)/float(N)
# bar width
width=(xmax-xmin)/float(N)

plt.bar(x, data, width=width, align="edge", edgecolor="k")
#set x ticks to bin edges
plt.xticks((list(x)+[xmax])[::3], rotation =45)
plt.show()

enter image description here