绘制柱状图(四子图) 实验十六 matplotlib数据可视化 第5关

目录

本关任务

所需知识:

我的代码

答案代码实现:

本关任务:根据excel文件”类别销售”工作簿(tbsc/step2/类别销售.xlsx)的烟、零食、饮料、酒工作表的数据,找出销售数量合计最高的三种商品,建立条状图

绘制柱状图(四子图) 实验十六 matplotlib数据可视化 第5关

所需知识:

1) 柱形图绘制、子图绘制、图例设置、横纵坐标参数显示

2) 读取excel文件

3) 相关方法:

plt类:

1) plt.figure(figsize=) #建立画布

2) plt.subplot(a,b,num) #分割子图 a行 b列 操作第num个

3) plt.bar() #建立条形

4) plt.lengend() #设置图例位置

5) plt.text() #显示条形高度

6) plt.xticks() #设置x轴参数

pd类:

1) pd.read_excel(“filename”, sheet_name = )

其他:

1) name.groupby([“name”])[“name”].sum() #sum可以换很多种

2) sorted(name.items(), ket = lambda x:x[1], reverse = ) #按字典值排序并返回

a = {'a':2,'c':3,'b':99}
b = sorted(a.items(),key = lambda x:x[1], reverse = True)
print(b)

#[('b', 99), ('c', 3), ('a', 2)]

我的代码实现:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

def read(name):            #读取excel
    df1 = pd.read_excel("tbsc/step2/类别销售.xlsx",sheet_name=name)
    num = dict(df1.groupby(["商品名称"])["数量"].sum())
    num1 = sorted(num.items(), key=lambda x:x[1], reverse = True)
    x = [i[0] for i in num1[:3]]
    y = [i[1] for i in num1[:3]]
    return [x,y]

#代码开始
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']

x1 = read("烟")[0]
y1 = read("烟")[1]

x2 = read("饮料")[0]
y2 = read("饮料")[1]

x3 = read("零食")[0]
y3 = read("零食")[1]

x4 = read("酒")[0]
y4 = read("酒")[1]

sj = [1,2,3]

plt.figure(figsize=(10,14))

plt.subplot(2,2,1)
plt.title("烟")
plt.bar(x=sj[0] , height=y1[0] , width=0.2, label = x1[0][1:])
plt.bar(x=sj[1] , height=y1[1] , width=0.2, label = x1[1][1:])
plt.bar(x=sj[2] , height=y1[2] , width=0.2, label = x1[2][1:])
plt.legend()                        #图例位置
for a, b in zip(sj, y1):            #柱高度
    plt.text(a, b+1, b)
plt.xticks(sj)                      #x轴显示 1 2 3

plt.subplot(2,2,2)
plt.title("饮料")
plt.bar(x=sj[0] , height=y2[0] , width=0.2, label = x2[0][1:])
plt.bar(x=sj[1] , height=y2[1] , width=0.2, label = x2[1][1:])
plt.bar(x=sj[2] , height=y2[2] , width=0.2, label = x2[2][1:])
plt.legend()
for a, b in zip(sj, y2):
    plt.text(a, b+1, b)
plt.xticks(sj)

plt.subplot(2,2,3)
plt.title("零食")
plt.bar(x=sj[0] , height=y3[0] , width=0.2, label = x3[0][1:])
plt.bar(x=sj[1] , height=y3[1] , width=0.2, label = x3[1][1:])
plt.bar(x=sj[2] , height=y3[2] , width=0.2, label = x3[2][1:])
plt.legend()
for a, b in zip(sj, y3):
    plt.text(a, b+1, b)
plt.xticks(sj)

plt.subplot(2,2,4)
plt.title("酒")
plt.bar(x=sj[0] , height=y4[0] , width=0.2, label = x4[0][1:])
plt.bar(x=sj[1] , height=y4[1] , width=0.2, label = x4[1][1:])
plt.bar(x=sj[2] , height=y4[2] , width=0.2, label = x4[2][1:])
plt.legend()
for a, b in zip(sj, y4):
    plt.text(a, b+1, b)
plt.xticks(sj)

plt.show()
#代码结束
plt.savefig("image5/lbzxt.jpg")

实现结果(右):

大小不对是缩放原因,放缩网页右图会变而左图不会

绘制柱状图(四子图) 实验十六 matplotlib数据可视化 第5关

答案代码实现:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(10,14))
lb=["烟","饮料","零食","酒"]
j=1
for x in lb:
    df=pd.read_excel("tbsc/step2/类别销售.xlsx",sheet_name=x)
    sj=df.groupby("商品名称")["数量"].sum()
    sj.sort_values(ascending=False,inplace=True)
    sj.index=sj.index.str.replace("\t","")
    #此处我是用切片将"\t"切掉的,因为读取excel后前面会有\t
    sp=sj[:3]
    plt.subplot(2,2,j)
    for i in range(0,3):
        plt.bar(x=i*0.5, height=sj[i],width=0.2,label=sj.index[i])
        plt.text(i*0.5,sj[i]+1,sj[i])
        #高度显示要求比柱子高1
    j=j+1
    plt.xticks([0,0.5,1],[1,2,3])
    plt.title(x)
    plt.legend()
#代码结束
plt.savefig("image5/lbzxt.jpg")

四个子图实现过程相似度高,灵活运用循环使代码变简洁。

实现结果:

绘制柱状图(四子图) 实验十六 matplotlib数据可视化 第5关

Original: https://blog.csdn.net/jiangsui_/article/details/128049918
Author: jiangsui_
Title: 绘制柱状图(四子图) 实验十六 matplotlib数据可视化 第5关



相关阅读

Title: python脚本封装成接口且,由前端平台调用

步骤:

1、编写前端平台代码。react语言

2、搭建后端服务(flask轻便),编写服务端代码,封装脚本为接口调用方式,postman调试接口请求OK,达到预期效果。python实现。

注意事项:1)服务端的端口号不与前端 及平台的其他服务重复。

3、前后端联调。

方法:

1)前端调用时,后端服务加调试代码,保证postman传入的参数 与前端传入的参数格式 给接口的是一致的。

2)前端鼠标右键 【检查】可看到 前后端参数传递情况。

注意事项:

1)前后端传入的参数大小写需一致,不然可能拿到的是None。

4、用户使用方便,兼容场景。考虑异常情况。

二、实现

flask启动脚本:

import flask,json,time
from flask import request
import asyncio
from aiokafka import AIOKafkaProducer
from kafkproducer import send_one

loop = asyncio.get_event_loop()
app = flask.Flask(__name__)

@app.route('/kafka_producer', methods=['POST'])
def index():
    json_data = json.loads(request.get_data().decode('utf-8'))
    Topic = json_data.get("Topic")
    KafkaData = json_data.get("KafkaData")
    KafkaCount = json_data.get("KafkaCount")
    KafkaCluster = json_data.get("KafkaCluster")
    #调试使用
    # print("topic=",Topic)
    # print("KafkaData=",KafkaData)
    # print("KafkaCount=",KafkaCount)
    # print("KafkaCluster=",KafkaCluster)

    if Topic and KafkaData and KafkaCount and KafkaCluster:
        res={"msg":"接口调用成功","msg_code":"0000"}
        loop.run_until_complete(send_one(Topic,KafkaData,KafkaCount,KafkaCluster))
        return json.dumps(res, ensure_ascii=False)
    else:
        res={"msg":"接口调用失败,必填项为空","msg_code":"9999"}
        return json.dumps(res,  ensure_ascii=False)

if __name__ == '__main__':
    # app.run()
    app.run(port=1111,debug=True,host='0.0.0.0')

kafka生产者脚本:

import asyncio
import json,time

from aiokafka import AIOKafkaProducer

loop = asyncio.get_event_loop()
now = int(time.time())

async def send_one(Topic,KafkaData,KafkaCount,KafkaCluster):
    producer = AIOKafkaProducer(
        bootstrap_servers=KafkaCluster)
    await producer.start()
    try:
        for i in range(KafkaCount):
            data = {
                "msg_type": 20,
                "context": json.dumps(KafkaData),
                "enqueue_time": now,
            }
            await producer.send_and_wait(Topic, json.dumps(data).encode())
    except Exception as e:
        print(e)
    finally:
        await producer.stop()
        print(json.dumps(data))

3、flask服务搭建

mkdir 项目名称

cd 项目名称

$ python3 -m venv venv
$ . venv/bin/activate
$ pip install Flask

注意最后一步 是在上一步venv启动后实现的

Original: https://blog.csdn.net/xiaoruirui1294/article/details/124045339
Author: 东方129
Title: python脚本封装成接口且,由前端平台调用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/329955/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Sanic框架下部署Pytorch模型

    本文针对业余范围的Pytorch模型部署,类似各位想把自己开发的深度学习模型上线web端demo等等。 大家比较熟悉的Python框架主要有flask,使用flask部署上线深度学…

    Python 2023年1月1日
    045
  • 比正则快N倍的新姿势,用Python替换字符串

    Original: https://www.cnblogs.com/123456feng/p/16084421.htmlAuthor: 蚂蚁ailingTitle: 比正则快N倍的…

    Python 2022年9月3日
    0123
  • Flask 物联网局部应用情景

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

    Python 2023年1月6日
    020
  • Flask自学分享

    最近两个月,学会了微信小程序,学会了Flask,接着又学会了VUE前端开发,学会了docker,gunicorn,nginx部署,独立Web开发的能力终于GET了。 内心的joy,…

    Python 2023年1月4日
    042
  • 1896-2021历届奥运会奖牌榜动态排序(Matplotlib图表动画)

    摘 要 在制作动态排序动画之前,让我们先来看看数据是如何排序的: [En] Before we animate dynamic sorting, let’s take …

    Python 2023年1月14日
    039
  • Nvidia Deepstream极致细节:3. Deepstream Python RTSP视频输出显示

    Nvidia Deepstream极致细节:3. Deepstream Python RTSP视频输出显示 此章节将详细对官方案例: deepstream_test_1_rtsp_…

    Python 2023年1月2日
    052
  • 【Python】pandas的使用——CSV文件、Excel文件、TXT文件之间的转换

    实验:pandas的使用——CSV文件、Excel文件、TXT文件之间的转换 文章目录 实验:pandas的使用——CSV文件、Excel文件、TXT文件之间的转换 * 实验目的:…

    Python 2023年1月7日
    052
  • 用Python抓取网页并解析

    软件版本 python:2.7.12 网页抓取库 网页抓取库为requests, 安装很简单,直接使用pip 网页解析库 网页解析库使用beautifulsoup4,其支持多种ht…

    Python 2022年8月14日
    0119
  • PyQt5(二) python程序打包成.exe文件

    目录 前言 一、安装pyinstaller 二、pyinstaller打包 2.1 pyinstaller打包机制 2.2 单个文件打包 2.3 多个文件打包 三、测试 3.1 打…

    2022年8月24日
    0122
  • tensorflow+keras+python对应的版本

    进入深度学习,我的毕设框架是tensorflow,有很多需要注意的问题,尤其是版本问题,以前的代码都是在tensorflow1的版本中运行,现在已经出来2了,所以安装2,很多版本1…

    Python 2022年12月24日
    093
  • Flask项目创建及数据库增删改查

    创建一个空文件pycharm打开,并创建虚拟环境 一次性安装以下所有:pip install -r req_new.txt Flask==1.1.4 Flask-Caching==…

    Python 2023年1月3日
    027
  • 20212218 实验二《Python程序设计》实验报告

    # 20212218 2021-2022-2 《Python程序设计》实验二报告 课程:《Python程序设计》 班级: 2122 姓名: 林思凡 学号:20212218 实验教师…

    2022年9月3日
    072
  • Python/下载数据

    Python/下载数据 处理CSV文件 * 分析CSV头文件 提取并读取数据 绘制气温图表 使用datetime模块获取日期 添加最低温度折线 给图表区域着色 处理JSON文件 *…

    Python 2023年1月16日
    038
  • Python知识点(史上最全)

    Python期末考试知识点(史上最全) ✅作者简介:大家好我是编程ID📃个人主页:编程ID的csdn博客系列专栏:python💬推荐一款模拟面试、刷题神器👉点击跳转进入网站Pyth…

    Python 2022年12月23日
    038
  • Scrapy框架

    Scrapy是一个为了爬取网站数据,提取数据而编写的应用框架,爬虫的三步:获取网页,解析网页,存储网页都整合成了这个爬虫框架Scrapy框架主要由五大组件组成,它们分别是调度器(S…

    Python 2023年1月26日
    020
  • pytest.main

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

    Python 2023年1月18日
    026
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总