我正在对从0到1的一堆数据进行直方图绘制。
如您所见,直方图“块”未与y轴对齐。 有没有一种方法可以设置我的直方图,以便以0.1的恒定宽度获取直方图?还是我应该尝试不同的包裹?
我的代码很简单:
import pandas as pd
import numpy as np
from pandas.plotting import scatter_matrix
import matplotlib.pyplot as plt
np.set_printoptions(precision=10,
threshold=10000,
linewidth=150,suppress=True)
E=pd.read_csv("FQCoherentSeparableBons5.csv")
E = E.ix[0:,1:]
E=np.array(E,float)
P0=E[:,0]
P0=pd.DataFrame(P0,columns=['P0'])
scatter_matrix(P0, alpha=0.2, figsize=(6, 6), diagonal='hist',color="red")
plt.suptitle('Distribucio p0')
plt.ylabel('Frequencia p0')
plt.show()
PD:如果您想了解数据,我只是从0到1的随机分布。
答案 0 :(得分:1)
您可以使用hist_kwds
函数的scatter_matrix
参数将其他参数传递给熊猫直方图。如果您想要十个宽度为0.1的纸槽,那么您的scatter_matrix
调用应该看起来像
scatter_matrix(P0, alpha=0.2, figsize=(6, 6), diagonal='hist', color="red",
hist_kwds={'bins':[i*0.1 for i in range(11)]})
有关熊猫直方图的其他参数可以在documentation中找到。
这是一个简单的例子。我在图上添加了一个网格,以便可以看到垃圾箱正确对齐。
import numpy as np
import pandas as pd
from pandas import scatter_matrix
import matplotlib.pyplot as plt
x = np.random.uniform(0,1,100)
scatter_matrix(pd.DataFrame(x), diagonal='hist',
hist_kwds={'bins':[i*0.1 for i in range(11)]})
plt.xlabel('x')
plt.ylabel('frequency')
plt.grid()
plt.show()
默认情况下,直方图中的bin数量为10,但是仅仅因为您的数据分布在0到1之间并不意味着bin会在整个范围内均匀分布。例如,如果您实际上没有一个等于1的数据点,则结果将类似于您的问题。