Python pyplot直方图0条出现

Python pyplot直方图0条出现,python,matplotlib,histogram,Python,Matplotlib,Histogram,我正在尝试为我拥有的一些数据制作一个柱状图,出于某种原因,柱状图也一直显示第0栏(在我的例子中是空的) 这是我的密码 number_of_bins = 12 japanQuakes = pd.read_csv('JapanQuakes.csv', header=None).as_matrix()[1:,1].astype(np.int) japanQuakes_histogram = plt.hist(japanQuakes, number_of_bins) japanQuakes_histo

我正在尝试为我拥有的一些数据制作一个柱状图,出于某种原因,柱状图也一直显示第0栏(在我的例子中是空的) 这是我的密码

number_of_bins = 12
japanQuakes = pd.read_csv('JapanQuakes.csv', header=None).as_matrix()[1:,1].astype(np.int)
japanQuakes_histogram = plt.hist(japanQuakes, number_of_bins)

japanQuakes_histogram[0]
请注意,日本地震包含从1到12的数字

这是我得到的柱状图

所以我想找到一种方法,让条形图填满整个图形,x轴从1开始,而不是从0开始

为了解决这个问题,我尝试了以下方法

A = np.array([1,2,3,4,5,6,7,8,9,10,11,12])
japanQuakes_histogram = plt.hist(japanQuakes, A)
但通过这样做,似乎最后两个小节被叠加在一起,我得到的是11个小节,而不是12个小节


还有一种方法可以使x轴编号显示在每个条下吗?

试试下面的方法怎么样

plt.axis([1,12,0,3000])
A = np.arange(1,14)
japanQuakes_histogram = plt.hist(japanQuakes, A)

对于微调,您始终可以更改参数
bin
,但是对于轴,可以通过
axis

来更改,如何尝试以下操作

plt.axis([1,12,0,3000])
A = np.arange(1,14)
japanQuakes_histogram = plt.hist(japanQuakes, A)

对于微调,您始终可以更改参数
bin
,但对于轴,可以通过
axis

进行更改。首先,在大多数情况下,在没有任何进一步规范的情况下设置bin的数量将失败。在这里,您对箱子做了一些隐含的假设,即您希望有12个箱子,间距在1到13之间。(但努比怎么知道?!)

因此,最好考虑将存储箱放置在何处,并通过向
存储箱提供一个数组来手动设置它们。此数组被解释为存储箱的限制,因此,例如,将
存储箱设置为
[6,8,11]
将生成两个存储箱,第一个存储箱的范围为6到8(不包括8.00),第二个存储箱的范围为8到11

在您的情况下,您需要12个存储箱,因此您需要将1到13之间的13个数字提供给
存储箱
,这样
1
值属于第一个存储箱,范围从1到2,
12
属于最后一个从12到13的存储箱

这已经产生了一个很好的直方图,但是因为你只有整数,所以箱子的宽度有点违反直觉。因此,不是把BAR集中在bin的中间,而是想把它放在左边点,这可以通过<代码> Algun=“左边”< /> >来完成。 最后,您可以随意设置绘图的限制

import numpy as np
import matplotlib.pyplot as plt

# japanQuakes is the array [ 1  2  3  4  5  6  7  8  9 10 11 12]
japanQuakes = np.arange(1,13) 

# if we want n bins, we need n+1 values in the array, since those are the limits
bins = np.arange(1,14)

japanQuakes_histogram, cbins, patches = plt.hist(japanQuakes, bins=bins, align="left")
# just to verify:
print japanQuakes_histogram
#[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]
print cbins
#[ 1  2  3  4  5  6  7  8  9 10 11 12 13]
# indeed we have one value between 1 and 2, one value between 2 and 3 and so on

# set xticks to match with the left bin limits
plt.gca().set_xticks(bins[:-1])

# if you want some space around
plt.gca().set_xlim([bins[0]-1,bins[-1]])
# or if you want it tight
#plt.gca().set_xlim([bins[0]-0.5,bins[-1]-0.5])

plt.show()

首先,在大多数情况下,设置没有任何进一步规范的箱子数量将失败。在这里,您对箱子做了一些隐含的假设,即您希望有12个箱子,间距在1到13之间。(但努比怎么知道?!)

因此,最好考虑将存储箱放置在何处,并通过向
存储箱提供一个数组来手动设置它们。此数组被解释为存储箱的限制,因此,例如,将
存储箱设置为
[6,8,11]
将生成两个存储箱,第一个存储箱的范围为6到8(不包括8.00),第二个存储箱的范围为8到11

在您的情况下,您需要12个存储箱,因此您需要将1到13之间的13个数字提供给
存储箱
,这样
1
值属于第一个存储箱,范围从1到2,
12
属于最后一个从12到13的存储箱

这已经产生了一个很好的直方图,但是因为你只有整数,所以箱子的宽度有点违反直觉。因此,不是把BAR集中在bin的中间,而是想把它放在左边点,这可以通过<代码> Algun=“左边”< /> >来完成。 最后,您可以随意设置绘图的限制

import numpy as np
import matplotlib.pyplot as plt

# japanQuakes is the array [ 1  2  3  4  5  6  7  8  9 10 11 12]
japanQuakes = np.arange(1,13) 

# if we want n bins, we need n+1 values in the array, since those are the limits
bins = np.arange(1,14)

japanQuakes_histogram, cbins, patches = plt.hist(japanQuakes, bins=bins, align="left")
# just to verify:
print japanQuakes_histogram
#[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]
print cbins
#[ 1  2  3  4  5  6  7  8  9 10 11 12 13]
# indeed we have one value between 1 and 2, one value between 2 and 3 and so on

# set xticks to match with the left bin limits
plt.gca().set_xticks(bins[:-1])

# if you want some space around
plt.gca().set_xlim([bins[0]-1,bins[-1]])
# or if you want it tight
#plt.gca().set_xlim([bins[0]-0.5,bins[-1]-0.5])

plt.show()

将存储箱设置为
A=np.array(列表(范围(1,13))
(注意缺少括号)的问题是,它将生成
11个存储箱。然而,提问者想要
12个
bin。将bin设置为
A=np.array(列表(范围(1,13))
(注意缺少括号)的问题是,它将生成
11个
bin。然而,提问者想要12个垃圾箱。谢谢,这是有道理的。谢谢,这是有道理的。