📜  如何在Python创建 Ogive 图?

📅  最后修改于: 2022-05-13 01:55:37.262000             🧑  作者: Mango

如何在Python创建 Ogive 图?

在本文中,我们将创建一个Ogive Graph。 ogive 图也可以称为累积直方图,该图用于确定数据集中位于特定值之上或之下的值的数量。类别间隔绘制在 x 轴上,而累积频率绘制在 y 轴上。这些点绘制在图形上并由线连接。

NumPy 有一个名为histogram()的函数以图形方式表示特定设置范围内的数据频率。直方图函数返回两个值,第一个是频率,存储在值中,第二个是 bin 值或数据集中数字所在的区间,它存储在基本变量中。

在此之后,我们将计算累积总和,这可以使用cumsum()函数轻松完成,它返回沿特定轴的累积总和。最后,我们将使用plot()函数绘制图形并传递 base 作为 x 轴值和 cumsum 作为 y 轴值。我们可以使用标记、颜色和线条属性来格式化图形。

示例 1:(不仅仅是 Ogive 图)

超过 ogive 图显示了大于类间隔的值的数量。结果图显示了类间隔之间的值数。例如- 0-10,10-20 等等。让我们拿一个数据集,我们现在将绘制它不仅仅是 ogive 图 - [22,87,5,43,56,73, 55,54,11,20,51,5,79,31,27]。



表示间隔、频率和累积频率(小于)的表格-

Class IntervalFrequencyCumulative Frequency
     0-10      2                 2
    10-20      1                 3
    20-30      3                 6
    30-40      1                 7
    40-50      1                 8
    50-60      4                12
    60-70      0                12
    70-80      2                14
    80-90      1                15

方法:

  • 导入模块(matplotlib 和 numpy)。
  • 计算数据的频率和累积频率。
  • 使用 plot()函数绘制它。
Python3
# importing modules
import numpy as np
import matplotlib.pyplot as plt
  
# creating dataset
data = [22, 87, 5, 43, 56, 73, 55, 54, 11, 20, 51, 5, 79, 31, 27]
  
# creating class interval
classInterval = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
  
# calculating frequency and class interval
values, base = np.histogram(data, bins=classInterval)
  
# calculating cumulative sum
cumsum = np.cumsum(values)
  
# plotting  the ogive graph
plt.plot(base[1:], cumsum, color='red', marker='o', linestyle='-')
  
# formatting
plt.title('Ogive Graph')
plt.xlabel('Marks in End-Term')
plt.ylabel('Cumulative Frequency')


Python3
# importing modules
import numpy as np
import matplotlib.pyplot as plt
  
# creating dataset
data = [44, 27, 5, 2, 43, 56, 77, 53, 89, 54, 11, 23, 51, 5, 79, 25, 39]
  
# creating class interval
classInterval = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
  
# calculating frequency and intervals
values, base = np.histogram(data, bins=classInterval)
  
# calculating cumulative frequency
cumsum = np.cumsum(values)
  
# reversing cumulative frequency
res = np.flipud(cumsum)
  
# plotting ogive
plt.plot(base[1:], res, color='brown', marker='o', linestyle='-')
  
# formatting the graph
plt.title('Ogive Graph')
plt.xlabel('Marks in End-Term')
plt.ylabel('Cumulative Frequency')


输出:

示例 2:(小于 Ogive Graph)

在这个例子中,我们将绘制小于 Ogive 图,它将显示小于类间隔的值。数据集:[44,27,5,2,43,56,77,53,89,54,11,23, 51,5,79,25,39]

表表示间隔、频率和累积频率(超过)-

Class IntervalFrequencyCumulative Frequency
     0-10     3               17
    10-20     1              16
    20-30     3              14
    30-40     1              14
    40-50     2              10
    50-60     4               8
    60-70     0               7
    70-80     2               4
    80-90     1               3

方法与上述相同,只是我们将计算的累积总和将使用 numpy 库中存在的flipud()函数反转。

蟒蛇3

# importing modules
import numpy as np
import matplotlib.pyplot as plt
  
# creating dataset
data = [44, 27, 5, 2, 43, 56, 77, 53, 89, 54, 11, 23, 51, 5, 79, 25, 39]
  
# creating class interval
classInterval = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
  
# calculating frequency and intervals
values, base = np.histogram(data, bins=classInterval)
  
# calculating cumulative frequency
cumsum = np.cumsum(values)
  
# reversing cumulative frequency
res = np.flipud(cumsum)
  
# plotting ogive
plt.plot(base[1:], res, color='brown', marker='o', linestyle='-')
  
# formatting the graph
plt.title('Ogive Graph')
plt.xlabel('Marks in End-Term')
plt.ylabel('Cumulative Frequency')

输出: