counter计数后排序并绘制直方图
时间: 2023-08-28 20:04:33 浏览: 46
假设你已经有一个包含数据的列表,可以使用Python内置的`Counter`类来计算每个元素出现的次数,并将结果排序。然后,使用Matplotlib库绘制直方图。
以下是一个简单的示例代码:
```python
from collections import Counter
import matplotlib.pyplot as plt
# 假设这是你的数据
data = [1, 2, 3, 3, 3, 4, 4, 5, 5, 5, 5]
# 使用Counter计数
counter = Counter(data)
# 按照数量从大到小排序
sorted_data = sorted(counter.items(), key=lambda x: x[1], reverse=True)
# 获取排序后的元素和计数
sorted_elements = [x[0] for x in sorted_data]
sorted_counts = [x[1] for x in sorted_data]
# 绘制直方图
plt.bar(sorted_elements, sorted_counts)
# 显示图形
plt.show()
```
输出结果将会是一个直方图,横轴是数据元素,纵轴是元素出现的次数。可以根据实际情况调整代码中的数据和参数。
相关问题
python 输出一列中相同单元格的值出现次数并绘制直方图
假设要统计一列数据中相同单元格的值出现次数,并绘制直方图,可以按照以下步骤实现:
1. 读取数据并存储在列表中。
2. 使用Counter函数统计每个元素的出现次数。
3. 将统计结果转换为字典形式,并按照出现次数从大到小排序。
4. 使用Matplotlib库中的pyplot模块绘制直方图。
以下是样例代码:
```python
import matplotlib.pyplot as plt
from collections import Counter
# 读取数据并存储在列表中
data = []
with open('data.txt', 'r') as f:
for line in f.readlines():
data.append(float(line.strip()))
# 使用Counter函数统计每个元素的出现次数
counter = Counter(data)
# 将统计结果转换为字典形式,并按照出现次数从大到小排序
result = dict(sorted(counter.items(), key=lambda item: item[1], reverse=True))
# 输出每个元素的出现次数
for key, value in result.items():
print(key, value)
# 绘制直方图
plt.bar(result.keys(), result.values())
plt.show()
```
其中,假设数据存储在data.txt文件中,每行一个元素。可以根据实际情况进行修改。
利用Python对/连接的中文字符分词,并统计分词后的频数,并将该频数从大到小排序后绘制出直方图,并设置图名为电影类型频数直方图
针对您的问题,可以在上述代码的基础上,添加代码对频数进行排序,并按照从大到小的顺序绘制直方图。具体实现如下:
```python
import jieba
from collections import Counter
import matplotlib.pyplot as plt
text = "这是一段中文文本,用于测试中文分词和频数统计的功能。"
# 对文本进行分词
seg_list = jieba.cut(text)
# 统计分词后的频数
word_counts = Counter(seg_list)
# 对频数进行排序
word_counts = dict(sorted(word_counts.items(), key=lambda x: x[1], reverse=True))
# 绘制直方图
plt.bar(word_counts.keys(), word_counts.values())
plt.xticks(rotation=90)
plt.title('电影类型频数直方图')
plt.show()
```
运行上述代码,会弹出一个窗口显示绘制的直方图,并将图名设置为“电影类型频数直方图”。
注意,由于中文字符在直方图中可能会出现乱码问题,需要在代码开头添加以下代码解决:
```python
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
```
这段代码会将字体设置为中文SimHei,并解决负号乱码问题。