使用Python

时间:2017-09-05 16:33:24

标签: python histogram

我有一个矩阵A(20374,1)。 我想使用这些数据绘制直方图(DVH)。

我的代码如下。

edge_A = np.linespace(0, max(A), 1000)
x_A = np.linespace(0.5*max(A)/1000, max(A), 1000)
n_A = np.histogram(A, bins=edge_A)
y_A = 1 - np.cumsum(n_A / len(A), axis=0)
plt.figure()
plt.plot(x_A, y_A)
plt.show()

但是,这段代码不适用于y_A,因为n_A是元组而len(A)是int,所以无法计算。 另外,我认为n_A的行不正确。

我该如何解决这个问题。

我在这部分中附加了matlab代码,运行良好。

edge_A = 0:max(A)/1000:max(A);
x_A = 0.5*max(A)/1000:max(A)/1000:max(A);
n_A = hiscounts(A, edge_A)
y_A = 1 - cumsum(n_A/length(A));
plot(x_A, y_A);

2 个答案:

答案 0 :(得分:0)

问题是np.histogram将两个值作为元组返回:

private GoogleMap mGoogleMap;
// Create a LatLngBounds that includes Australia.
private LatLngBounds YOUR_CITY_OR_COUNTRY = new LatLngBounds(
new LatLng(-23, -66), new LatLng(-43, -68));

// Set the camera to the greatest possible zoom level that includes the
// bounds
mGoogleMap.setLatLngBoundsForCameraTarget(YOUR_CITY_OR_COUNTRY);

这似乎有效:

Returns
-------
hist : array
    The values of the histogram. See `density` and `weights` for a
    description of the possible semantics.
bin_edges : array of dtype float
    Return the bin edges ``(length(hist)+1)``.

使用matplotlib更容易:

A = np.random.rand(100000)
edge_A = np.linspace(0, max(A), 1000)
x_A = np.linspace(0.5*max(A)/1000, max(A), 1000)
(n_A, _) = np.histogram(A, bins=edge_A,)
y_A = 1 - np.cumsum(n_A / len(A), axis=0)
plt.figure()
plt.plot(x_A[1:], y_A)
plt.show()

答案 1 :(得分:0)

如果您只想绘制数据,可以直接使用matplotlib:

import numpy as np
import matplotlib.pylab as plt

a = np.random.normal(loc=0.0, scale=1.0, size=int(1e4))
plt.figure()
plt.hist(a)
plt.show()

enter image description here