matplotlib画柱状图,折线图,饼图
首先导入maplotlib画图函数
1 | import matplotlib.pyplot as plt |
先在python导入我们的excel数据:
接下来进入主题:
1.柱状图
以上表为例子,我们以姓名为横坐标,工资为纵坐标画出柱状图:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import pandas as pd #导入pandas库 import matplotlib.pyplot as plt #导入画图的库 excel_file = './try.xlsx' #导入excel数据 data = pd.read_excel(excel_file) #读入数据 """柱状图""" plt.rcParams['font.sans-serif'] = ['SimHei'] #可以显示中文 plt.figure(figsize=(10, 6)) #画图,大小可自己设置 plt.ylabel('工资(元)') #横纵坐标的名称设置 plt.xlabel('姓名') x = data['姓名'] #横纵坐标的数据导入 y = data['工资'] plt.bar(x, y) #东西放进bar里(当成一个盒子理解) plt.title('柱状图演示') #标题 plt.show() |
结果:
2.折线图
知道条形统计图之后折线其实大同小异:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 | """折线图""" import pandas as pd #导入pandas库 import matplotlib.pyplot as plt #导入画图的库 excel_file = './try.xlsx' #导入excel数据 data = pd.read_excel(excel_file) #读入数据 plt.rcParams['font.sans-serif'] = ['SimHei'] #可以显示中文 plt.figure(figsize=(10, 6)) #画图,大小可自己设置 plt.plot(data['姓名'], data['工资'], color='blue', label='线的名称', marker='s') #marker折线形状 plt.legend() #显示图例,这里指显示‘label='线的名称' plt.ylabel('工资(元)') plt.show() #显示 |
效果图简单就不展示了
3.饼图
3.1普通饼图(显示比例)
展示各个部门的经济比例图:
方法很多,我的方法是先把各部门的总工资先计算出来,再画图
画图的关键就是函数plt.pie()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | """饼图""" import pandas as pd #导入pandas库 import matplotlib.pyplot as plt #导入画图的库 excel_file = './try.xlsx' #导入excel数据 data = pd.read_excel(excel_file) #读入数据 plt.rcParams['font.sans-serif'] = ['SimHei'] #可以显示中文 plt.figure(figsize=(8, 6)) #画图,大小可自己设置 bumenshuju = {'部门': ['A', 'B', 'C'], '部门工资': [sum(data.loc[data['部门'] == 'A', '工资']), sum(data.loc[data['部门'] == 'B', '工资']), sum(data.loc[data['部门'] == 'C', '工资'])]} dataframe_1 = pd.DataFrame(bumenshuju) # print(dataframe_1) labels = dataframe_1['部门工资'] x = dataframe_1['部门'] plt.pie(labels, labels=x, autopct='%1.1f%%') plt.legend('A''B''C') plt.title('部门的工资分布') plt.axis('equal') plt.show() |
效果图:
3.2可显示具体数值的饼图
这个难度稍微大一点
代码展示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | """高级饼图""" import pandas as pd #导入pandas库 import numpy as np import matplotlib.pyplot as plt excel_file = './try.xlsx' #导入excel数据 data = pd.read_excel(excel_file) #读入数据 plt.rcParams['font.sans-serif'] = ['SimHei'] #可以显示中文 fig, ax = plt.subplots(figsize=(8, 6), subplot_kw=dict(aspect="equal")) #画布的基本设置 bumenshuju = {'A部门': sum(data.loc[data['部门'] == 'A', '工资']), #构建各部门的工资字典,然后转成dataframe表格类型 'B部门': sum(data.loc[data['部门'] == 'B', '工资']), 'C部门': sum(data.loc[data['部门'] == 'C', '工资'])} data_1 = [bumenshuju[i] for i in bumenshuju.keys()] #即工资总数 index = [i for i in bumenshuju.keys()] #部门 def func(pct, allvals): #返回饼图里显示的一串字符 absolute = int(pct/100.*np.sum(allvals)) return "{:.1f}%\n({:d} 元)".format(pct, absolute) wedges, texts, autotexts = ax.pie(data_1, autopct=lambda pct: func(pct, data_1), textprops=dict(color="w")) #设置饼图的东西 ax.legend(wedges, index, #图例的设置,可以自己设置 title="部门", loc="center left", bbox_to_anchor=(1, 0, 0.5, 1)) ax.set_title("各个部门工资比例和具体工资总数") #标题 plt.show() |
效果图如下:
以上就是全部展示啦,有帮助到您,请点个赞哦,谢谢