文章目录

  • 前言
    • 1.介绍
    • 2.效果
  • 一、实现(以下代码必要部分都已加注释)
    • 1.集成后的CMyChart
    • 2.柱状图实现
    • 3.饼状图实现
    • 4.折线图实现
    • 5.曲线图实现
  • 二、使用

前言

项目源码: 传送门
|版本声明:山河君,未经博主允许,禁止转载

1.介绍

Qt图标(Qt Charts)出现晚于QWT、QCustomPlot,界面看起来也很优美,最主要的是要比后两种实现起来方便许多,当然,在自主灵活性上面就差了一点。
QChart已经集成在Qt5.7中,使用时在项目文件中加QT += charts即可,不过在安装Qt过程中,QChart默认时不勾选的,在安装时需要用户自行勾选。

2.效果

柱状图:可设置标题栏,X轴标题, Y轴标题,柱形颜色,轴刻度,是否显示提示信息(柱形颜色含义)等

饼状图:可设置空心圆、实心圆、点击扇形弹出(信息可编辑)、提示信息(扇形颜色含义)、空心大小比例,图形名称等

折线图:可多条线一起显示、X轴名称、刻度尺,Y轴名称、刻度尺,提示信息,图形名称,X轴为时间轴等

曲线图:可多条线一起显示、X轴名称、刻度尺,Y轴名称、刻度尺,提示信息,图形名称,X轴为时间轴等

一、实现(以下代码必要部分都已加注释)

1.集成后的CMyChart

由于我的负责的项目中,以上四种图形都需要使用,所以使用开闭将这四种集成了一下,如果只使用一种,那么这一部分可以过滤不看,只需要将项目中的文件单独拿出来即可。
调用顺序:GetChartWithType->SetAxisXRange/SetAxisYRange/SetDateTimeAxisX->SetAxisXTitle/SetAxisYTitle->AppendSeries
头文件

#ifndef CMYCHART_H
#define CMYCHART_H#include <QObject>
#include <QtCharts>QT_CHARTS_USE_NAMESPACEstruct BarDateInfo
{QString qsKey;QVector<qreal> vecVal;
};class CMyChart : public QObject
{Q_OBJECTpublic:enum EType{eInvalid,       //无效eBarChart,      //柱状图ePieChart,      //饼状图eLineChart,     //折线图eSplineChart    //曲线图};enum EColor{eBlue,          //蓝色eGreen,         //绿色eYellow,        //黄色ePurple,        //紫色eRed,           //红色eLightBlue,     //淡蓝色eLightGreen,    //淡绿色eLightYellow,   //淡黄色eLightPurple,   //淡紫色};public:CMyChart(const CMyChart::EType& type, QChartView* pView, QObject *parent = nullptr);virtual ~CMyChart();public://根据选择的图形,返回CMyChartstatic CMyChart* GetChartWithType(const EType& eType, QChartView* pView);//根据传入颜色转换成QColorQColor toQColor(const EColor& eColor);public://清空界面上显示的图形virtual void ClearGraphical() = 0;//设置提示信息是否显示void SetLegend(bool bLegend = true);//设置标题栏void SetTitle(const QString& qsTitle);//设置X轴坐标、刻度尺,柱状图、饼状图调此接口无用virtual void SetAxisXRange(const qreal& qMin = 0, const qreal& qMax = 10, const int& nTickCount = 5){};//设置Y轴坐标、刻度尺,柱状图、饼状图调此接口无用virtual void SetAxisYRange(const qreal& qMin = 0, const qreal& qMax = 10, const int& nTickCount = 5){};//设置时间坐标轴,柱状图、饼状图调此接口无用virtual void SetDateTimeAxisX(const QDateTime& dtStart,const QDateTime& dtEnd,const QString& qsFormat = "yyyy-MM-dd",const int& nTickCount = 5){};//设置X轴标题,饼状图调此接口无用virtual void SetAxisXTitle(const QString& qsAxisXTitle){};//设置Y轴标题,柱状图调此接口无用virtual void SetAxisYTitle(const QString& qsAxisYTitle){};//柱状图添加一组数据virtual void AppendSeries(const QString& qsAxisXName,QMap<QString, qreal>& mapData,const QVector<EColor>& vecColors = m_vecDefCol){};//饼状图添加数据virtual void AppendSeries(QMap<QString, qreal>& mapData, const QVector<EColor>& vecColors = m_vecDefCol){};//折线图、曲线图添加一条线virtual void AppendSeries(const QString& name, QMap<qreal, qreal> mapVal){};//折线图、曲线图添加坐标轴为时间的一条线virtual void AppendSeries(const QString& name, QMap<QDateTime, qreal> mapVal){};public:EType                   m_eType;QChart*                 m_pChart;QChartView*             m_pChartView;static QVector<EColor>  m_vecDefCol;    //默认颜色顺序
};#endif // CMYCHART_H

源文件:

#include "CMyChart.h"
#include "CMyBarChart.h"
#include "CMyPieChart.h"
#include "CMyLineChart.h"
#include "CMySplineChart.h"QVector<CMyChart::EColor> CMyChart::m_vecDefCol = {eBlue, eGreen, eYellow, ePurple, eRed, eLightBlue, eLightGreen, eLightYellow, eLightPurple};CMyChart::CMyChart(const CMyChart::EType& type, QChartView* pView, QObject *parent): QObject (parent), m_eType(type), m_pChartView(pView)
{m_pChart = new QChart;m_pChart->setAnimationOptions(QChart::SeriesAnimations);m_pChart->legend()->setVisible(true);       //设置提示打开(默认打开)m_pChart->legend()->show();     //显示提示m_pChart->layout()->setContentsMargins(0, 0, 0, 0);    //设置布局边距m_pChart->setMargins(QMargins(0, 0, 0, 0)); //设置控件边距m_pChart->setBackgroundRoundness(0);    //保存图表背景角上的圆角的直径。m_pChartView->setChart(m_pChart);m_pChartView->setRenderHint(QPainter::Antialiasing);    //防图形走样
}CMyChart::~CMyChart()
{}CMyChart* CMyChart::GetChartWithType(const EType &eType, QChartView *pView)
{if(pView == NULL)return NULL;switch (eType){case eInvalid:return NULL;case eBarChart:return new CMyBarChart(eType, pView);case ePieChart:return new CMyPieChart(eType, pView);case eLineChart:return new CMyLineChart(eType, pView);case eSplineChart:return new CMySplineChart(eType, pView);default:return NULL;}
}QColor CMyChart::toQColor(const EColor &eColor)
{switch (eColor){case eBlue:return QColor(0, 122, 255);case eGreen:return QColor(27, 201, 133);case eYellow:return QColor(255,168, 0);case ePurple:return QColor(37, 217, 255);case eRed:return QColor(252, 79, 76);case eLightBlue:return QColor(104, 153, 255);case eLightGreen:return QColor(37, 217, 255);case eLightYellow:return QColor(255, 211, 35);case eLightPurple:return QColor(212, 139, 250);default:return QColor(0, 122, 255);}
}void CMyChart::SetLegend(bool bLegend)
{if(bLegend)m_pChart->legend()->show();elsem_pChart->legend()->hide();
}void CMyChart::SetTitle(const QString &qsTitle)
{m_pChart->setTitle(qsTitle);
}

2.柱状图实现

头文件:

#ifndef CMYBARCHART_H
#define CMYBARCHART_H#include <QObject>
#include "CMyChart.h"class CMyBarChart : public CMyChart
{Q_OBJECT
public:explicit CMyBarChart(const CMyChart::EType& type, QChartView* pView, QObject *parent = nullptr);virtual ~CMyBarChart();public:virtual void ClearGraphical();virtual void SetAxisXTitle(const QString& qsAxisXTitle);virtual void SetAxisYTitle(const QString& qsAxisYTitle);virtual void SetAxisYRange(const qreal& qMin = 0, const qreal& qMax = 10, const int& nTickCount = 5);virtual void AppendSeries(const QString& qsAxisXName,QMap<QString, qreal>& mapData,const QVector<EColor>& vecColors = m_vecDefCol);private:QValueAxis*             m_pBarAxisY;QBarSeries*             m_pBarSeries;QVector<QBarSet*>       m_vecBarSet;QBarCategoryAxis*       m_pBarAxisX;
};#endif // CMYBARCHART_H

源文件

#include "CMyBarChart.h"CMyBarChart::CMyBarChart(const CMyChart::EType& type, QChartView* pView, QObject *parent): CMyChart(type, pView, parent)
{m_pBarSeries = new QBarSeries;          //创建分组系列m_pBarSeries->setLabelsVisible(true);   //设置显示柱形图值m_pBarSeries->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);   //设置值位置m_pChart->addSeries(m_pBarSeries);      //将分组放入chart容器m_pChart->createDefaultAxes();          //创建默认坐标轴m_pChart->legend()->setAlignment(Qt::AlignBottom);  //设置提示说明位置m_vecBarSet.fill(NULL, 10);     //默认最多只能有10个柱子
}CMyBarChart::~CMyBarChart()
{delete m_pBarSeries;delete m_pBarAxisX;delete m_pBarAxisY;
}void CMyBarChart::ClearGraphical()
{for(QVector<QBarSet*>::iterator it = m_vecBarSet.begin(); it != m_vecBarSet.end(); it++){if(*it != NULL)delete *it;}m_vecBarSet.fill(NULL, 10); //默认最多只有10种类型的柱子m_pBarAxisX->clear();m_pBarSeries->clear();
}void CMyBarChart::SetAxisXTitle(const QString &qsAxisXTitle)
{m_pBarAxisX->setTitleText(qsAxisXTitle);
}void CMyBarChart::SetAxisYTitle(const QString &qsAxisYTitle)
{m_pBarAxisY->setTitleText(qsAxisYTitle);
}void CMyBarChart::SetAxisYRange(const qreal& qMin, const qreal& qMax, const int& nTickCount)
{m_pBarAxisX = new QBarCategoryAxis;     //创建X轴m_pBarAxisY = new QValueAxis;           //创建Y轴m_pBarAxisX->setLabelsAngle(-45);       //设置X轴坐标倾斜m_pBarAxisY->setGridLineVisible(false); //设置网格不可见m_pBarAxisY->setRange(qMin, qMax);m_pBarAxisY->setTickCount(nTickCount);m_pChart->setAxisX(m_pBarAxisX, m_pBarSeries);  //将X坐标轴和分组进行统一m_pChart->setAxisY(m_pBarAxisY, m_pBarSeries);  //将Y坐标轴和分组进行统一
}/** 一个QBarSet代表的是同一颜色的柱形,里面存放多个柱子的值* 此接口先将一组数据作为柱子类型数的最大大小,然后根据先后顺序给柱子添加数据*/
void CMyBarChart::AppendSeries(const QString &qsAxisXName, QMap<QString, qreal>& mapData, const QVector<EColor> &vecColors)
{QMap<QString, qreal>::iterator it = mapData.begin();for(int i = 0; i < mapData.size(); i++){if(m_vecBarSet[i] == NULL){m_vecBarSet[i] = new QBarSet(it.key());m_vecBarSet[i]->setColor(toQColor(vecColors[i]));}m_vecBarSet[i]->append(it.value());m_pBarSeries->append(m_vecBarSet[i]);it++;}m_pBarAxisX->append(qsAxisXName);
}

3.饼状图实现

头文件

#ifndef CMYPIECHART_H
#define CMYPIECHART_H#include <QObject>
#include "CMyChart.h"class CMyPieChart : public CMyChart
{Q_OBJECT
public:explicit CMyPieChart(const CMyChart::EType& type, QChartView* pView, QObject *parent = nullptr);virtual ~CMyPieChart();public:virtual void ClearGraphical();virtual void AppendSeries(QMap<QString, qreal>& mapData, const QVector<EColor>& vecColors = m_vecDefCol);private slots://点击扇形槽函数void ClickedSector(QPieSlice* pSlice);private:QPieSeries* m_pPieSeries;
};#endif // CMYPIECHART_H

源文件

#include "CMyPieChart.h"CMyPieChart::CMyPieChart(const CMyChart::EType& type, QChartView* pView, QObject *parent): CMyChart(type, pView, parent)
{m_pPieSeries = new QPieSeries;m_pPieSeries->setHoleSize(0.5);     //设置空心占比m_pPieSeries->setPieSize(0.8);      //设置圆形占比m_pChart->addSeries(m_pPieSeries);  //将饼图放入容器m_pChart->legend()->setAlignment(Qt::AlignRight);  //设置提示说明位置connect(m_pPieSeries, SIGNAL(clicked(QPieSlice*)), this, SLOT(ClickedSector(QPieSlice*))); //点击扇形
}CMyPieChart::~CMyPieChart()
{delete m_pPieSeries;
}void CMyPieChart::ClearGraphical()
{m_pPieSeries->clear();
}void CMyPieChart::ClickedSector(QPieSlice* pSlice)
{if(pSlice->isExploded())    //判断扇形有没有弹出{pSlice->setExploded(false);pSlice->setLabelVisible(false);}else {pSlice->setExploded(true);      //设置扇形弹出pSlice->setLabelVisible(true);  //设置扇形提示}
}void CMyPieChart::AppendSeries(QMap<QString, qreal> &mapData, const QVector<EColor> &vecColors)
{m_pPieSeries->clear();QMap<QString, qreal>::iterator it = mapData.begin();for(int i = 0; i < mapData.size(); i++){QPieSlice* pSlice = new QPieSlice(it.key(), it.value());pSlice->setLabel(it.key());pSlice->setColor(toQColor(vecColors[i]));m_pPieSeries->append(pSlice);it++;}}

4.折线图实现

头文件

#ifndef CMYLINECHART_H
#define CMYLINECHART_H#include <QObject>
#include "CMyChart.h"class CMyLineChart : public CMyChart
{Q_OBJECT
public:explicit CMyLineChart(const CMyChart::EType& type, QChartView* pView, QObject *parent = nullptr);~CMyLineChart();public:virtual void ClearGraphical();virtual void SetAxisXRange(const qreal& qMin = 0, const qreal& qMax = 10, const int& nTickCount = 5);virtual void SetAxisYRange(const qreal& qMin = 0, const qreal& qMax = 10, const int& nTickCount = 5);virtual void SetAxisXTitle(const QString& qsAxisXTitle);virtual void SetAxisYTitle(const QString& qsAxisYTitle);virtual void SetDateTimeAxisX(const QDateTime& dtStart,const QDateTime& dtEnd,const QString& qsFormat = "yyyy-MM-dd",const int& nTickCount = 5);virtual void AppendSeries(const QString& name, QMap<qreal, qreal> mapVal);virtual void AppendSeries(const QString& name, QMap<QDateTime, qreal> mapVal);private:bool                    m_bIsDateTime;QValueAxis*             m_pLineAxisX;QValueAxis*             m_pLineAxisY;QDateTimeAxis*          m_pAxisDateTime;QVector<QLineSeries*>   m_vecLineSeries;
};#endif // CMYLINECHART_H

源文件

#include "CMyLineChart.h"CMyLineChart::CMyLineChart(const CMyChart::EType& type, QChartView* pView, QObject *parent): CMyChart(type, pView, parent)
{m_bIsDateTime = false;
}CMyLineChart::~CMyLineChart()
{for(QVector<QLineSeries*>::iterator it = m_vecLineSeries.begin(); it != m_vecLineSeries.end(); it++)delete *it;
}void CMyLineChart::ClearGraphical()
{for(QVector<QLineSeries*>::iterator it = m_vecLineSeries.begin(); it != m_vecLineSeries.end(); it++)delete *it;m_vecLineSeries.clear();
}void CMyLineChart::SetAxisXRange(const qreal &qMin, const qreal &qMax, const int &nTickCount)
{m_pLineAxisX = new QValueAxis;m_pLineAxisX->setRange(qMin, qMax);m_pLineAxisX->setTickCount(nTickCount);m_pChart->addAxis(m_pLineAxisX, Qt::AlignBottom);
}void CMyLineChart::SetAxisYRange(const qreal &qMin, const qreal &qMax, const int &nTickCount)
{m_pLineAxisY = new QValueAxis;m_pLineAxisY->setRange(qMin, qMax);m_pLineAxisY->setTickCount(nTickCount);m_pLineAxisY->setGridLineVisible(false);m_pChart->addAxis(m_pLineAxisY, Qt::AlignLeft);
}void CMyLineChart::SetDateTimeAxisX(const QDateTime &dtStart, const QDateTime &dtEnd, const QString &qsFormat, const int &nTickCount)
{m_bIsDateTime = true;m_pAxisDateTime = new QDateTimeAxis;m_pAxisDateTime->setFormat(qsFormat);m_pAxisDateTime->setRange(dtStart, dtEnd);m_pAxisDateTime->setTickCount(nTickCount);m_pChart->addAxis(m_pAxisDateTime, Qt::AlignBottom);
}void CMyLineChart::SetAxisXTitle(const QString &qsAxisXTitle)
{if(m_bIsDateTime)m_pAxisDateTime->setTitleText(qsAxisXTitle);elsem_pLineAxisX->setTitleText(qsAxisXTitle);
}void CMyLineChart::SetAxisYTitle(const QString &qsAxisYTitle)
{m_pLineAxisY->setTitleText(qsAxisYTitle);
}void CMyLineChart::AppendSeries(const QString &name , QMap<qreal, qreal> mapVal)
{QLineSeries* pLineSeries = new QLineSeries;pLineSeries->setName(name);pLineSeries->setPointsVisible(true);pLineSeries->setPointLabelsVisible(true);   //设置显示点位m_pChart->addSeries(pLineSeries);for(QMap<qreal, qreal>::iterator it = mapVal.begin(); it != mapVal.end(); it++)pLineSeries->append(it.key(), it.value());m_vecLineSeries.push_back(pLineSeries);pLineSeries->attachAxis(m_pLineAxisX);pLineSeries->attachAxis(m_pLineAxisY);
}void CMyLineChart::AppendSeries(const QString &name, QMap<QDateTime, qreal> mapVal)
{QLineSeries* pLineSeries = new QLineSeries;pLineSeries->setName(name);pLineSeries->setPointsVisible(true);pLineSeries->setPointLabelsVisible(false);   //设置显示点位m_pChart->addSeries(pLineSeries);for(QMap<QDateTime, qreal>::iterator it = mapVal.begin(); it != mapVal.end(); it++)pLineSeries->append(it.key().toMSecsSinceEpoch(), it.value());m_vecLineSeries.push_back(pLineSeries);pLineSeries->attachAxis(m_pAxisDateTime);pLineSeries->attachAxis(m_pLineAxisY);
}

5.曲线图实现

头文件

#ifndef CMYSPLINECHART_H
#define CMYSPLINECHART_H#include <QObject>
#include "CMyChart.h"class CMySplineChart : public CMyChart
{Q_OBJECT
public:explicit CMySplineChart(const CMyChart::EType& type, QChartView* pView, QObject *parent = nullptr);~CMySplineChart();public:virtual void ClearGraphical();virtual void SetAxisXRange(const qreal& qMin = 0, const qreal& qMax = 10, const int& nTickCount = 5);virtual void SetAxisYRange(const qreal& qMin = 0, const qreal& qMax = 10, const int& nTickCount = 5);virtual void SetAxisXTitle(const QString& qsAxisXTitle);virtual void SetAxisYTitle(const QString& qsAxisYTitle);virtual void SetDateTimeAxisX(const QDateTime& dtStart,const QDateTime& dtEnd,const QString& qsFormat = "yyyy-MM-dd",const int& nTickCount = 5);virtual void AppendSeries(const QString& name, QMap<qreal, qreal> mapVal);virtual void AppendSeries(const QString& name, QMap<QDateTime, qreal> mapVal);signals:public slots:private:bool                        m_bIsDateTime;QValueAxis*                 m_pLineAxisX;QValueAxis*                 m_pLineAxisY;QDateTimeAxis*              m_pAxisDateTime;QVector<QSplineSeries*>     m_vecSplineSeries;
};#endif // CMYSPLINECHART_H

源文件

#include "CMySplineChart.h"CMySplineChart::CMySplineChart(const CMyChart::EType& type, QChartView* pView, QObject *parent): CMyChart(type, pView, parent)
{m_bIsDateTime = false;
}CMySplineChart::~CMySplineChart()
{for(QVector<QSplineSeries*>::iterator it = m_vecSplineSeries.begin(); it != m_vecSplineSeries.end(); it++)delete *it;
}void CMySplineChart::ClearGraphical()
{for(QVector<QSplineSeries*>::iterator it = m_vecSplineSeries.begin(); it != m_vecSplineSeries.end(); it++)delete *it;m_vecSplineSeries.clear();
}void CMySplineChart::SetAxisXRange(const qreal &qMin, const qreal &qMax, const int &nTickCount)
{m_pLineAxisX = new QValueAxis;m_pLineAxisX->setRange(qMin, qMax);m_pLineAxisX->setTickCount(nTickCount);m_pChart->addAxis(m_pLineAxisX, Qt::AlignBottom);
}void CMySplineChart::SetAxisYRange(const qreal &qMin, const qreal &qMax, const int &nTickCount)
{m_pLineAxisY = new QValueAxis;m_pLineAxisY->setRange(qMin, qMax);m_pLineAxisY->setTickCount(nTickCount);m_pLineAxisY->setGridLineVisible(false);m_pChart->addAxis(m_pLineAxisY, Qt::AlignLeft);
}void CMySplineChart::SetDateTimeAxisX(const QDateTime &dtStart, const QDateTime &dtEnd, const QString &qsFormat, const int &nTickCount)
{m_bIsDateTime = true;m_pAxisDateTime = new QDateTimeAxis;m_pAxisDateTime->setFormat(qsFormat);m_pAxisDateTime->setRange(dtStart, dtEnd);m_pAxisDateTime->setTickCount(nTickCount);m_pChart->addAxis(m_pAxisDateTime, Qt::AlignBottom);
}void CMySplineChart::SetAxisXTitle(const QString &qsAxisXTitle)
{if(m_bIsDateTime)m_pAxisDateTime->setTitleText(qsAxisXTitle);elsem_pLineAxisX->setTitleText(qsAxisXTitle);
}void CMySplineChart::SetAxisYTitle(const QString &qsAxisYTitle)
{m_pLineAxisY->setTitleText(qsAxisYTitle);
}void CMySplineChart::AppendSeries(const QString &name , QMap<qreal, qreal> mapVal)
{QSplineSeries* pSplineSeries = new QSplineSeries;pSplineSeries->setName(name);pSplineSeries->setPointsVisible(true);pSplineSeries->setPointLabelsVisible(true);   //设置显示点位m_pChart->addSeries(pSplineSeries);for(QMap<qreal, qreal>::iterator it = mapVal.begin(); it != mapVal.end(); it++)pSplineSeries->append(it.key(), it.value());m_vecSplineSeries.push_back(pSplineSeries);pSplineSeries->attachAxis(m_pLineAxisX);pSplineSeries->attachAxis(m_pLineAxisY);
}void CMySplineChart::AppendSeries(const QString &name, QMap<QDateTime, qreal> mapVal)
{QSplineSeries* pSplineSeries = new QSplineSeries;pSplineSeries->setName(name);pSplineSeries->setPointsVisible(true);pSplineSeries->setPointLabelsVisible(false);   //设置显示点位m_pChart->addSeries(pSplineSeries);for(QMap<QDateTime, qreal>::iterator it = mapVal.begin(); it != mapVal.end(); it++)pSplineSeries->append(it.key().toMSecsSinceEpoch(), it.value());m_vecSplineSeries.push_back(pSplineSeries);pSplineSeries->attachAxis(m_pAxisDateTime);pSplineSeries->attachAxis(m_pLineAxisY);
}

二、使用

使用QChart需要对于widget进行提升

项目源码:传送门

码字不易,各位观众老爷,如果觉得有点用,还请点个赞,让我涨涨积分哈!

Qt实现柱状图、饼状图、折线图、曲线图相关推荐

  1. java实现将数据生成图表至excel导出(包括折线图,柱状图,饼状图)

    1. 目的 根据已有数据,手动(java后台)生成图表至excel并导出.用于后台查询到数据后直接创建图表,可以代替直接使用图表信息字符串. 2. 说明 使用jfree图表绘制类库绘制图表,并生成到本 ...

  2. poi导出excel文件,并生成原生图表(包括折线图,柱状图,饼状图,面积图)

    前段时间,因为客户需要,要做一个导出excel文件功能,并能生成原生的图表的(不是把图片插入到excel文档),找了很多文档看,也看了很多别人的代码,个人也总结了一下,不足之处,请各位大牛谅解. 需要 ...

  3. Python的可视化包 – Matplotlib 2D图表(点图和线图,.柱状或饼状类型的图),3D图表(曲面图,散点图和柱状图)...

    Python的可视化包 – Matplotlib Matplotlib是Python中最常用的可视化工具之一, 可以非常方便地创建海量类型地2D图表和一些基本的3D图表.Matplotlib最早是为了 ...

  4. java excel 饼图,java 导入导出excle 和 生成柱状图饼状图的demo/excle数据如何转成饼状图...

    在EXCEL中,如何把表格中的数据转换成饼状图? 在Excel中,把中的数据转换状图的操作步骤如下: 想转换的数据源,插入饼状图,Excel会自动根据选择的数据源生成饼状图.接下来,可以自定义饼状图的 ...

  5. echarts:饼、柱状、折线图的配置说明

    文章目录 前言 柱状图和折线图主要配置项: 饼图的基本配置项 series 数据项 有什么功能组件? 渐进式案例: vue中画一个基本的饼图 为它添加提示组件tooltip dataZom,用柱状图演 ...

  6. 【Excel】绘图案例_常见复合图:簇状图+堆积图+折线图

    [Excel]绘图案例_常见复合图:簇状图+堆积图+折线图 前言 最近有朋友让我帮忙用excel画图,老实说我很讨厌用excel画图,点来点去,复杂一些还不能复用,非常繁琐.当然,入门也很简单.需求时 ...

  7. python 折线图_Python 编程一次画三种图:柱状图、散点图、折线图

    Python 编程一次画三种图:柱状图.散点图.折线图 柱状图.散点图.折线图是三种常用数据图,用 Python 能轻易的画出来. #导入必须的库 import matplotlib.pyplot a ...

  8. 地图图表、柱状图、条形图、折线图、中国地图、世界地图、省市地图、仪表盘、雷达图、饼图、散点图、气泡图、瀑布图、堆叠图、热力图、桑基图、关系图、漏斗图、Axure原型、rp原型、产品原型

    地图图表.柱状图.条形图.折线图.中国地图.世界地图.省市地图.仪表盘.雷达图.饼图.散点图.瀑布图.气泡图.堆叠图.热力图.桑基图.关系图.漏斗图.Axure原型.rp原型.产品原型.大屏设计必备组 ...

  9. Excel柱状图,饼图,折线图

    1. 打开文件 用Excel打开"Test1"文件 2. 选择数据 按住鼠标左键,选中指定数据区域 3. 数据选中之后,点击EXCEL菜单的"INSERT"选项 ...

  10. Word中插入表格与柱状图饼状图技术经验分享

    最近公司一个项目里要求自动生成报告功能,研究了1周多,主要实现方式是通过调用微软Office COM组件来实现操作word文档,生成段落,表格,及各种图表. 本人发现操作word地方也有几个坑人的地方 ...

最新文章

  1. 最锋利的Visual Studio Web开发工具扩展:Web Essentials详解(转)
  2. 最大流 ---- 最大密度子图 ----- 2014-2015 ACM-ICPC, Asia Xian Regional Contest C The Problem Needs 3D Arrays
  3. 获取当前鼠标的位置以及组件的位置
  4. Hiv:SQuirrel连接hive配置
  5. [转]2016年Web前端面试题目汇总
  6. 127.0.0.1和0.0.0.0地址的区别 | 文末送书
  7. ECS之Component组件
  8. nfc修改饭卡软件下载_NFC卡模拟,从此打卡刷电梯,饭卡工卡各种IC卡都用手机搞定!...
  9. java实现随机抽取题目_随机抽取样本问题蓄水池算法按权重抽取问题
  10. 基于mysql的电商用户分析
  11. 彩虹php域名授权系统,彩虹云域名授权系统(正版源码+教程)
  12. win10重置网络命令_WIN10重置网络的操作方法
  13. destoon php版本,Destoon 7.0最新版常见问题解决方法
  14. mysql存小程序获取到的带有表情的昵称_拉取用户信息,带表情的昵称,存储到数据库是???要怎么处理...
  15. ipad+PDF Expert:买前生产力,买后生产力
  16. 由浅入深玩转华为WLAN—12安全认证配置(5)Portal认证,外置Protal服务器TSM对接
  17. 雨中走路淋雨多还是跑步淋雨多?
  18. html打折代码,HTML打折计算价格原理与脚本代码
  19. for in 中的index
  20. 非关系型数据库之Redis【redis安装】

热门文章

  1. 对待新知识、新领域的心态——好奇、批判、独孤求败
  2. 邢质斌退休意味着一个时代的结束
  3. baddy:核心函数入口
  4. JQuery实现表单验证并使错误数据其无法提交到数据库
  5. matlab怎么通分,matlab常见符号运算( 因式分解、展开、合并、简化及通分等,计算导数,积分,符号求和、代数方程和微分方程求解)...
  6. 腾讯地图位置服务器,腾讯地图推出地形图服务
  7. 分类(category)的使用
  8. 大学四年因为读了这13本书,我成了别人眼中的大神!
  9. xp计算机无线开关机,xp定时关机与重启妙法 -电脑资料
  10. 有没有一款手机桌面便签软件?真正好用的便签软件推荐