(代码详解)plt.bar()+plt.text()+画直方图/柱状图+调参美化+修改图的背景颜色+添加网格线+设置直方图的随机填充颜色 |
您所在的位置:网站首页 › python直方图和柱状图的区别 › (代码详解)plt.bar()+plt.text()+画直方图/柱状图+调参美化+修改图的背景颜色+添加网格线+设置直方图的随机填充颜色 |
目录 一、 目的: 二、数据集: 三、完整代码: 四、代码解析(上面的完整代码分开讲解): (一)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)结果如下: (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)结果如下: 有一些小细节设置,如字体大小等等,直接在代码注释中标注了 # 用于在图表上添加文本标签 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 |