python读取excel绘制柱状图_python读取excel制作柱状图和词云图片

该博客介绍了如何使用python的matplotlib、xlrd和wordcloud库从Excel文件中读取数据并生成柱状图和词云。首先,xlrd库用于读取Excel文件,然后matplotlib绘制横向柱状图展示数据分布,最后wordcloud生成词云图。在绘图过程中遇到了柱状图标签乱码问题,通过调整字体设置解决了问题。完整代码示例中,展示了从Excel的第一列数据生成柱状图和词云的具体步骤。
摘要由CSDN通过智能技术生成

问题描述

需要将excel中的一列内容转换成柱状图和词云,所以用到了matplotlib/xlrd/wordcloud三个库来解决问题

xlrd:读取excel文件

matplotlib:画柱状图

wordcloud:生成词云

具体步骤

xlrd读取文件:

import xlrd

def start_generate():

path = "test.xlsx"

data = xlrd.open_workbook(path)

sheet1 = data.sheet_by_name('Sheet1') # Sheet1 左下角的sheet

list1 = sheet1.col_values(0) # 第一列的数据列表

matplotlib:画柱状图

import matplotlib.pyplot as plt

def draw_from_dict(dicdata, RANGE):

#dicdata:字典的数据。

#RANGE:截取显示的字典的长度。

by_value = sorted(dicdata.items(),key = lambda item:item[1],reverse=True) # 对字典进行排序

x = []

y = []

for d in by_value:

x.append(d[0])

y.append(d[1])

plt.barh(x[0:RANGE], y[0:RANGE]) # 横向柱状图

plt.tight_layout() # 左侧显示不全,使用该函数

plt.savefig('plt.png') # 保存

plt.show()

wordcloud:词云

from wordcloud import WordCloud

def draw_from_list(lis): # 传入的list

text = ' '.join(lis)

wordcloud = WordCloud(background_color='white',

max_words=300,

font_path="Kai.ttf", # 当前目录下中文楷体 结尾有下载

width=1600,

height=1000).generate(text)

wordcloud.to_file("WordCloud.png")

完整代码(完成的是对第一列数据的操作,需要其他列数据自行修改)

import xlrd

import matplotlib.pyplot as plt

from wordcloud import WordCloud

def draw_from_list(lis):

text = ' '.join(lis)

wordcloud = WordCloud(background_color='white',

max_words=300,

font_path="Kai.ttf",

width=1600,

height=1000).generate(text)

wordcloud.to_file("WordCloud.png")

def draw_from_dict(dicdata, RANGE):

#dicdata:字典的数据。

#RANGE:截取显示的字典的长度。

by_value = sorted(dicdata.items(),key = lambda item:item[1],reverse=True)

x = []

y = []

for d in by_value:

x.append(d[0])

y.append(d[1])

plt.barh(x[0:RANGE], y[0:RANGE])

plt.tight_layout()

plt.savefig('test.png')

plt.show()

def start_generate():

path = "test.xlsx"

data = xlrd.open_workbook(path)

sheet1 = data.sheet_by_name('Sheet1')

list1 = sheet1.col_values(0)

dic = dict()

for i in list1:

val = dic.get(i)

if val:

dic[i] = val+1

else:

dic[i] = 1

draw_from_list(list1)

draw_from_dict(dic, len(dic))

if __name__ == '__main__':

start_generate()

遇到的问题

开始生成柱状图的时候,ylable全是乱码,通过这个链接解决了(注意去掉对应配置的'#',最后一步rebuild很重要!)

下载链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值