使用plt.bar柱状图减小柱子之间的间隔问题

 更新时间:2023年09月14日 16:01:51   作者:Bruce-XIAO  
这篇文章主要介绍了使用plt.bar柱状图减小柱子之间的间隔问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

plt.bar柱状图减小柱子之间的间隔

原始柱状图

    import matplotlib.pyplot as plt
    num_list = [1.5, 0.6, 7.8, 6]
    plt.bar(range(len(num_list)), num_list)
    plt.show()

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.pyplot import MultipleLocator
taxinyc = {
    'gdc':{
        'rmse': {
            '16': 0.636,
            '32': 0.622,
            '64': 0.617,
            '128': 0.608
        },
        'mae': {
            '16': 0.159,
            '32': 0.153,
            '64': 0.152,
            '128': 0.151
        }
    },
    'scl':{
        'rmse': {
            '16': 0.604,
            '32': 0.608,
            '64': 0.607
        },
        'mae': {
            '16': 0.160,
            '32': 0.151,
            '64': 0.154
        }
    },
    'dcl':{
        'rmse': {
            '16': 0.612,
            '32': 0.608,
            '64': 0.610
        },
        'mae': {
            '16': 0.148,
            '32': 0.151,
            '64': 0.158
        }
    }
}
taxincd = {
    'gdc':{
        'rmse': {
            '16': 0.322,
            '32': 0.322,
            '64': 0.321,
            '128': 0.320
        },
        'mae': {
            '16': 0.117,
            '32': 0.116,
            '64': 0.115,
            '128': 0.119
        }
    },
    'scl':{
        'rmse': {
            '16': 0.324,
            '32': 0.322,
            '64': 0.321
        },
        'mae': {
            '16': 0.128,
            '32': 0.116,
            '64': 0.118
        }
    },
    'dcl':{
        'rmse': {
            '16': 0.321,
            '32': 0.322,
            '64': 0.396
        },
        'mae': {
            '16': 0.116,
            '32': 0.116,
            '64': 0.222
        }
    }
}
def plot_data(data,colors):
    for i,key1 in enumerate(data.keys()): #[gdc,scl,dcl]
        if i == 0:
            params = {
                'figure.figsize': '4, 4',
                'axes.unicode_minus':False
            }
            xx = [0., 0.7, 1.4, 2.1]
        else:
            params = {
                'figure.figsize': '3, 4',
                'axes.unicode_minus': False
            }
            xx = [0., 0.7, 1.4]
        plt.rcParams.update(params)
        for key2 in data[key1].keys(): #[rmse,mae']
            fig, ax = plt.subplots()
            hidden_dims = list(data[key1][key2].keys())
            values = list(data[key1][key2].values())
            x_center = [index + 0.3 for index in xx]
            plt.bar(xx, values, width=0.6, align='edge',color=colors)
            ax.spines['top'].set_visible(False)
            ax.spines['right'].set_visible(False)
            if key2 == 'rmse':
                yrange = 0.7
                ax.yaxis.set_major_locator(MultipleLocator(0.1))
            else:
                yrange = 0.18
                ax.yaxis.set_major_locator(MultipleLocator(0.03))
            plt.ylim(0.,yrange)  # y轴取值范围
            plt.ylabel(str.upper(key2))
            plt.xticks(x_center, hidden_dims)  # 这儿的0.3是配合宽度0.6来的,是他的一半,目的是让刻度线在柱子的中间
            # plt.xlabel("特征", labelpad=8.5)
            plt.axis('on')  # 增加这行关闭坐标轴显示,但仍有空白区域
            # plt.margins(0.1) 图内距离坐标轴0.1
            plt.subplots_adjust(left=0.2) #整个图距离画布左边距0.2,防止ylabel消失
            # 关键在于bbox_inches = 'tight',pad_inches = 0,去掉空白区域
            plt.savefig('result/{}_{}.png'.format(key1,key2), bbox_inches='tight', pad_inches=0)
            plt.show()
            plt.close(fig)
if __name__ == '__main__':
    colors = ['#35478C','#4E7AC7','#2FB2F0','#ADD5F7']
    plot_data(taxinyc,colors)
    # num_list = [1.5, 0.6, 7.8, 6]
    # plt.bar(range(len(num_list)), num_list)
    # plt.show()

效果图:

折线图版本

import numpy as np
import matplotlib.pyplot as plt
taxinyc = {
    'gdc':{
        'rmse': {
            '16': 0.636,
            '32': 0.622,
            '64': 0.617,
            '128': 0.608
        },
        'mae': {
            '16': 0.159,
            '32': 0.153,
            '64': 0.152,
            '128': 0.151
        }
    },
    'scl':{
        'rmse': {
            '16': 0.604,
            '32': 0.608,
            '64': 0.607
        },
        'mae': {
            '16': 0.160,
            '32': 0.151,
            '64': 0.154
        }
    },
    'dcl':{
        'rmse': {
            '16': 0.612,
            '32': 0.608,
            '64': 0.610
        },
        'mae': {
            '16': 0.148,
            '32': 0.151,
            '64': 0.158
        }
    }
}
taxicd = {
    'gdc':{
        'rmse': {
            '16': 0.322,
            '32': 0.322,
            '64': 0.321,
            '128': 0.320
        },
        'mae': {
            '16': 0.117,
            '32': 0.116,
            '64': 0.115,
            '128': 0.119
        }
    },
    'scl':{
        'rmse': {
            '16': 0.324,
            '32': 0.322,
            '64': 0.321
        },
        'mae': {
            '16': 0.128,
            '32': 0.116,
            '64': 0.118
        }
    },
    'dcl':{
        'rmse': {
            '16': 0.321,
            '32': 0.322,
            '64': 0.396
        },
        'mae': {
            '16': 0.116,
            '32': 0.116,
            '64': 0.222
        }
    }
}
t1=['16','32','64','128']
t2= [16,32,64]
mae = [0.159,0.153,0.152,0.151]
rmse = [0.148,0.151,0.158]
x1 = [0.5,1.0,1.5,2.0]
x2 = [0.5,1.0,1.5]
data = taxicd
figure,ax=plt.subplots(1,3,sharey=True,figsize=(12,4))
index = ['(a)','(b)','(c)']
for i,(idx,key1) in enumerate(zip(index,data.keys())):  # [gdc,scl,dcl]
    for key2 in ['mae']:  # [rmse,mae']
        hidden_dims = list(data[key1][key2].keys())
        values = list(data[key1][key2].values())
        title = idx + 'hidden units of ' + str.upper(key1)
        if i == 0:
            ax[i].plot(x1, values, 'ro--')
            ax[i].set_ylabel(str.upper(key2),fontdict={'fontsize':12})
            ax[i].set_xticks(x1)
            ax[i].set_xticklabels(hidden_dims,fontdict={'fontsize':12})
        else:
            ax[i].plot(x2, values, 'ro--')
            ax[i].set_xticks(x2)
            ax[i].set_xticklabels(hidden_dims,fontdict={'fontsize':12})
        ax[i].set_title(title,fontdict={'fontsize':12})
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)
plt.savefig('./taxicd_line_graph_hidden_units.png', bbox_inches='tight', pad_inches=0.1)
figure.show()

plt.bar柱状图中如何改变每个柱子之间的间距

这是我的柱状图,因为之间间距过窄导致数字挤到了一起,我搜了很多解决间距的方法,但是并没有针对我这个问题的解决办法。。。

后来我才发现其实非常简单:只用设置figsize的大小就好,figsize大了,间距自然就大了。

import matplotlib.pyplot as plt
# 设置figsize的大小
plt.figure(figsize=(15, 5), dpi=80)
# 画柱状图,width可以设置柱子的宽度
plt.bar(np.array(x[flag]), np.array(np.sort(y)), width=0.7)
# 设置x轴字体的大小
plt.xticks(fontsize=12)
plt.show()

效果图:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 10个Python小技巧你值得拥有

    10个Python小技巧你值得拥有

    这篇文章主要介绍了10个Python小技巧,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • python基础之while循环语句的使用

    python基础之while循环语句的使用

    这篇文章主要介绍了python基础之while循环语句的使用,文中有非常详细的代码示例,对正在学习python的小伙伴们有一定的帮助,需要的朋友可以参考下
    2021-04-04
  • django项目运行因中文而乱码报错的几种情况解决

    django项目运行因中文而乱码报错的几种情况解决

    django是一个不错的WEB开源框架。今天测试,发现有些页面中文乱码,后来发现出现中文乱码还不止一种情况,所以这篇文章主要给大家介绍了关于django项目运行过程中因为中文而导致乱码报错的几种情况的解决方法,需要的朋友可以参考下。
    2017-11-11
  • python编程开发时间序列calendar模块示例详解

    python编程开发时间序列calendar模块示例详解

    这篇文章主要为大家介绍了python编程开发时间序列calendar模块示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步早日升职加薪
    2021-11-11
  • 深入解读Python解析XML的几种方式

    深入解读Python解析XML的几种方式

    这篇文章主要为大家详细介绍了深入解读Python解析XML的几种方式,以ElementTree模块为例,演示具体使用方法和场景,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • pandas读取文件夹下所有excel文件的实现

    pandas读取文件夹下所有excel文件的实现

    最近需要做一个需求,要求汇总一个文件夹所有的excel文件,所以本文就来介绍一下pandas读取文件夹下所有excel文件的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • PyQt5中QAbstractScrollArea的详细用法教程

    PyQt5中QAbstractScrollArea的详细用法教程

    在PyQt5中,QAbstractScrollArea是一个非常重要的类,它提供了滚动区域的基本框架,允许用户通过滚动条来查看超出可视区域的内容,本文将结合具体案例,详细讲解QAbstractScrollArea的用法,需要的朋友可以参考下
    2024-08-08
  • python中try的使用方法详解

    python中try的使用方法详解

    这篇文章主要给大家介绍了关于python中try使用的相关资料,try语句用于包含一段可能引发异常的代码块,并允许我们定义如何处理这些异常,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • Python使用sorted对字典的key或value排序

    Python使用sorted对字典的key或value排序

    这篇文章主要介绍了Python使用sorted对字典的key或value排序,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 跟老齐学Python之有容乃大的list(3)

    跟老齐学Python之有容乃大的list(3)

    现在是讲lis的第三章了。俗话说,事不过三,不知道在开头,我也不知道这一讲是不是能够把基础的list知识讲完呢。哈哈。其实如果真正写文章,会在写完之后把这句话删掉的。而我则是完全像跟看官聊天一样,就不删除了。
    2014-09-09

最新评论