python下matplotlib画画柱状图,折线图,饼图,散点图,误差图,堆积柱状图

matplotlib画柱状图,折线图,饼图,散点图,误差图,堆积柱状图

首先导入maplotlib画图函数

import matplotlib.pyplot as plt

先在python导入我们的excel数据:
在这里插入图片描述
接下来进入主题:

1.柱状图

以上表为例子,我们以姓名为横坐标,工资为纵坐标画出柱状图:
代码如下:

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.散点图

"""散点图"""
plt.rcParams['font.sans-serif'] = ['SimHei']     #可以显示中文
fig = plt.subplots(figsize=(10, 6))
x = np.array(data['姓名'])
y = np.array(data['工资'])
plt.scatter(x, y)                                #scatter()函数画散点图
plt.show()

效果入下:
在这里插入图片描述

3.折线图

知道条形统计图之后折线其实大同小异:
代码如下:

"""折线图"""
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()                                     #显示

效果图简单就不展示了

4.饼图

4.1普通饼图(显示比例)

展示各个部门的经济比例图:
方法很多,我的方法是先把各部门的总工资先计算出来,再画图
画图的关键就是函数plt.pie()

"""饼图"""
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()

效果图:
在这里插入图片描述

4.2可显示具体数值的饼图

这个难度稍微大一点
代码展示:


"""高级饼图"""
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()

效果图如下:
在这里插入图片描述

5.散点图

直接上代码,用的表格是一样的

"""散点图"""
plt.rcParams['font.sans-serif'] = ['SimHei']     #可以显示中文
fig = plt.subplots(figsize=(10, 6))
x = np.array(data['姓名'])
y = np.array(data['工资'])
plt.scatter(x, y)                                #scatter()函数画散点图
plt.show()

效果图:
在这里插入图片描述

6.误差图

代码如下:

"""绘制误差棒图"""
plt.rcParams['font.sans-serif'] = ['SimHei']                       #可以显示中文
error = []
for i in range(len(data['工资'])):                                  #把误差搞出来,range才能迭代,这里可以看出误差是和均值工资的差距
    a = data['工资'][i] - np.sum(data['工资'])/len(data['工资'])
    error.append(a)
y = data['工资']
x = data['姓名']
y.plot(yerr=error)
plt.show()

效果图如下:
在这里插入图片描述

7.堆积柱状图

其实很简单,注意以什么为底画就好,理解性画图
人狠话不多,直接上图
以下是源数据在这里插入图片描述

博主最近在服装公司实习,要观察各月,各品类较为直观的的变化。
上代码:

import pandas as pd                      #导入pandas库
import matplotlib.pyplot as plt          #导入画图的库
excel_file ='./堆积柱状图.xlsx'
data = pd.read_excel(excel_file, index_col='衣服类型')

"""堆积柱状图"""
plt.rcParams['font.sans-serif'] = ['SimHei']                       #可以显示中文
d1 = data['T恤']
d2 = data['连衣裙']
d3 = data['套装']
d4 = data['内衣']
d5 = data['内裤']
d6 = data['丝巾']

fig, axs = plt.subplots(1, 1, figsize=(14, 7))   #画一个图就好了

axs.bar(data.index, d1, width=0.4, label='T恤')     #index作横坐标,先画d1
axs.bar(data.index, d2, width=0.4, bottom=d1, label='连衣裙')  #以d1为低画d2
axs.bar(data.index, d3, width=0.4, bottom=d2+d1, label='套装') #以d1+d2为底,画d3
axs.bar(data.index, d4, width=0.4, bottom=d3+d2+d1, label='内衣')   #同理
axs.bar(data.index, d5, width=0.4, bottom=d4+d3+d2+d1, label='内裤')
axs.bar(data.index, d6, width=0.4, bottom=d5+d4+d3+d2+d1, label='丝巾')
axs.set_ylim(0, 12000)        #y轴最高点
axs.set_xticklabels(data.index, rotation=90)
axs.legend(loc='upper left',  shadow=True)

plt.show() #画出来

最后就是上图!
在这里插入图片描述
帅气逼格高的堆积柱状图来也,下一次更新讲解如何加数值。

接下来还有matplotlib画的各种图形,会积极更新的,建议收藏

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值