python科学画图——bar()函数

承接上一篇问题一,关于bar()函数的疑难杂症,主要是坐标的对齐方式,昨天的坐标自动居中了,今天翻阅了一些资料发现了根源所在,各种参数设置啊,先来个简单的例子吧:

import numpy as np
import matplotlib.pyplot as plt

men_means= (20, 35, 30, 35, 27)
women_means= (25, 32, 34, 20, 25)

ind = np.arange(len(men_means))  # the x locations for the groups
width = 0.35  # the width of the bars

fig, ax = plt.subplots()
rects1 = ax.bar(ind - width/2, men_means, width, color='SkyBlue', label='Men')
rects2 = ax.bar(ind + width/2, women_means, width,color='IndianRed', label='Women')

# Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
plt.xticks(ind,('G1', 'G2', 'G3', 'G4', 'G5'))
ax.legend()

plt.show()

简单的直方图设置,先看下效果图:

python科学画图——bar()函数_第1张图片

底下的坐标是居中的,bar()函数的第一个参数为left,表示条形图左边x坐标,在本例中,ind为0,1,2,3,4,则rects1对应的left值分别为0-0.35/2,1-0.35/2……,G1,G2~~对应的是0,1,~~,那问题来了,二者对应不起来,图中第一个Men条形图的左侧x坐标应该是-0.35,第二个Men条形图左侧x坐标为0.65……

根源是在于bar()的参数align,看一下:

align:{'center','edge'},可选参数,默认:'center'。如果是'edge',通过左边界(条形图垂直)和底边界(条形图水平)来使条形图对齐;如果是'center',将left参数解释为条形图中心坐标。

比如上图,我们看G1标识的两个条形图,蓝色的表示Men,它的left值为0-0.35/2,即-0.175,将其作为该条形图的中心坐标,这样G1应该在0的位置上,即在第一个条形图的右侧(这里每个条形图宽为0.35,我们设置的left值也是基于0.35的,这样比较美观)。当然更直白地可以理解为坐标轴G1G2~~是固定的,对应01234,变化的是我们的条形图,当设置align为edge时,我们的left值便是条形图的左侧x坐标;当设置align为center时,我们的left值便是条形图的中点坐标。

我们手动更改参数align为edge,看下效果图:

python科学画图——bar()函数_第2张图片

这样就对了,第一个Men条形图的左侧x坐标为-0.175……我们将rects1和rects2的left的值分别设为ind和ind+width,这样貌似更直观一些:

python科学画图——bar()函数_第3张图片

当然这个是添加属性align=edge的,如果去掉的话也就是默认的center,效果如下:

python科学画图——bar()函数_第4张图片

我们去掉Women坐标也不会变,为了更直观我们也去掉x轴坐标标签,这个对应的是rects1 = ax.bar(ind-width/2 , men_means, width, color='SkyBlue', label='Men'):

python科学画图——bar()函数_第5张图片

rects1 = ax.bar(ind, men_means, width, color='SkyBlue', label='Men')对应的是:

python科学画图——bar()函数_第6张图片

需要注意的是left值的变化,大家可以多次进行设置来看下其变化,另外,width默认值为0.8,这一点可以查看上一篇博客的数据设置,会发现点有意思的东西。https://blog.csdn.net/beyond9305/article/details/82953229

你可能感兴趣的:(Anaconda学习笔记)