我有一系列文件输出来自另一个代码,其中包含我想用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])。如下图所示
我认为可行的方法如下:
import numpy as np
hist_interval=np.linspace(hist_file[-2], hist_file[-1],len(hist_data))
plt.bar(hist_interval, hist_data)
但这会产生如下的条形图,显然不对。
此外,我知道虽然我有len(hist_data)
个分档,但是边缘将是len(hist_data)+1
,由于它们的大小不同,我完全无法解析。同样地,我尝试使用plt.set_xaxisticks
并且没有取得任何进展。
总而言之,任何帮助都会非常感谢:D
答案 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()
以下是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()