(代码详解)plt.bar()+plt.text()+画直方图/柱状图+调参美化+修改图的背景颜色+添加网格线+设置直方图的随机填充颜色

您所在的位置:网站首页 python直方图和柱状图的区别 (代码详解)plt.bar()+plt.text()+画直方图/柱状图+调参美化+修改图的背景颜色+添加网格线+设置直方图的随机填充颜色

(代码详解)plt.bar()+plt.text()+画直方图/柱状图+调参美化+修改图的背景颜色+添加网格线+设置直方图的随机填充颜色

2024-06-05 07:38| 来源: 网络整理| 查看: 265

目录

一、 目的:

二、数据集:

三、完整代码:

四、代码解析(上面的完整代码分开讲解):

(一)plt.bar()参数

补充1:分别给每根柱子设置宽度

 补充2:使每根柱子的填充颜色随机

(二)plt.tetx()参数

(三)修改背景颜色

(四)添加网格线

(五)写个for循环,将plt.bar()和plt.text()整合到一起

一、 目的:

下面介绍如何利用python画直方图/柱状图,并且美化,得到如下图:

二、数据集:

导入数据集:

import pandas as pd import matplotlib.pyplot as plt data=pd.read_excel("C:\\Users\\86159\Desktop\\CSDN\\直方图数据.xls")

三、完整代码: plt.figure(figsize=(16,7)) #x轴为"学校名称"的数据 x= data["学校名称"] #y轴为"学校数量"的数据 y= data["专业数量"] plt.bar(x,y,width=0.5,edgecolor='yellow', align="center",alpha=0.5,bottom=0,color="red", linewidth=5,hatch='/') #x轴数据旋转45°,并且字体大小设置为15 plt.xticks(rotation=45,fontsize=15) # 用于在图表上添加文本标签 for a,b in zip(x,y): plt.text(a, b + 2, '%.0f' % b,ha='center',va='center',fontsize=20, bbox=dict(boxstyle='round,pad=0.1', fc='yellow', ec='k',lw=0.5 ,alpha=0.5)) plt.xlabel('学校名称',fontsize=20)#x轴标签 plt.ylabel('专业数目',fontsize=20)#y轴标签 plt.title('专业数目最多的前 20 个学校',fontsize=20) plt.tick_params(labelsize=16)#设置坐标轴上标签的字体大小 plt.gca().set_facecolor((1, 0.5, 0.6, 0.1)) #或者plt.gca().set_facecolor("lightgrey") plt.grid(True,alpha=0.4) plt.show() 四、代码解析(上面的完整代码分开讲解): (一)plt.bar()参数

      有一些小细节设置,如字体大小等等,直接在代码注释中标注了

plt.figure(figsize=(16,7)) #x轴为"学校名称"的数据 x= data["学校名称"] #y轴为"学校数量"的数据 y= data["专业数量"] plt.bar(x,y,width=0.5,edgecolor='yellow', align="center",alpha=0.5,bottom=0,color="red", linewidth=5,hatch='/') #x轴数据旋转45°,并且字体大小设置为15 plt.xticks(rotation=45,fontsize=15)

结果如下:

(1)`x`:表示柱子的横坐标。

(2)`y`:表示柱子的高度。

(3)width`:控制柱子的宽度,这里是0.5。

(4)`edgecolor`:表示柱子边缘的颜色,这里是'yellow',表示黄色。还可以选择其它颜色,例如:

                1. 'k':黑色                 2. 'w':白色                 3. 'r':红色                 4. 'g':绿色                 5. 'b':蓝色                 6. 'c':青色                 7. 'm':洋红色                 8. 'y':黄色                 9. 'orange':橙色                10. 'purple':紫色 等

(5)align:表示柱子如何对齐,这里是'center',表示柱子中心对齐。它有以下选择:

                'center':将柱子居中对齐。这是默认值,也是最常见的对齐方式。                 'edge':将柱子的边缘与x轴刻度线对齐。x位于柱子的左侧。如果想让x位于柱子右侧,需要同时设置负width 以及align='edge'。

(6)alpha:表示柱子的透明度,这里是0.5,表示半透明。

(7)bottom:柱子的基准高度。默认值为0。

     小伙伴可以试一试:

      ①bottom=0,plt.bar(x,y,bottom=0)

      ②bottom=20,plt.bar(x,y,bottom=20)

      ③y+20,bottom=20,plt.bar(x,y+20,bottom=20)

      观察三者画出来图的纵坐标,体会一下。

(8)color:柱子的填充色。

(9)linewidth:柱子边缘宽度。如果为0,不绘制柱子边缘。(linewidth和edgecolor配合着用,效果更好。小伙伴可以自己体会一下,有问题可以留言哈)

(10)hatch:柱子填充符号。字符串,取值范围为 {'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'},符号可以组合,也可以重复。例如hatch='+/'或hatch='//',增加密度。

补充1:分别给每根柱子设置宽度

       刚刚上面提到了width`:控制柱子的宽度,width=0.5,则所有的柱子宽度都是0.5

       如果想让不同的柱子由不同的宽度呢?这组数据有15条数据,也就是绘画出15根柱子,可以分别指定每根柱子的宽度,如下:

width=[0.5,0.8,0.1,0.5,0.5,0.5,0.5,0.5,0.6,0.3,0.2,0.9,0.1,0.5,0.2]

 补充2:使每根柱子的填充颜色随机

      要让填充颜色随机,可以使用random.choice()函数从颜色列表中随机选择一个颜色。以下是修改后的代码:

plt.figure(figsize=(16,7)) #x轴为"学校名称"的数据 x= data["学校名称"] #y轴为"学校数量"的数据 y= data["专业数量"] import random colors = ['red', 'blue', 'green', 'yellow', 'orange', 'purple'] color_list = [random.choice(colors) for _ in range(len(x))] # 随机选择一个颜色列表 for i in range(len(x)): plt.bar(x[i], y[i], width=0.5, edgecolor='yellow', align="center", alpha=0.5, bottom=0, color=color_list[i], linewidth=5, hatch='/') #x轴数据旋转45°,并且字体大小设置为15 plt.xticks(rotation=45,fontsize=15)

 结果如下:

(二)plt.tetx()参数

      有一些小细节设置,如字体大小等等,直接在代码注释中标注了

# 用于在图表上添加文本标签 for a,b in zip(x,y): plt.text(a, b + 2, '%.0f' % b,ha='center',va='center',fontsize=20, bbox=dict(boxstyle='round,pad=0.1', fc='yellow', ec='k',lw=0.5 ,alpha=0.5)) plt.xlabel('学校名称',fontsize=20)#x轴标签 plt.ylabel('专业数目',fontsize=20)#y轴标签 plt.title('专业数目最多的前 20 个学校',fontsize=20) plt.tick_params(labelsize=16)#设置坐标轴上标签的字体大小

 结果如下:

(1) `a`和`b`分别是文本标签的位置坐标,即文本标签会出现在哪个位置。

       在这里,它们分别对应于数据点的x值和y值。

      `b + 2`表示文本标签的内容,即数据点的y值加上了2的偏移量。也就是文本标签比原先的位置

高了两个单位距离。这样可以使文本标签距离数据点稍远一些。

(2)`%.0f' % b表示文本标签的内容格式,即对数据点的y值进行浮点数舍入(四舍五入)并使用字

符串格式化(`%`)输出。

      例如,如果b等于1.234,那么 label 将显示为 "1.2"。

(3)参数verticalalignment(简称va):垂直对齐方式 ,总的来说,效果是控制标签离直方图的柱子的远近

    可选:‘center’ /‘top’ / ‘bottom’ / ‘baseline’ /‘center_baseline’

    top离直方图柱子最近,其次是center,然后是baseline和center_baseline,这两个效果上区别好像是不明显,bottom最远。

   所以当我们发现默认的label的位置不理想的时候,我们可以通过设置此参数来控制效果。

(4) 参数horizontalalignment(简称ha):水平对齐方式

   可选:‘center’ / ‘right’ / ‘left’ 

(5)`fontsize=20`表示文本标签的字体大小。在这里,字体大小设置为20。

(6)bbox给文本标签增加外框 ,其中有很多参数,如:

    boxstyle:方框外形     facecolor:(简写fc)背景颜色     edgecolor:(简写ec)边框线条颜色     edgewidth:边框线条大小

`boxstyle`参数在matplotlib的`bbox`字典中用于设置文本框的样式。

     它有以下几种选择(我查到的是可以取这些值,有更深入追求的小伙伴可以查一下还有没有其它参数选项):

     'round':创建一个圆角矩形

     'square':创建一个方形

     'circle':创建一个圆形

如:bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k',lw=1 ,alpha=0.5)

创建了 一个圆角矩形、大小为pad=0.5、fc='yellow'表示边界框的填充颜色为黄色、ec='k'表示边界框的边框颜色为黑色、lw=1表示边界框的边框宽度为1、alpha=0.5表示边界框的透明度为50%。

(三)修改背景颜色 plt.gca().set_facecolor((1, 0.5, 0.6, 0.1)) #或者plt.gca().set_facecolor("lightgrey")

结果如下:

  要修改直方图的背景颜色,可以使用plt.gca().set_facecolor()方法。

①plt.gca().set_facecolor("lightgrey")  可以直接选定背景颜色,这里是浅灰色。

②可以使用RGB颜色编码,其中第四个值表示透明度。

   如:plt.gca().set_facecolor((1, 0.5, 0.6, 0.1))  

  `(1, 0.5, 0.6, 0.1)`:这是一个包含四个元素的元组,分别表示红色、绿色、蓝色的强度(范围为0-1)以及透明度(范围为0-1)。

   具体来说,(1, 0.5, 0.6, 0.1) 表示的是红色通道、绿色通道、蓝色通道和透明度。

   其中,红色通道的值是1,绿色通道的值是0.5,蓝色通道的值是0.6,透明度(alpha)的值是0.1。

   这种颜色通道的组合形成了plt.gca().set_facecolor()设置的填充颜色。

(四)添加网格线

`linewidth`参数用于控制网格线的宽度,例如试一试linewidth=2

alpha控制透明度

color表示网格线的颜色;试一试color='b'

(五)写个for循环,将plt.bar()和plt.text()整合到一起 plt.figure(figsize=(16,7)) #x轴为"学校名称"的数据 x= data["学校名称"] #y轴为"学校数量"的数据 y= data["专业数量"] for i in range(len(data)): plt.bar(x,y,width=0.5,edgecolor='yellow', align="center",alpha=0.5,bottom=0,color="red", linewidth=5,hatch='/') plt.text(x[i],y[i]+2,'%.0f' % b,ha='center',va='center',fontsize=20, bbox=dict(boxstyle='round,pad=0.1', fc='yellow', ec='k',lw=0.5 ,alpha=0.5)) # colors = ['red', 'blue', 'green', 'yellow', 'orange', 'purple'] # for i in range(len(data)): # color = random.choice(colors) # 随机选择一个颜色 # plt.bar(x[i], y[i], width=0.5, edgecolor='yellow', align="center", alpha=0.5, # bottom=0, color=color, linewidth=5, hatch='/') # plt.text(x[i], y[i] + 2, '%.0f' % b, ha='center', va='center', fontsize=20, # bbox=dict(boxstyle='round,pad=0.1', fc='yellow', ec='k', lw=0.5, alpha=0.5)) plt.title("专业数目最多的15个学校",fontsize=20) plt.xlabel("学校",fontsize=20) plt.ylabel("专业数",fontsize=20) plt.xticks(rotation=45,fontsize=15) plt.tick_params(labelsize=16) # 要修改直方图的背景颜色,可以使用plt.gca().set_facecolor()方法。 plt.gca().set_facecolor((1, 0.5, 0.6, 0.1)) #或者plt.gca().set_facecolor("lightgrey") # # 添加网格线 # `linewidth`参数用于控制网格线的宽度。 plt.grid(True,alpha=0.4) # plt.grid(True) plt.show()



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3