Python 如何绘制每个“点的百分比”;单元格“;pyplot.hist2d的?

Python 如何绘制每个“点的百分比”;单元格“;pyplot.hist2d的?,python,matplotlib,histogram,Python,Matplotlib,Histogram,我希望直方图中的每个“单元格”都有一个数字,表示该“单元格”中总点数的百分比,而不是颜色。除了通过编程生成矩阵,还有其他方法吗? 根据他的建议,我认为seaborn.heatmap()需要一个2D数据数组。但是我有两个1D数组(比如身高和体重,每个数据点都是一个人的(身高,体重)值。代码在这里:),数组值没有特定的顺序。此处的示例代码: plt.hist2d(height, weight, (20, 50), range=np.array([(0, 200), (0, 500)]), cmap

我希望直方图中的每个“单元格”都有一个数字,表示该“单元格”中总点数的百分比,而不是颜色。除了通过编程生成矩阵,还有其他方法吗?

根据他的建议,我认为seaborn.heatmap()需要一个2D数据数组。但是我有两个1D数组(比如身高和体重,每个数据点都是一个人的(身高,体重)值。代码在这里:),数组值没有特定的顺序。此处的示例代码:

plt.hist2d(height, weight, (20, 50), range=np.array([(0, 200), (0, 500)]), cmap=plt.cm.Paired)
plt.colorbar()
plt.show()

您可以使用文本并通过输出循环到规范的
hist2d
,如下所示

import numpy as np
import matplotlib.pyplot as plt

height = [102, 99, 153, 98, 142, 198, 99]
weight = [201, 192, 295, 181, 315, 311, 181]

counts, xedges, yedges, Image = plt.hist2d(height, weight, (20, 50), 
                                           range=np.array([(0, 200), (0, 500)]), 
                                           cmap=plt.cm.Paired, normed=True)

dx = xedges[2]-xedges[1]
dy = yedges[2]-yedges[1]
for i in range(xedges.size-1):
    for j in range(yedges.size-1):
        xb = xedges[i] + 0.25*dx
        yb = yedges[j] + 0.25*dy 
        plt.text(xb, yb, str(np.round(100.*counts[i,j],2)), fontsize=6 )

plt.show()
这就给了,,

也许可以看看这本书来获得一些想法。特别是对于
annot=True
你的意思是这样的:?是的,这样的。但是,由于bin边界是单元格边界,因此可以在图形本身上绘制任何相关线。您是否可以为
高度
重量
添加示例数组?高度=[102,99,153,98,142,198,99],重量=[201,192,295,181,315,311,181]。稍微修改代码:removed normed=True,保留一个总计数,并改为:str(np.round(100.*counts[i,j]/total,2))。是的,这可能更好,我认为
标准化的
是通过直方图区域,而不仅仅是通过计数。