精华内容
下载资源
问答
  • Wyn Enterprise-百分比柱状图
  • ** series->setLabelsVisible(true);//设置数据是否可见 ** QT的官方柱状图,如下图 ...然后需要一根一根的柱子QBarSet,再把一根一根的柱子加到柱子的列当中QBarSeries,那么柱状图机画好了,可是没有x...
    **
     series->setLabelsVisible(true);//设置数据是否可见
    **
    

    QT的官方柱状图,如下图
    在这里插入图片描述
    QtCharts画图表必须要的两样东西QChartView,QChart相当于画布画笔,就不多说了。无论画什么图主要差别在于画笔里面的东西。
    然后需要一根一根的柱子QBarSet,再把一根一根的柱子加到柱子的列当中QBarSeries,那么柱状图机画好了,可是没有x、y轴啊,哈哈哈,所有还需要为QChart和QBarSeries设置x、y轴。那么就完成了。具体实现如下:

    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
    //![1]设置数据,相当于多少根柱子,每根的高度,
        QBarSet *set0 = new QBarSet("Jane");
        QBarSet *set1 = new QBarSet("John");
        QBarSet *set2 = new QBarSet("Axel");
        QBarSet *set3 = new QBarSet("Mary");
        QBarSet *set4 = new QBarSet("Samantha");
    
        *set0 << 1 << 2 << 3 << 4 << 5 << 6;
        *set1 << 5 << 0 << 0 << 4 << 0 << 7;
        *set2 << 3 << 5 << 8 << 13 << 8 << 5;
        *set3 << 5 << 6 << 7 << 3 << 4 << 5;
        *set4 << 9 << 7 << 5 << 3 << 1 << 2;
    //![1]
    
    //![2]把数据加载到数据列表中
        QBarSeries *series = new QBarSeries();
        series->append(set0);
        series->append(set1);
        series->append(set2);
        series->append(set3);
        series->append(set4);
    
    //![2]
    
    //![3]初始化画笔
        QChart *chart = new QChart();
        chart->addSeries(series);
        chart->setTitle("Simple barchart example");
        chart->setAnimationOptions(QChart::SeriesAnimations);
    //![3]
    
    //![4]为QChart和QBarSeries设置坐标轴
        QStringList categories;
        categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun";
        QBarCategoryAxis *axisX = new QBarCategoryAxis();//初始化X轴
        axisX->append(categories);
        chart->addAxis(axisX, Qt::AlignBottom);
        series->attachAxis(axisX);
    
        QValueAxis *axisY = new QValueAxis();//初始化Y轴
        axisY->setRange(0,15);
        chart->addAxis(axisY, Qt::AlignLeft);
        series->attachAxis(axisY);
    //![4]
    
    //![5]设置图标的标题属性
        chart->legend()->setVisible(true);
        chart->legend()->setAlignment(Qt::AlignBottom);
    //![5]
    
    //![6]设置画布
        QChartView *chartView = new QChartView(chart);
        chartView->setRenderHint(QPainter::Antialiasing);
    //![6]
    
    //![7]
        QMainWindow window;
        window.setCentralWidget(chartView);
        window.resize(420, 300);
        window.show();
    //![7]
    
        return a.exec();
    }
    

    百分比柱状图,如下
    在这里插入图片描述做法跟上面的柱状图差不多,就是把数据序列QBarSeries 换成QPercentBarSeries而已,其它完全一致

    横向百分比柱状图,如下
    在这里插入图片描述做法跟上面的柱状图差不多,就是把数据序列QBarSeries 换成QHorizontalPercentBarSeries而已,其它完全一致

    展开全文
  • matplotlib之堆积柱状图及百分比柱状图

    万次阅读 多人点赞 2019-10-01 08:24:17
    matplotlib之堆积柱状图及百分比柱状图 在博主日常的绘图过程,有一种图也是什么常见的绘图工作,就是堆积的柱状图,其实很简单,就注意几个参数即可。 Here we go! 首先是引入数据库: import matplotlib.pyplot as...

    matplotlib之堆积柱状图及百分比柱状图

    在博主日常的绘图过程,有一种图也是什么常见的绘图工作,就是堆积的柱状图,其实很简单,就注意几个参数即可。 Here we go!

    首先是引入数据库:

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    

    然后我创建了一个csv文件,这里随机填写了一些数据,详细如下:
    在这里插入图片描述
    接下来用pandas读取数据,用pandas读取csv十分简单,几行代码搞定:

    name = csv.Person
    salary1 = np.array(csv.Salary1)
    salary2 = np.array(csv.Salary2)
    salary3 = np.array(csv.Salary3)
    

    这里把pandas对象转成np的array是为了方便之后的array加减操作。
    这里展示两种效果,因此用一下subplots函数创建了对比图

    fig, axs = plt.subplots(1 , 2, figsize=(10,4))
    axs[0].bar(index, salary1, width=0.4, label= 'salary1')
    axs[0].bar(index, salary2, width=0.4, bottom=salary1, label= 'salary2')
    axs[0].bar(index, salary3, width=0.4, bottom=salary2+salary1, label= 'salary3')
    axs[0].set_ylim(0, 30000)
    axs[0].set_xticklabels(name, rotation=90)
    axs[0].legend(loc='upper left',  shadow=True)
    
    summ = salary1+salary2+salary3
    percentage1 = salary1/summ
    percentage2 = salary2/summ
    percentage3 = salary3/summ
    
    axs[1].bar(index, percentage1, width=0.4, label= salary1)
    axs[1].bar(index, percentage2, width=0.4, bottom=percentage1, label= salary2)
    axs[1].bar(index, percentage3, width=0.4, bottom=percentage1+percentage2, label= salary3)
    axs[1].set_ylim(0,1)
    axs[1].set_xticklabels(name, rotation=90)
    
    plt.savefig('9.tiff', dpi=300)
    plt.show()
    

    在这里插入图片描述

    • 这里左边显示了正常的堆积图,右边则显示了百分比堆积图,堆积的要点在于绘制时候的bottom关键字,这决定了柱状图的绘制起点,因此第二段的bottom是第一段的数值,而第三段则为第一、二段想加,
    • 另外值得注意点 是,这里的subplots函数,返回对象有两个,前者fig相当于画布,而后者axs相当于在画布上绘制的元素,因此,我们这里是对绘制的元素操作,所以后续都是在ax上展开。

    接下来还有一个需求,我们需要在柱状图上显示柱子对应的数值,比如右侧的图,需要加上红绿蓝颜色对应的百分比,那这里我们针对axs[1]继续绘制。

    这里先自定义一个函数:

    def add_text(x, y, data):
        for x0, y0, data0 in zip(x, y, data):
            axs[1].text(x0, y0, round(data0, 1), rotation=90)
    

    然后给出文本的坐标值以及数值即可:
    注意这里绿色那段,由于柱子实在太短,如果要添加一下文本,需要手动微调位置,我这里就没继续添加了,
    绘制图像如下
    在这里插入图片描述
    完整代码如下:

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    
    def add_text(x, y, data, fontsize=12):
        for x0, y0, data0 in zip(x, y, data):
            axs[1].text(x0, y0, round(data0, 1), rotation=90)
    
    csv = pd.read_csv('salary.csv')
    name = csv.Person
    salary1 = np.array(csv.Salary1)
    salary2 = np.array(csv.Salary2)
    salary3 = np.array(csv.Salary3)
    index = np.arange(len(name))
    width = 0.4
    
    fig, axs = plt.subplots(1, 2, figsize=(10, 5))
    axs[0].bar(index, salary1, width=width, label='salary1')
    axs[0].bar(index, salary2, width=width, bottom=salary1, label='salary2')
    axs[0].bar(index, salary3, width=width, bottom=salary2 + salary1, label='salary3')
    axs[0].set_ylim(0, 30000)
    axs[0].set_xticks(index)
    axs[0].set_xticklabels(name, rotation=90)
    axs[0].legend(loc='upper left', shadow=True)
    
    sum = salary1 + salary2 + salary3
    percentage1 = salary1 / sum
    percentage2 = salary2 / sum
    percentage3 = salary3 / sum
    
    axs[1].bar(index, percentage1, width=width, label=salary1)
    axs[1].bar(index, percentage2, width=width, bottom=percentage1, label=salary2)
    axs[1].bar(index, percentage3, width=width,
               bottom=percentage1 + percentage2, label=salary3)
    axs[1].set_ylim(0, 1)
    axs[1].set_xticks(index)
    axs[1].set_xticklabels(name, rotation=90)
    
    y1 = percentage1/2
    y2 = percentage1 + percentage2/2
    y3 = sum - percentage3/2
    
    add_text(index-width/2, y1, percentage1)
    add_text(index-width/2, y2, percentage2)
    # add_text(index-width/2, y3, percentage3)
    
    plt.savefig('9.tiff', dpi=300)
    plt.show()
    

    更进一步的,写个自定义的函数,用来传输对象进去,直接调用函数试试:
    以下为全代码:

    import numpy as np
    import matplotlib.pyplot as plt
    
    
    category_names = ['Strongly disagree', 'Disagree',
                      'Neither agree nor disagree', 'Agree', 'Strongly agree']
    results = {
        'Question 1': [10, 15, 17, 32, 26],
        'Question 2': [26, 22, 29, 10, 13],
        'Question 3': [35, 37, 7, 2, 19],
        'Question 4': [32, 11, 9, 15, 33],
        'Question 5': [21, 29, 5, 5, 40],
        'Question 6': [8, 19, 5, 30, 38]
    }
    
    
    def survey(results, category_names):
        labels = list(results.keys())
        # 获取标签
        data = np.array(list(results.values()))
        # 获取具体数值
        data_cum = data.cumsum(axis=1)
        # 逐项加和
        category_colors = plt.get_cmap('RdYlGn')(np.linspace(0.15, 0.85, data.shape[1]))
    
        """
        在cmmap中取出五组颜色
        category_colors:
            [[0.89888504 0.30549789 0.20676663 1.        ]
             [0.99315648 0.73233372 0.42237601 1.        ]
             [0.99707805 0.9987697  0.74502115 1.        ]
             [0.70196078 0.87297193 0.44867359 1.        ]
             [0.24805844 0.66720492 0.3502499  1.        ]]
        
        """
    
        print(category_colors)
        # 常见颜色序列, 在cmap中取色
    
        fig, ax = plt.subplots(figsize=(5, 9))
        # 绘图
        # ax.invert_xaxis()
        # 使其更符合视觉习惯,index本身从下到上
        ax.yaxis.set_visible(False)
        ax.set_xticklabels(labels=labels, rotation=90)
        # 不需要可见
        ax.set_ylim(0, np.sum(data, axis=1).max())
    
        for i, (colname, color) in enumerate(zip(category_names, category_colors)):
            heights = data[:, i]
            # 取第一列数值
            starts = data_cum[:, i] - heights
            # 取每段的起始点
            ax.bar(labels, heights, bottom=starts, width=0.5,
                    label=colname, color=color)
            xcenters = starts + heights / 2
            r, g, b, _ = color
            text_color = 'white' if r * g * b < 0.5 else 'darkgrey'
            for y, (x, c) in enumerate(zip(xcenters, heights)):
                ax.text(y, x, str(int(c)), ha='center', va='center',
                        color=text_color, rotation = 90)
        ax.legend()
        return fig, ax
    
    
    survey(results, category_names)
    plt.show()
    
    

    在这里插入图片描述
    完工!

    展开全文
  • CSS代码实现百分比柱状图.rarCSS代码实现百分比柱状图.rarCSS代码实现百分比柱状图.rarCSS代码实现百分比柱状图.rarCSS代码实现百分比柱状图.rar
  • 这是一张方格百分比PPT柱状图。每个柱状图都由100个小方格构成,变色的小方格用于表达百分比数据。.PPTX格式;
  • 基于vue手动实现:风险评估百分比柱状图 项目基于hotcss实现屏幕适配 + scss预处理语音 vue结构 <template> <div class="report"> <!-- 风险评估百分比柱状图 --> <div class="Statistics...

    基于vue手动实现:风险评估百分比柱状图

    项目基于hotcss实现屏幕适配 + scss预处理语音

    vue结构

    <template>
      <div class="report">
        <!-- 风险评估百分比柱状图 -->
        <div class="Statistics">
          <div class="Statisticsleft">
            <!-- 股票风险 -->
            <div class="red">
              <div class="reddd" :style="'height:' + dataList.future + '%'">
                <span>{{dataList.future}}%</span>
              </div>
            </div>
            <!-- 债券风险 -->
            <div class="red2">
              <div class="redds" :style="'height:' + dataList.common + '%'">
                <span class="reddsled">{{dataList.common}}%</span>
              </div>
            </div>
            <!-- 基金风险 -->
            <div class="red3">
              <div class="redda" :style="'height:' + dataList.erupt + '%'">
                <span class="reddabuli">{{dataList.erupt}}%</span>
              </div>
            </div>
            <!-- 柱状图:比例说明 -->
            <ul>
              <li>
                <span class="future"></span>股票风险
              </li>
              <li>
                <span class="common"></span>债券风险
              </li>
              <li>
                <span class="after"></span>基金风险
              </li>
            </ul>
          </div>
        </div>
        <div class="button" @click="change">点击改变柱状图比例分布</div>
      </div>
    </template>
    

    css样式

    <style lang="scss" scoped>
    @import "../assets/hotcss/px2rem.scss";
    
    .report {
      margin-top: px2rem(50);
      font-size: px2rem(10);
      .Statistics {
        .Statisticsleft {
          display: flex;
          margin-left: 5.9%;
          background-color: #ffffff;
    
          .red {
            width: 9.6%;
            height: px2rem(164);
            background: #fff1f1;
            position: relative;
    
            .reddd {
              width: 100%;
              background: #e36969;
              position: absolute;
              bottom: 0px;
    
              span {
                text-align: center;
                position: absolute;
                top: -15%;
                font-size: px2rem(10);
              }
            }
          }
    
          .red2 {
            width: 9.6%;
            height: px2rem(164);
            background: #feeee4;
            margin: 0px 5.1%;
            position: relative;
    
            .redds {
              width: 100%;
              background: #ffc5a0;
              position: absolute;
              bottom: 0px;
            }
          }
    
          .red3 {
            width: 9.6%;
            height: px2rem(164);
            background: #e5edff;
            position: relative;
    
            .redda {
              width: 100%;
              background: #9dbbff;
              position: absolute;
              bottom: 0px;
            }
          }
    
          ul {
            margin-left: 16%;
    
            li {
              height: px2rem(50);
              line-height: px2rem(50);
              font-family: PingFangSC-Regular;
              font-size: px2rem(14);
              color: #444444;
              letter-spacing: 0;
              display: flex;
              width: px2rem(150);
              span {
                width: px2rem(10);
                height: px2rem(10);
                margin-right: 8.6%;
                margin-top: 13.6%;
              }
    
              .future {
                background-color: #e36969;
              }
              .common {
                background-color: #ffc5a0;
              }
              .after {
                background-color: #9dbbff;
              }
            }
          }
        }
      }
      .button {
        display: flex;
        justify-content: center;
        align-items: center;
        margin: auto;
        margin-top: 50px;
        border: 1px solid #cccccc;
        width: px2rem(150);
        height: px2rem(30);
        border-radius: 15px;
      }
    }
    </style>
    

    script

    <script>
    export default {
      data() {
        return {
          // 风险比例数据
          dataList: {
            future: 30,
            common: 20,
            erupt: 10
          }
        };
      },
      methods: {
        change() {
          this.dataList.future++;
          this.dataList.common++;
          this.dataList.erupt++;
        }
      }
    };
    </script>
    
    展开全文
  • ECharts之横向百分比柱状图

    千次阅读 多人点赞 2019-10-15 09:44:06
    效果 背景图片 下载ECharts npm install echarts --save 引入并注册全局ECharts     在 main.js 文件里引入并注册 ( 这里是 Vue3.0 的模板 ) import Vue from 'vue' import App from './App.vue'...

    效果图

    在这里插入图片描述

    背景图片

    下载ECharts

    npm install echarts --save
    

    引入并注册全局ECharts

        在 main.js 文件里引入并注册 ( 这里是 Vue3.0 的模板 )

    import Vue from 'vue'
    import App from './App.vue'
    import router from './router'
    import store from './store'
    
    import echarts from 'echarts'
    Vue.prototype.$echarts = echarts
    
    Vue.config.productionTip = false
    
    new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount('#app')
    

    在组件中使用ECharts

    <template>
      <div class='wrapper'>
        <div class='chart' id='chart'></div>
      </div>
    </template>
    
    <script>
    export default {
      data () {
        return {}
      },
      mounted () {
        this.drawChart()
      },
      methods: {
        drawChart () {
          // 基于准备好的dom,初始化echarts实例
          let chart = this.$echarts.init(document.getElementById('chart'))
          // 监听屏幕变化自动缩放图表
          window.addEventListener('resize', function () { chart.resize() })
          // 绘制图表
          chart.setOption({
            color: ['#74d1fd', '#009ae4', '#0071c1'],
            // 设置图表的位置
            grid: {
              x: 60, // 左间距
              y: 80, // 上间距
              x2: 60, // 右间距
              y2: 40, // 下间距
              containLabel: true // grid 区域是否包含坐标轴的刻度标签, 常用于『防止标签溢出』的场景
            },
            // 提示框组件
            tooltip: {
              trigger: 'axis', // 触发类型, axis: 坐标轴触发
              axisPointer: {
              	// 指示器类型  'line' 直线指示器 'shadow' 阴影指示器 'none' 无指示器
              	// 'cross' 十字准星指示器 其实是种简写,表示启用两个正交的轴的 axisPointer 
                type: 'none' 
              },
              textStyle: {
                color: '#cdd3ee' // 文字颜色
              },
              // 提示框浮层内容格式器,支持字符串模板和回调函数两种形式 折线(区域)图、柱状(条形)图、K线图
              // {a}(系列名称),{b}(类目值),{c}(数值), {d}(无)
              formatter: '{b}<br />{a0}: {c0}%<br />{a1}: {c1}%<br />{a2}: {c2}%'
            },
            // 图例组件
            legend: {
              textStyle: { // 文本样式
                fontSize: 16,
                color: '#cdd3ee'
              },
              top: 13, // 定位
              data: [ '已完成', '进行中', '未完成' ] // 图例的数据数组
            },
            // X轴
            xAxis: {
              type: 'value', // 坐标轴类型,   'value' 数值轴,适用于连续数据
              // 坐标轴刻度
              axisTick: {
                show: false // 是否显示坐标轴刻度 默认显示
              },
              // 坐标轴轴线
              axisLine: { // 是否显示坐标轴轴线 默认显示
                show: false // 是否显示坐标轴轴线 默认显示
              },
              // 坐标轴在图表区域中的分隔线
              splitLine: {
                show: false // 是否显示分隔线。默认数值轴显示
              },
              // 坐标轴刻度标签
              axisLabel: {
                show: false // 是否显示刻度标签 默认显示
              }
            },
            yAxis: [
              // 左侧Y轴
              {
                // 坐标轴类型,  'category' 类目轴,适用于离散的类目数据
                // 为该类型时必须通过 data 设置类目数据
                type: 'category', 
                // 坐标轴刻度
                axisTick: {
                  show: false // 是否显示坐标轴刻度 默认显示
                },
                // 坐标轴轴线
                axisLine: { // 是否显示坐标轴轴线 默认显示
                  show: false, // 是否显示坐标轴轴线 默认显示
                  lineStyle: { // 坐标轴线线的颜色
                    color: '#cdd3ee'
                  }
                },
                // 坐标轴在图表区域中的分隔线
                splitLine: {
                  show: false // 是否显示分隔线。默认数值轴显示
                },
                // 坐标轴刻度标签
                axisLabel: {
                  show: true, // 是否显示刻度标签 默认显示
                  fontSize: 16, // 文字的字体大小
                  color: '#cdd3ee', // 刻度标签文字的颜色
                  // 使用字符串模板,模板变量为刻度默认标签 {value}
                  formatter: '{value}'
                },
                // 类目数据,在类目轴(type: 'category')中有效
                data: ['北京', '上海', '广州', '深圳', '杭州', '成都'] 
              }
            ],
            // 系列列表
            series: [
              {
                type: 'bar', // 系列类型
                name: '已完成', // 系列名称, 用于tooltip的显示, legend 的图例筛选
                // 数据堆叠,同个类目轴上系列配置相同的stack值后,后一个系列的值会在前一个系列的值上相加
                stack: '总量',
                barMaxWidth: 20, // 柱条的最大宽度,不设时自适应
                // 图形上的文本标签
                label: {
                  show: true,
                  // 标签的位置 left right bottom top inside  // 绝对的像素值 position: [10, 10] 
                  // 相对的百分比 position: ['50%', '50%']
                  position: 'inside' 
                },
                // 图形样式
                itemStyle: {
                  barBorderRadius: [10, 0, 0, 10] // 圆角半径, 单位px, 支持传入数组分别指定 4 个圆角半径
                },
                data: [20, 30, 50, 60, 45, 40] // 系列中的数据内容数组
              },
              {
                type: 'bar', // 系列类型
                name: '进行中', // 系列名称, 用于tooltip的显示, legend 的图例筛选
                // 数据堆叠,同个类目轴上系列配置相同的stack值后,后一个系列的值会在前一个系列的值上相加
                stack: '总量',
                barMaxWidth: 20, // 柱条的最大宽度,不设时自适应
                // 图形上的文本标签
                label: {
                  show: true,
                  // 标签的位置 left right bottom top inside  // 绝对的像素值 position: [10, 10] 
                  // 相对的百分比 position: ['50%', '50%']
                  position: 'inside' 
                },
                data: [60, 30, 20, 10, 45, 30] // 系列中的数据内容数组
              },
              {
                type: 'bar', // 系列类型
                name: '未完成', // 系列名称, 用于tooltip的显示, legend 的图例筛选
                // 数据堆叠,同个类目轴上系列配置相同的stack值后,后一个系列的值会在前一个系列的值上相加
                stack: '总量',
                barMaxWidth: 20, // 柱条的最大宽度,不设时自适应
                // 图形上的文本标签
                label: {
                  show: true,
                  // 标签的位置 left right bottom top inside  // 绝对的像素值 position: [10, 10] 
                  // 相对的百分比 position: ['50%', '50%']
                  position: 'inside' 
                },
                // 图形样式
                itemStyle: {
                  barBorderRadius: [0, 10, 10, 0] // 圆角半径, 单位px, 支持传入数组分别指定 4 个圆角半径
                },
                data: [20, 40, 30, 30, 10, 30] // 系列中的数据内容数组
              }
            ]
          })
        }
      }
    }
    </script>
    
    <style scoped>
    .wrapper {
      width: 100%;
    }
    .wrapper .chart {
      width: 60%;
      height: 400px;
      margin: 100px auto 0;
      background: url(../../public/static/bg.png) no-repeat;
      background-size: 100% 100%;
    }
    </style>
    
    
    展开全文
  • 一句话,就是说这是一个显示百分比柱状图。 然后我写出了这样的静态页面(根据实际情况,柱状图做了一些调整) 一切风平浪静,看起来是那么完美对不对。 然而不幸的事情发生了,当我把鼠标放上去的时候,提示...
  • 用ggplot2画百分比柱状图 ## 添加字体 library(showtext) ## 为了使ggplot中有中文字体,可根据自己电脑里字体的位置自行添加。 font_add("kt", "/Users/cpf/Library/Fonts/楷体_GB2312.ttf") showtext_auto() # ...
  • # libraries import numpy as np import matplotlib.pyplot as plt from matplotlib import rc import pandas as pd # Data r = [0,1,2,3,4] raw_data = {'greenBars': [20, 1.5, 7, 10, 5], 'orangeBars': [5, 15,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,127
精华内容 3,250
关键字:

百分比柱状图