直方图的使用与操作详解
立即解锁
发布时间: 2025-08-19 01:19:34 阅读量: 27 订阅数: 21 AIGC 


Java平台上的数值计算与数据分析
# 直方图的使用与操作详解
## 1. 一维直方图的特性
一维直方图是数据可视化和分析中常用的工具,其特性对于理解数据分布至关重要。以下是一些常见的特性及获取方法:
- **中位数和标准差(RMS)**:可通过`h1.mean()`和`h1.rms()`方法获取。
```python
d = h1.mean()
d = h1.rms()
```
- **条目数量**:有多种方法可获取不同范围的条目数量。
```python
i = h1.allEntries() # 所有条目
i = h1.entries() # 范围内的条目数量
i = h1.extraEntries() # 下溢和上溢条目
i = h1.getUnderflow() # 下溢条目
i = h1.getOverflow() # 上溢条目
```
- **熵**:熵是一个有用的特性,可通过`h1.getEntropy()`方法获取。
```python
print " Entropy =", h1.getEntropy()
```
| 方法 | 返回值 | 定义 |
| --- | --- | --- |
| allEntries() | i | 所有条目的数量 |
| binCenter(i) | d | 第i个bin的中心 |
| binCenters() | a | 所有bin的中心 |
| binEntries() | a | 所有bin中的条目 |
| binEntries(i) | i | 第i个bin中的条目 |
| binError(i) | d | 第i个bin中条目的误差 |
| binErrors() | a | 所有条目的误差 |
| binHeight(i) | d | 第i个bin的高度 |
| binHeights() | a | 所有条目的高度 |
| binLowerEdge(i) | d | 第i个bin的下边缘 |
| binLowerEdges() | a | 所有bin的下边缘 |
| binMean(i) | d | 第i个bin中的平均值 |
| binRms(i) | a | 第i个bin中的RMS值 |
| binUpperEdge(i) | d | 第i个bin的上边缘 |
| binUpperEdges() | d | 所有bin的上边缘 |
| entries() | i | 范围内的条目数量 |
| extraEntries() | i | 范围外的条目数量 |
| findBin(d) | i | 根据坐标查找bin编号 |
| getDensity() | H1D | 概率密度 |
| getEntropy() | d | 直方图的熵 |
| getMax() | d | bin的最大值 |
| getMin() | d | bin的最小值 |
| getOverflow() | i | 上溢条目 |
| getOverflowlowHeight() | d | 上溢高度 |
| getProbability() | H1D | 概率分布 |
| getTitle() | text | 获取直方图标题 |
| getUnderflowHeight() | d | 下溢高度 |
| getUnderflow() | i | 下溢条目 |
| getValues(i) | a | 包含bin、高度和误差的数组(i = 0为bin平均值,i = 1为bin中心) |
| integral(i1, i2) | d | 在i1和i2个bin之间积分 |
| integralRegion(x1, x2) | d | 积分区域[x1, x2] |
| maxBinHeight() | d | 最大bin高度 |
| mean() | d | 直方图的平均值 |
| minBinHeight() | d | 最小bin高度 |
| rms() | d | 直方图的RMS |
| sumAllBinHeights() | d | 所有bin高度的总和 |
注:“i”表示整数,“d”表示双精度值,“a”对应一维数组,“aa”表示二维数组。
## 2. 初始化和填充方法
### 2.1 固定bin大小的初始化
可以使用简单的构造函数创建直方图,然后通过一系列方法设置其特性。
```python
h1 = H1D(" Title ")
h1.setMin(min)
h1.setMax(max)
h1.setBins(bins)
```
这些方法也可用于重新定义已创建直方图的特性。
### 2.2 可变bin大小的初始化
通过传递包含bin边缘的列表来创建可变bin大小的直方图。
```python
bins = [0, 10, 100, 1000]
h1 = H1D(" Title ", bins)
```
这种构造函数适用于数据呈钟形或下降分布的情况,可在某些区域(尾部)增加bin大小以减少统计波动。
### 2.3 填充方法
- **基本填充**:使用`fill(d)`方法填充直方图,默认权重为1。
```python
h1.fill(d)
```
- **带权重填充**:可通过`fill(d, w)`方法为每个值分配权重。
```python
h1.fill(d, w)
```
- **批量填充**:为提高效率,可使用`fill(list)`或`fill(list, wlist)`方法从列表中填充直方图。
```python
h1.fill(list)
h1.fill(list, wlist)
```
- **使用PND数组填充**:也可使用PND多维数组填充直方图。
```python
h1.fill(pnd)
```
- **使用与bin大小成反比的权重填充**:使用`fillInvBinSizeWeight(d)`方法,该方法在直方图具有不规则binning时也适用。
```python
h1.fillInvBinSizeWeight(d)
```
- **从外部源设置bin内容**:可通过`setContents(values, errors)`和`setMeanAndRms(mean, rms)`方法设置bin内容和全局直方图特性。
```python
h1.setContents(values, errors)
h1.setMeanAndRms(mean, rms)
```
### 2.4 从函数创建直方图
可从函数创建直方图对象,示例如下:
```python
from java.awt import Color
from jhplot import *
c1 = HPlot(" Canvas ")
c1.visible();
c1.setAutoRange()
c1.setNameX("X");
c1.setNameY("Y")
f1 = F1D("2* exp(-x*x /50) + sin(pi*x)/x", -2.0, 5.0)
c1.draw(f1)
h = f1.getH1D(" Histogram ", 500, 1, 5) # 500个bin,范围在1到5之间
h.setFill(1)
h.setFillColor(Color.red);
h.setColor(Color.red)
c1.draw(h)
```
创建的直方图不包含通常的事件统计信息,只是输入函数的反映。
## 3. 访问直方图值
一维直方图可通过以下方便的方法进行可视化检查:
- `toString()`:将H1D直方图转换为字符串。
- `print()`:打印直方图。
- `toTable()`:将直方图显示为表格。
访问直方图值的重要H1D方法已在前面的表格中列出。当用于填充直方图的权重设置为1时,bin高度和条目数量相同。可使用`toTable()`方法将所有直方图属性传递到弹出表格中进行可视化检查。
## 4. 积分
### 4.1 基本积分
通过`integral(i1, i2)`方法对特定bin区域的高度求和。
```pyth
```
0
0
复制全文
相关推荐









