精华内容
下载资源
问答
  • 2022-04-07 18:35:57

    一.示例

    二.源码

    //![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]
        QPercentBarSeries *series = new QPercentBarSeries();
        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 percentbarchart example");
        chart->setAnimationOptions(QChart::SeriesAnimations);
    //![3]
    
    //![4]
        QStringList categories;
        categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun";
        QBarCategoryAxis *axis = new QBarCategoryAxis();
        axis->append(categories);
        chart->createDefaultAxes();
        chart->setAxisX(axis, series);
    //![4]
    
    //![5]
        chart->legend()->setVisible(true);
        chart->legend()->setAlignment(Qt::AlignBottom);
    //![5]
    
    //![6]
        QChartView *chartView = new QChartView(chart);
        chartView->setRenderHint(QPainter::Antialiasing);

    更多相关内容
  • 背景前言最近打比赛遇到的问题有点多,在绘制了堆叠柱状图之后,队长说不仅要看到具体的数量多少的堆叠图,还要看到具体占比的百分比柱状图,具体的样例可参考灵魂画图,因此也就产生了绘制百分比柱状图的需求 2....

    手动反爬虫:原博地址

    知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息

    1. 背景前言

    最近打比赛遇到的问题有点多,在绘制了堆叠柱状图之后,队长说不仅要看到具体的数量多少的堆叠图,还要看到具体占比的百分比柱状图,具体的样例可参考灵魂画图,因此也就产生了绘制百分比柱状图的需求

    77069c2701d62619dc475c30e2b05578.png

    2. 官方网址示例

    2.1 matplotlib_percentage_stacked_bar_plot

    里面的代码是真的长,完全属于一步步进行“堆砖块”然后才形成的百分比堆叠图,最终得出图结果如下:

    33526a292c27a6e21aa79090eabbc557.png

    2.2 percent-stacked-barplot

    这个网址给出的代码比第一个网址给出的较为简洁,但是本质上都是属于一个个“砖块”的叠加,代码及生成的示例图形如下:

    # 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, 5, 10, 15],'blueBars': [2, 15, 18, 5, 10]}

    df = pd.DataFrame(raw_data)

    # From raw value to percentage

    totals = [i+j+k for i,j,k in zip(df['greenBars'], df['orangeBars'], df['blueBars'])]

    greenBars = [i / j * 100 for i,j in zip(df['greenBars'], totals)]

    orangeBars = [i / j * 100 for i,j in zip(df['orangeBars'], totals)]

    blueBars = [i / j * 100 for i,j in zip(df['blueBars'], totals)]

    # plot

    barWidth = 0.85

    names = ('A','B','C','D','E')

    # Create green Bars

    plt.bar(r, greenBars, color='#b5ffb9', edgecolor='white', width=barWidth)

    # Create orange Bars

    plt.bar(r, orangeBars, bottom=greenBars, color='#f9bc86', edgecolor='white', width=barWidth)

    # Create blue Bars

    plt.bar(r, blueBars, bottom=[i+j for i,j in zip(greenBars, orangeBars)], color='#a3acff', edgecolor='white', width=barWidth)

    # Custom x axis

    plt.xticks(r, names)

    plt.xlabel("group")

    # Show graphic

    plt.show()

    → 输出的结果为:(这个结果相对好一点)

    24928f5f3d69bfdc479db1057ba69338.png

    2.3 Discrete distribution as horizontal bar chart

    官方给出的示例图是下面这样的,看的第一眼是非常符合自己的要求的,而且还有不同的配色以及主题的标签设置及文本文字标注

    3cf0a7f4fed3c9f476dca8561aa8a3c2.png

    接着就看一下给出的源码,如下,代码封装的挺不错的,还有可以直接调用的函数,按照官方示例的代码运行后的确可以实现上方的图形效果(内心狂喜~~ )

    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):

    """

    Parameters

    ----------

    results : dict

    A mapping from question labels to a list of answers per category.

    It is assumed all lists contain the same number of entries and that

    it matches the length of *category_names*.

    category_names : list of str

    The category labels.

    """

    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]))

    fig, ax = plt.subplots(figsize=(9.2, 5))

    ax.invert_yaxis()

    ax.xaxis.set_visible(False)

    ax.set_xlim(0, np.sum(data, axis=1).max())

    for i, (colname, color) in enumerate(zip(category_names, category_colors)):

    widths = data[:, i]

    starts = data_cum[:, i] - widths

    ax.barh(labels, widths, left=starts, height=0.5,

    label=colname, color=color)

    xcenters = starts + widths / 2

    r, g, b, _ = color

    text_color = 'white' if r * g * b < 0.5 else 'darkgrey'

    for y, (x, c) in enumerate(zip(xcenters, widths)):

    ax.text(x, y, str(int(c)), ha='center', va='center',

    color=text_color)

    ax.legend(ncol=len(category_names), bbox_to_anchor=(0, 1),

    loc='lower left', fontsize='small')

    return fig, ax

    survey(results, category_names)

    plt.show()

    这个官方给出的代码,看似可以解决问题,但是直接调用之后发现,并不是百分比柱状图的结果,比如这里将数据稍作修改,更改数据如下,然后再运行代码

    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, 190, 5, 30, 38] #在19后面加个0

    }

    → 输出的结果为:(实际上这个图本身就不是百分比堆叠柱状图,根据官方的名称是离散分布的水平柱形图)

    989b9da785a2849578b1f68cb0cb7705.png

    然后百度搜索相关的python绘制的百分比堆叠柱状图基本上都是进行一个个“垒砌”的,看到百度搜索返回的第一个结果,竟然把这个官方的示例声称为自己封装的函数,标题还是绘制百分比柱状图,误导读者(本人也是被忽悠了,直到看到官网示例和实际调试)

    3. 问题解决

    既然没有现成的可以直接copy的代码,而且也没有像绘制堆叠图时候直接就拥有stacked的参数,所以就必须自己手动整理了。前面的第三个示例代码的框架可以直接拿过来用,就不用再进行编写了,只需要修改部分内容即可

    3.1 全部代码

    仿照之前的代码形式,进行代码改写,只需要传入DataFrame数据即可,如下

    def percentage_bar(df):

    labels = df.index.tolist() #提取分类显示标签

    results = df.to_dict(orient = 'list') #将数值结果转化为字典

    category_names = list(results.keys()) # 提取字典里面的类别(键-key)

    data = np.array(list(results.values())) #提取字典里面的数值(值-value)

    category_colors = plt.get_cmap('RdYlGn')(np.linspace(0.15, 0.85, data.shape[0]))

    #设置占比显示的颜色,可以自定义,修改括号里面的参数即可,如下

    #category_colors = plt.get_cmap('hot')(np.linspace(0.15, 0.85, data.shape[0]))

    fig, ax = plt.subplots(figsize=(12, 9)) #创建画布,开始绘图

    ax.invert_xaxis()#这个可以通过设置df中columns的顺序调整

    ax.yaxis.set_visible(False) #设置y轴刻度不可见

    ax.set_xticklabels(labels=labels, rotation=90) #显示x轴标签,并旋转90度

    ax.set_ylim(0,1) #设置y轴的显示范围

    starts = 0 #绘制基准

    for i, (colname, color) in enumerate(zip(category_names, category_colors)):

    heights = data[i,: ]/ data.sum(axis =0) #计算出每次遍历时候的百分比

    ax.bar(labels, heights, bottom=starts, width=0.5,label=colname, color=color,edgecolor ='gray') # 绘制柱状图

    xcenters = starts + heights/2 #进行文本标记位置的选定

    starts += heights #核心一步,就是基于基准上的百分比累加

    #print(starts) 这个变量就是能否百分比显示的关键,可以打印输出看一下

    percentage_text = data[i,: ]/ data.sum(axis =0) #文本标记的数据

    r, g, b, _ = color # 这里进行像素的分割

    text_color = 'white' if r * g * b < 0.5 else 'k' #根据颜色基调分配文本标记的颜色

    for y, (x, c) in enumerate(zip(xcenters, percentage_text)):

    ax.text(y, x, f'{round(c*100,2)}%', ha='center', va='center',

    color=text_color, rotation = 90) #添加文本标记

    ax.legend(ncol=len(category_names), bbox_to_anchor=(0, 1),

    loc='lower left', fontsize='large') #设置图例

    return fig, ax #返回图像

    比如把刚刚示例中的数据转化为DataFrame数据,如下

    a533bc66d6be6abab9a537043fc64988.png

    然后将df作为参数直接传递到percentage_bar函数中,看看结果输出,内部虽然设置x轴标签旋转90度,但是在函数外边还是可以直接调整其方向,这里就是取消旋转了,而且在最后的文本标记中采用的是百分比进行进标注的,这样更能清晰的明确各方的占比情况

    514e53ff18bb68ab1b78a3b0c9581954.png

    3.2 代码试错

    还是和最初一样,在最后一行数据的19后面添加一个0,变成190,这里顺带将y轴的刻度范围调整为(0,1.1),来查看是否符合百分比的要求,然后执行代码及输出结果如下

    bca4875b1ac6f4a49575d356363b667b.png

    4. 实操检验

    上面已经对函数进行了试错,无误后直接将函数放置到自己自定义的第三方模块下,方便自己调用,关于这步的操作,可以参考博客将自定义常用的一些函数封装成可以直接调用的模块方法

    4.1 实操测试

    d2edf5ae0a2325f5f21a298d93bfe8c9.png

    4.2 更换标签

    如果需要更换标签显示(df的标签与列标题互换),只需要将df转置即可,如下

    38b8f83f7ef8f90f6dbe176a15ebb542.png

    4.3 部分标签输出

    如果需要输出部分的标签,可以直接对df的columns进行切片即可(如果更换标签index转置之后也是同理),输出如下,比如这里只取两个标签

    4b3fe399f61e641a96b1b3422c37865c.png

    最后,梳理不易,码字分享希望能够帮助大家。

    来源:oschina

    链接:https://my.oschina.net/u/4273264/blog/4301312

    展开全文
  • 最全的条形图绘制方法总结,毕业论文绘图必须教程,方便快捷解决你的绘图困扰
  • python matplotlib 绘制百分比堆积柱状图

    需求:对kraken2比对报告进行统计后,取top10结果,然后绘制物种分类的百分比堆积柱状图

    输入文件:

    species1species2speciesn
    sample1125
    sample2236
    sample3347


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

    table= pd.read_table("XXX.xls",sep="\t",index_col=0)   #读取文件,并将第一列设为index
    table2=table.sum(axis=1,skipna = True)        #dataframe 每行求和
    df=table.div(table2,axis='rows')                     #计算占比并存为新的dataframe

    category_names =df.columns.values.tolist()        #提取列名 存为list


    results= df.T.to_dict('list')                                 #行名为key  值为value 存为dic

    labels = list(results.keys())                      #确定x轴
    data = np.array(list(results.values()))      #确定数据
    data_cum = data.cumsum(axis=1)         #确定柱子起始位置    


    category_colors = plt.get_cmap('hsv')(np.linspace(0,1, data.shape[1]))   #提取颜色   'hsv' 该值需根据实际情况选择

    fig, ax = plt.subplots(figsize=(40, 30))    #绘图
    plt.xticks(fontsize=12)                            #x轴坐标刻度字体大小
    plt.yticks(fontsize=15)                             #y轴坐标刻度字体大小
    ax.set_ylim(0, np.sum(data, axis=1).max())   #设置y轴范围
    x_num=np.arange(len(category_names))
    ax.set_xlim(min(x_num)-1,max(x_num)+1)    #设置x轴范围


    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)

    ax.legend(loc='right')         #legend  位置
        
    plt.show()
     

    结果示例:

    展开全文
  • 使用matplotlib创建百分比堆积柱状图的思路与堆积柱状图类似,只不过bottom参数累计的不是数值而是百分比,因此,需要事先计算每组柱子的数值总和,进而求百分比。 未使用numpy版本 适用于少量数据,数据结构需要...

    使用matplotlib创建百分比堆积柱状图的思路与堆积柱状图类似,只不过bottom参数累计的不是数值而是百分比,因此,需要事先计算每组柱子的数值总和,进而求百分比。
    在这里插入图片描述

    未使用numpy版本

    适用于少量数据,数据结构需要手动构造。

    import matplotlib.pyplot as plt
    
    labels = ['G1', 'G2', 'G3', 'G4', 'G5']
    first = [20, 34, 30, 35, 27]
    second = [25, 32, 34, 20, 25]
    third = [21, 31, 37, 21, 28]
    fourth = [26, 31, 35, 27, 21]
    data = [first, second, third, fourth]
    
    x = range(len(labels))
    width = 0.35
    
    # 将bottom_y元素都初始化为0
    bottom_y = [0] * len(labels)
    # 计算每组柱子的总和,为计算百分比做准备
    sums = [sum(i) for i in zip(first, second, third, fourth)]
    for i in data:
        # 计算每个柱子的高度,即百分比
        y = [a/b for a, b in zip(i, sums)]
        plt.bar(x, y, width, bottom=bottom_y)
        # 计算bottom参数的位置
        bottom_y = [(a+b) for a, b in zip(y, bottom_y)]
    
    plt.xticks(x, labels)
    plt.title('Percent stacked bar ')
    plt.show()
    

    使用numpy版本

    第一个版本的缺陷在于数据需要手动构造,而且计算稍微繁琐一些。
    使用numpy便于处理规模比较大且已存储在文件中数据的数据,计算更简便。

    import numpy as np
    import matplotlib.pyplot as plt
    
    labels = ['G1', 'G2', 'G3', 'G4', 'G5']
    first = [20, 34, 30, 35, 27]
    second = [25, 32, 34, 20, 25]
    third = [21, 31, 37, 21, 28]
    fourth = [26, 31, 35, 27, 21]
    data = [first, second, third, fourth]
    
    x = range(len(labels))
    width = 0.35
    
    # 将bottom_y元素都初始化为0
    bottom_y = np.zeros(len(labels))
    data = np.array(data)
    # 按列计算计算每组柱子的总和,为计算百分比做准备
    sums = np.sum(data, axis=0)
    for i in data:
        # 计算每个柱子的高度,即百分比
        y = i / sums
        plt.bar(x, y, width, bottom=bottom_y)
        # 计算bottom参数的位置
        bottom_y = y + bottom_y
    
    plt.xticks(x, labels)
    plt.title('Percent stacked bar ')
    plt.show()
    
    展开全文
  • 双组百分比堆积柱形图制作

    千次阅读 2022-03-18 16:19:55
    双组百分比堆积柱形图制作
  • matplotlib之堆积柱状图百分比柱状图

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

    千次阅读 2022-01-28 00:19:05
    #1.设置工作目录setwd("D:\\StackedBarChart")#直接使用R自带函数,不用调用其他R包 1 原始数据文件格式。行名为样地名,列名为物种名。 ...#2....2绘图使用数据格式 ...3.绘制Stacked...
  • 随便画一个百分比堆积柱状图 活不多说直接上代码: library('ggplot2') #加载所需的包 data.diet <- data.frame(fre = c(7,71,33,45), diet = c('Omnivore', 'PlantSeed', 'Omnivore', 'PlantSeed'), beh = c('L'...
  • 上图是Acta Neuropathologica(最新影响因子15.876)文献中(doi.org/10.1007/s00401-018-1954-4)散点图与均值加减误差共存图,这种统计图表的优势是相较柱状图除了能够显示均值与误差外还可以显示所有数据点的分布,...
  • 文章目录柱状图一个简单柱状图改变其颜色设置标签堆叠柱状图横向条形图并列柱状图饼状图简单饼状图一块饼图到中心距离设置颜色显示百分比 柱状图 一个简单柱状图 import matplotlib.pyplot as plt num_list=[1,5,6.5...
  • 封装接口直接利用DataFrame绘制百分比柱状图1. 背景前言2. 官方网址示例2.1三级目录 手动反爬虫: 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息 ...
  • 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'...
  • 本文转载自:星星联盟会Hello,...在之前的介绍中,我们首先介绍了如何使用Graphpad prism画出ERP波形图,后面接着介绍了如何用它画出折线图和单维度分组柱形图。除了折线图与单维度柱状图之外,在平时阅读文献的过...
  • python matplotlib 为柱状图添加百分比

    千次阅读 2021-02-04 04:29:01
    背景最近使用python matplotlib绘制柱状图时,想要更清晰地查看每一项占总数的百分比,在搜索后发现matplotlib.pyplot.bar方法并没有提供这个参数,于是自己尝试实现了这个功能。实现方法实现方法很简单,利用plt....
  • excel堆积柱形图显示百分比 在Excel堆积图中显示百分比标签的方法,前天刚学习了一个excel的新技术,叫“excel堆积柱形图显示百分比”授课老师对我们说,这一技术的专业全称为“excel堆积柱形图显示百分比 在Excel...
  • 一款基于html5 canvas和jQuery绘制的3D水池百分比柱形图特效,点击柱状图可以动态改变水量高度值!
  • 上图是Acta Neuropathologica(最新影响因子15.876)文献中(http://doi.org/10.1007/s00401-018-1954-4)散点图与均值加减误差共存图这种统计图表的优势是相较柱状图除了能够显示均值与误差外还可以显示所有数据点的...
  • 通过Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案。主要原因是有些论文打印出是黑白色的,不同类别之间区分不明显,所以做了这种方案。 存在一个问题:不知道如何根据填充图案设置...
  • Code1<HTML>2<head>3<title>JS百分比图和柱状图</title>4<xml:namespaceprefix="v"/>5<style>6v\:*{}{behavior=url(#default#VML)}7</style>8<...
  • JFreeChart是JAVA平台上的一个开放的图表绘制类库。...JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产...
  • matplotlib bar()实现百分比堆积柱状图

    千次阅读 2021-03-17 01:00:36
    使用matplotlib创建百分比堆积柱状图的思路与堆积柱状图类似,只不过bottom参数累计的不是数值而是百分比,因此,需要事先计算每组柱子的数值总和,进而求百分比。未使用numpy版本适用于少量数据,数据结构需要手动...
  • let xAxisValue1 = [63, 89, 44, 34, 3, 98]; let xAxisValue2 = [23, 89, 44, 34, 3, 98]; option = { legend: { data: [‘退出项目’, ‘未退出项目’], bottom: 0 }, title: { text: ‘已退出项目占比’, ...
  • 本文实例为大家分享了python使用Plotly绘图工具绘制柱状图的具体代码,供大家参考,具体内容如下 使用Plotly绘制基本的柱状图,需要用到的函数是graph_objs 中 Bar函数 通过参数,可以设置柱状图的样式。 通过barmod...
  • 下面我就介绍一下如何制作柱形图图表完美呈现百分比,提升您报表的颜值。 具体步骤: 1、给表格添加一列辅助列,如下图: 2、插入柱形图,即选取A列、D列、E列,点击菜单栏的【插入】—【二维柱形图】; 3、插入的...
  • qcustomplot 绘制 饼状图和 柱状图 例子
  • 本文使用SPSS软件快速计算基本统计量,接着输入到Graphpad中,绘制带误差线的分组柱形图,非常方便实用。SPSS计算基本统计量1、数据从EXCEL导入SPSS2、点击Data,选择Split File3、在SplitFile对话框...
  • echarts如何在柱状图上显示百分比

    千次阅读 2020-12-02 09:22:07
    echarts如何在柱状图上显示百分比 series: [{ type: 'bar', itemStyle: { normal: { label: { show: true, position: 'inside',//数据在中间显示 formatter:'{c}%'//百分比显示 } } }, data: [46, 2
  • Origin8画图:画百分比堆积柱形图

    万次阅读 2018-05-11 14:38:36
    1.简介 用Origin8绘制百分比堆积柱形图。图中的数据Type1和Type2分别表示两个类型的数据所占的比例。 2.画图步骤(1)新建worksheet表,添加相关数据。然后选中全部数据(一个X多个Y),plot-Columns/Bars-Stack ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,808
精华内容 2,323
关键字:

如何绘制百分比柱形图