繁体   English   中英

将直方图转换为平滑曲线,该直方图上绘制了两个变量

[英]Convert a Histogram which has two variables plotted on it into a smooth Curve

这是生成直方图的代码。 有关完整代码,您可以参考此iPython Notebook

# Splitting the dataset into malignant and benign.
dataMalignant=datas[datas['diagnosis'] ==1]
dataBenign=datas[datas['diagnosis'] ==0]

#Plotting these features as a histogram
fig, axes = plt.subplots(nrows=10, ncols=1, figsize=(15,60))
for idx,ax in enumerate(axes):
    ax.figure
    binwidth= (max(datas[features_mean[idx]]) - min(datas[features_mean[idx]]))/250
    ax.hist([dataMalignant[features_mean[idx]],dataBenign[features_mean[idx]]], bins=np.arange(min(datas[features_mean[idx]]), max(datas[features_mean[idx]]) + binwidth, binwidth) , alpha=0.5,stacked=True, normed = True, label=['M','B'],color=['r','g'])
    ax.legend(loc='upper right')
    ax.set_title(features_mean[idx])
plt.show()

直方图

如何将此直方图转换为平滑曲线,曲线下方的区域以阴影/突出显示。

这是一个可能对您有帮助的简单示例

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
np.random.seed(123)
datas = pd.DataFrame(np.random.randint(0, 2, size=(100, 1)), columns=['diagnosis'])
datas['data'] = np.random.randint(0, 100,size=(100, 1))

我使用numpy的直方图函数,但您也可以使用相同参数的ax.hist

benign_hist=np.histogram(datas[datas['diagnosis']==0]['data'],bins=np.arange(0, 100, 10))
malignant_hist=np.histogram(datas[datas['diagnosis']==1]['data'],bins=np.arange(0, 100, 10))

fig,ax=plt.subplots(1,1)
ax.fill_between(malignant_hist[1][1:], malignant_hist[0], color='r', alpha=0.5) 
ax.fill_between(benign_hist[1][1:], benign_hist[0], color='b', alpha=0.5)

在上面的示例中,为了绘制方便而不是bin中点,我只使用了9个bin边缘进行演示。

在OP的代码中,可以指定hist_data = ax.hist(...) hist_data [0]包含直方图值,hist_data 1包含用于填充区域的区域使用类似的东西

fig, ax=plt.subplots(1,1)
ax.fill_between(hist_data[1][1:],hist_data[0][0],color='g',alpha=0.5)
ax.fill_between(hist_data[1][1:],hist_data[0][1],color='r',alpha=0.5) 

填充直方图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM