已知各城市十年的国民收入,用hist函数生成直方图
时间: 2024-03-18 12:43:48 浏览: 121
好的,以下是使用 hist 函数绘制各城市十年国民收入的直方图的步骤:
1. 准备数据:首先,需要准备需要绘制的数据,这里我们以各城市十年的国民收入数据为例。可以使用以下代码将数据导入 R:
```
income <- read.csv("income.csv")
```
2. 数据处理:将数据按照城市进行分组,并计算每个城市十年的平均国民收入。可以使用以下代码实现:
```
library(dplyr)
income_avg <- income %>%
group_by(city) %>%
summarize(avg_income = mean(income))
```
3. 绘制直方图:使用 hist 函数绘制直方图,例如:
```
hist(income_avg$avg_income, breaks = seq(0, 300000, by = 10000),
col = "steelblue", xlab = "Average Income", ylab = "Frequency",
main = "Histogram of Average Income by City (2011-2020)")
```
其中,`income_avg$avg_income` 是上一步处理后的平均收入数据,`breaks` 是直方图柱子的边界,`col` 是柱子的填充颜色,`xlab` 是 x 轴标签,`ylab` 是 y 轴标签,`main` 是图表标题。
以上就是使用 hist 函数绘制各城市十年国民收入的直方图的基本步骤。
相关问题
灰度直方图统计不使用已知函数
好的,以下是不使用已知函数完成灰度直方图统计的代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
# 读取图片并转为灰度图像
img = plt.imread("image.png")
gray = np.dot(img[...,:3], [0.299, 0.587, 0.114])
# 统计灰度直方图
hist = np.zeros((256,), dtype=int)
for i in range(gray.shape[0]):
for j in range(gray.shape[1]):
hist[int(gray[i,j])] += 1
# 绘制灰度直方图
x = np.arange(256)
plt.bar(x, hist, width=1)
plt.show()
```
其中,使用`np.zeros`函数创建一个长度为256的数组`hist`,用于存储灰度直方图的统计结果,数组的每个元素都初始化为0。接下来使用两个for循环遍历灰度图像的每个像素,然后根据每个像素的灰度值将`hist`数组中相应的元素加1,最终得到灰度直方图的统计结果。最后使用`plt.bar`函数绘制灰度直方图。
灰度直方图均衡化不使用已知函数
好的,以下是不使用已知函数完成灰度直方图均衡化的代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
# 读取图片并转为灰度图像
img = plt.imread("image.png")
gray = np.dot(img[...,:3], [0.299, 0.587, 0.114])
# 统计灰度直方图
hist = np.zeros((256,), dtype=int)
for i in range(gray.shape[0]):
for j in range(gray.shape[1]):
hist[int(gray[i,j])] += 1
# 计算累计分布函数
cdf = np.zeros((256,), dtype=float)
cdf[0] = hist[0] / (gray.shape[0] * gray.shape[1])
for i in range(1, 256):
cdf[i] = cdf[i-1] + hist[i] / (gray.shape[0] * gray.shape[1])
# 灰度直方图均衡化
equalized = np.zeros(gray.shape, dtype=int)
for i in range(gray.shape[0]):
for j in range(gray.shape[1]):
equalized[i,j] = int(cdf[int(gray[i,j])] * 255)
# 绘制均衡化后的图像和灰度直方图
x = np.arange(256)
plt.imshow(equalized, cmap='gray')
plt.show()
hist_eq = np.zeros((256,), dtype=int)
for i in range(equalized.shape[0]):
for j in range(equalized.shape[1]):
hist_eq[equalized[i,j]] += 1
plt.bar(x, hist_eq, width=1)
plt.show()
```
其中,与上面的代码实现相似,首先使用两个for循环遍历灰度图像的每个像素,根据每个像素的灰度值统计灰度直方图。接下来,计算灰度直方图的累计分布函数,再使用两个for循环遍历灰度图像的每个像素,根据累计分布函数将灰度值映射到[0, 255]的范围内,最终得到均衡化后的灰度图像。最后使用`plt.imshow`和`plt.bar`函数绘制均衡化后的图像和灰度直方图。
阅读全文