新能源汽车可视化大屏数据展示系列之十二的汽车品牌销量玫瑰图实战

举报
tea_year 发表于 2025/01/07 22:10:43 2025/01/07
【摘要】 新能源汽车大屏可视化实训技术通过集成Django、Vue和ECharts、DataV等技术,实现了对新能源汽车数据的全面展示与分析。系统利用爬虫技术获取各大品牌的销售数据,存储于MySQL数据库中,并通过ECharts进行多维度的可视化展示,包括车系销量排名、投诉信息、降价排行等。该技术不仅提升了数据的直观性和可操作性,还为市场研究、企业决策提供了重要支持,推动了新能源汽车行业的智能化发展。...


新能源汽车大屏可视化实训技术通过集成Django、Vue和ECharts、DataV等技术,实现了对新能源汽车数据的全面展示与分析。系统利用爬虫技术获取各大品牌的销售数据,存储于MySQL数据库中,并通过ECharts进行多维度的可视化展示,包括车系销量排名、投诉信息、降价排行等。该技术不仅提升了数据的直观性和可操作性,还为市场研究、企业决策提供了重要支持,推动了新能源汽车行业的智能化发展。  

任务目标

           实现汽车数据的饼图渲染效果

操作实践步骤

       1.前端代码

左下前端代码\big-screen-vue-datav-master\src\components\echart\centerLeft\centerLeft1Chart

<template>
  <div>
    <!-- <Chart :cdata="cdata" /> -->
     <!-- 增加的代码,直接嵌入echarts代码 -->
      <div ref="chart" style="width: 300px;height: 340px;" v-bind:key="cdata.seriesData[0][0]"></div>
  </div>
</template>

<script>
// import Chart from './chart.vue';
export default {
  data () {
    return {
      currentIndex:0,
      cdata: {
        xData: ["data1", "data2", "data3", "data4", "data5", "data6"],
        seriesData: [
          { value: 10, name: "data1" },
          { value: 5, name: "data2" },
          { value: 15, name: "data3" },
          { value: 25, name: "data4" },
          { value: 20, name: "data5" },
          { value: 35, name: "data6" }
        ]
      }
    }
  },
  components: {
    // Chart,
  },
  async mounted () { 
    //第一次代码 ,第二次的时候,注释
    // this.initChart()

    //第二次代码
    const res=await this.$http.get('myApp/centerLeft')
    this.$set(this.cdata,'seriesData',res.data.lastCakeList)
    console.log(res)
  },
  updated(){
    this.initChart()
    this.loopAnimation()
  },
  methods: {
    initChart(){
      this.myChart=this.$echarts.init(this.$refs.chart)
      const option={
        color: [
            "#37a2da",
            "#32c5e9",
            "#9fe6b8",
            "#ffdb5c",
            "#ff9f7f",
            "#fb7293",
            "#e7bcf3",
            "#8378ea"
          ],
          tooltip: {
            trigger: "item",
            formatter: "{a} <br/>{b} : {c} ({d}%)"
          },
          toolbox: {
            show: true
          },
          calculable: true,
          legend: {
            orient: "horizontal",
            icon: "circle",
            bottom: 0,
            x: "center",
            data: this.cdata.seriesData.map(item=>item.name),
            textStyle: {
              color: "#fff"
            }
          },
          series: [
            {
              name: "销量总占比",
              type: "pie",
              radius: [20, 80],
              roseType: "area",
              center: ["50%", "40%"],
              data: this.cdata.seriesData,
              emphasis:{
                itemStyle:{
                  shadowBlur:10,
                  shadowOffsetX:0,
                  label:{
                    show:true
                  }
                }
              }
            }
          ]
        
      };
         this.myChart.setOption(option);
      },
    loopAnimation(){
      setInterval(() => {
        this.myChart.dispatchAction({
          type:'downplay',
          seriesIndex:0,
          dataIndex:this.currentIndex
        });
        this.currentIndex=(this.currentIndex+1)%this.cdata.seriesData.length;

        this.myChart.dispatchAction({
          type:'highlight',
          seriesIndex:0,
          dataIndex:this.currentIndex
        })
      },2000)
    }
    }  
}
</script>

<style lang="scss" scoped>
</style>

       2.pycharm下,继续修改myapp下的urls.py

from  myApp import views
urlpatterns=[
    path("center/",views.center,name='center'),
    path("centerLeft/",views.centerLeft,name='centerLeft'),
    path("bottomLeft/",views.bottomLeft,name='bottomLeft'),
]

       3.在pycharm下,在utils下的新建getCenterLeftData.py

#获取中左数据的文件函数
import json
import time
from .getPublicData import *

#定义一个中左的函数
def getCakeBrandData():
    cars=list(getAllCars())
    carsVolume={}
    for car in cars:
        if carsVolume.get(car.brand,-1)==-1:
            carsVolume[car.brand]=int(car.saleVolume)
        else:
            carsVolume[car.brand]+=int(car.saleVolume)
    carsVolume=sorted(carsVolume.items(),key=lambda x:x[1],reverse=True)
    # carsVolume=sorted(zip(carsVolume.values(),carsVolume.keys()),reverse=True)
    # print(carsVolume)

    #转换为{}格式
    sortDict={car[0]:car[1] for car in carsVolume}
    lastCakeList=[]
    for k,v in sortDict.items():
        lastCakeList.append({
            'name':k,
            'value':v
        })
    # print(lastCakeList)
    return lastCakeList[:10]

     打印测试如下图

        4.在pycharm修改views.py下的代码

#增加左侧函数代码如下所示:
def centerLeft(request):
    if request.method == "GET":
        lastCakeList=getCenterLeftData.getCakeBrandData()
        return JsonResponse({
            'lastCakeList':lastCakeList
        })


       5.效果测试

前端辅助技术

         Echarts的基础南丁格尔玫瑰图

参考代码下:

option = {
  legend: {
    top: 'bottom'
  },
  toolbox: {
    show: true,
    feature: {
      mark: { show: true },
      dataView: { show: true, readOnly: false },
      restore: { show: true },
      saveAsImage: { show: true }
    }
  },
  series: [
    {
      name: 'Nightingale Chart',
      type: 'pie',
      radius: [50, 250],
      center: ['50%', '50%'],
      roseType: 'area',
      itemStyle: {
        borderRadius: 8
      },
      data: [
        { value: 40, name: 'rose 1' },
        { value: 38, name: 'rose 2' },
        { value: 32, name: 'rose 3' },
        { value: 30, name: 'rose 4' },
        { value: 28, name: 'rose 5' },
        { value: 26, name: 'rose 6' },
        { value: 22, name: 'rose 7' },
        { value: 18, name: 'rose 8' }
      ]
    }
  ]
};

可以通过控制上述代码的option、legend、toolbox等来控制图形或提示框是否显示:


总结:

1 前后端分离架构

项目采用前后端分离的架构设计,前端负责页面呈现和用户交互,后端则处理数据存储和业务逻辑。前后端通过API进行通信,这种架构提高了系统的模块化程度,便于开发和维护,页面渲染端使用了企业级流行的Echarts大屏技术,利于数据效率提升和美观。

2 数据处理流程

数据处理流程包括数据采集、数据清洗、数据传输和数据可视化四个主要步骤。首先,通过各种传感器和外部接口采集新能源汽车的数据。然后,对采集到的数据进行清洗和预处理,以确保数据的完整性和准确性。接下来,清洗后的数据通过API传输到前端。最后,前端使用Echarts将数据绘制成各类图表,实现数据的可视化展示。

3 系统集成策略

系统集成策略主要包括模块划分、接口设计和持续集成。项目被划分为多个模块,每个模块负责特定功能,如数据采集模块、数据处理模块和前端展示模块。各模块之间通过API进行通信,确保系统内的数据流顺畅。此外,采用持续集成的方式,自动化测试和部署,提高开发效率和系统稳定性。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。