目录

  • 一、柱状图 bar、条形图 barh、直方图 hist
  • 二、散点/气泡图 scatter、棉棒图 stem
  • 三、箱线图 boxplot 、极线图 polar
  • 四 、误差棒图 errorbar
  • 五、子图划分
  • 五、子图对象 Axes(ax)的行为


本文主要使用的绘图库为 matplotlib、numpy。
官文传送门

一、柱状图 bar、条形图 barh、直方图 hist

1、柱状图:

由一系列高度不等的纵向条纹或线段表示数据分布的情况。

一般用横轴表示数据所属类别,纵轴表示数量或者占比。

优点:

(1)比较直观地看出产品质量特性的分布状态,便于判断其总体质量分布情况。

(2)可以发现分布表无法发现的数据模式、样本的频率分布和总体的分布。



调用方法:

import matplotlib.pyplot as plt
#该方法返回一个包含所有柱子跟可选的误差棒的 BarContainer。
plt.bar (x, height,width = 0.8,bottom = None,align='center', data = None,** kwargs )

bar函数常用参数及其说明:

主要参数:(带*表示optional)

x :柱子们的x坐标

height :柱子们的高度

*/width :柱子的宽度

*/bottom :柱子最底部的 y坐标

*/align :柱子在 x 坐标的哪侧。
center 为中间;edge为左边;edge跟 负的width合作可置于右边。

其他参数(均为optional):

*color :柱子颜色

*edgecolor :柱子边框的颜色

*linewidth :柱子边框的宽度

*tick_label :柱子们的刻度标签,默认为数字标签

*xerr,*yerr:若不为空,则为柱子添加水平 / 垂直误差棒。
可以全部一起设置,也可以单独给每柱设置。

*ecolor :误差棒的线条颜色

*capsize :误差棒的长度(以点为单位)

*error_kw :一个字典,可以把 ecolor 跟capsize一起放进来,就不用单独设置

*log :若为true, 就把y 轴设为对数刻度

*orientation :{‘vertical’, ‘horizontal’}
设置柱子方向,默认纵向。但这是一个只能内部使用的方法。
如果需要横向,请使用 barh 函数来绘制。

小栗子:(ps:很多代码注释都写在条形图的栗子里)

#多数据柱状图
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['font.size'] = '21'
plt.rcParams['axes.unicode_minus'] = False

plt.figure(figsize=(20,10))
plt.title('20位同学的考试成绩图')
x = np.linspace(1,21,20)
y1 = np.random.randint(70,90,20)
y2 = np.random.randint(30,59,20)
y3 = np.random.randint(60,85,20)

tick=[]
for i in range(1,21):  #生成刻度值数组
    tick.append(i)
bar_width = 0.3
plt.bar(x, y1, align='center', width=bar_width, color = '#a2a4f2', label='语文')
plt.bar(x+bar_width, y2, align='center', width=bar_width, color = 'r', label='数学', alpha=0.5, tick_label=tick)
plt.bar(x+2*bar_width, y3, align='center', width=bar_width, color = 'c', label='英语', alpha=0.3)
plt.axhline(y=np.mean(y1),c='#a2a4f2',ls='--', lw=2)
plt.axhline(y=np.mean(y2),c='r',ls='--', lw=2, alpha=0.5)
plt.axhline(y=np.mean(y3),c='c',ls='--', lw=2, alpha=0.5)
plt.axhline(y=60,c='gray',ls='--', lw=2, alpha=0.5)

plt.xlabel('学号')
plt.ylabel('成绩')
plt.legend(fontsize=10)
plt.savefig(r'C:\Users\young\Desktop\test1.jpg')

python中pie bar 显示数字 python barh_python中pie bar 显示数字

堆积柱状图栗子:
(其实与上图基本无异,就是加了个bottom参数罢了)

#堆积柱状图
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['font.size'] = '21'
plt.rcParams['axes.unicode_minus'] = False

plt.figure(figsize=(20,10))
plt.title('20位同学的考试成绩图')
x = np.linspace(1,21,20)
y1 = np.random.randint(70,90,20)
y2 = np.random.randint(30,59,20)
y3 = np.random.randint(60,85,20)

tick=[]
for i in range(1,21):  #生成刻度值数组
    tick.append(i)
plt.bar(x, y1, align='center', width=bar_width, color = '#a2a4f2', label='语文')
plt.bar(x, y2, align='center', width=bar_width, bottom=y1, color = 'r', label='数学', alpha=0.5, tick_label=tick)
plt.bar(x, y3, align='center', width=bar_width, bottom=y1+y2, color = 'c', label='英语', alpha=0.3)
plt.axhline(y=np.mean(y1+y2+y3),c='c',ls='--', lw=2)

plt.xlabel('学号')
plt.ylabel('成绩')
plt.legend(loc='West', fontsize=10)

python中pie bar 显示数字 python barh_数组_02

2、条形图

就是柱子横向展示的柱状图。

优点依然跟柱状图一样,能体现数据分布形态。

绘制函数:

matplotlib.pyplot.barh(y, width, height=0.8, left=None,  align='center', kwargs)

大部分参数都与柱状图相同。某些参数对于柱子来说的意义不太一样,栗如align,height、width。这里的 left 参数作用相当于柱状图的 bottom,就是设置起点。

其实对于条形图,x轴 跟 y轴的位置是没有改变的,改变的只是柱子。
所以,这里的第一个是 y,不是x。

这里对几个参数进行说明:

y:代表柱子们在 y 轴的坐标

width:对柱子来说,是指柱子高度;对我们来说,就是普通的水平的宽度;

height :对柱子来说,是指柱子宽度;对我们来说,还是普通的垂直的高度;

left :对主子来说,就是柱子的起点位置;对我们来说,就是柱子的起点的 x坐标。
(这就相当于bottom 在柱状图中指明了柱子起点的 y坐标)

align :center代表在 y坐标中间;edge代表在 y坐标下方;edge可以跟负的height 值一起使用使其置于y坐标上方。

小栗子:

#多数据条形图
plt.rcParams['font.sans-serif'] = 'SimHei'   #防止中文乱码
plt.rcParams['font.size'] = '21'
plt.rcParams['axes.unicode_minus'] = False   #防止英文乱码

plt.figure(figsize=(20,10))     #设置画布大小
plt.title('20位同学的考试成绩图')
x = np.linspace(1,21,20)        #均分在1-21之间的20个数
y1 = np.random.randint(70,90,20)
y2 = np.random.randint(30,59,20)
y3 = np.random.randint(60,85,20)

tick=[]
for i in range(1,21):   #生成存放刻度值标签的数组
    tick.append(i)
bar_width = 0.3         #柱子宽度
#barh函数中设置柱子宽度的参数为height,大概因为正视还是height吧
plt.barh(x, y1, align='center', height=bar_width, color = '#a2a4f2', label='语文')
plt.barh(x+bar_width, y2, align='center', height=bar_width, color = 'r', label='数学', alpha=0.5, tick_label=tick)
plt.barh(x+2*bar_width, y3, align='center', height=bar_width, color = 'c', label='英语', alpha=0.3)
#使用numpy库的mean函数获得均值,axvline画一根x=?的线(纵向)
#其实想一想,barh相对于bar,就只是把柱子转了一下而已
#我们还是把下方当x轴看,左边当y轴
plt.axvline(x=np.mean(y1),c='#a2a4f2',ls='--', lw=2)
plt.axvline(x=np.mean(y2),c='r',ls='--', lw=2, alpha=0.5)
plt.axvline(x=np.mean(y3),c='c',ls='--', lw=2, alpha=0.5)
plt.axvline(x=60,c='gray',ls='--', lw=2, alpha=0.5)

plt.xlabel('成绩')        #设置x轴标签
plt.ylabel('学号')
plt.legend(loc='lower right', fontsize=10)  #设置图例的位置与字体大小(图例位置参数多种多样)

python中pie bar 显示数字 python barh_python中pie bar 显示数字_03


堆积条形图栗子:

(其实与上图基本无异,就是加了个left参数罢了)

#堆积条形图
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['font.size'] = '21'
plt.rcParams['axes.unicode_minus'] = False

plt.figure(figsize=(20,15))
plt.title('20位同学的考试成绩图')
x = np.linspace(1,21,20)
y1 = np.random.randint(70,90,20)
y2 = np.random.randint(30,59,20)
y3 = np.random.randint(60,85,20)

tick=[]
for i in range(1,21):  #生成刻度值数组
    tick.append(i)
bar_width = 0.5
plt.barh(x, y1, align='center', height=bar_width, color = '#a2a4f2', label='语文')
plt.barh(x, y2, align='center', height=bar_width, left=y1, color = 'r', label='数学', alpha=0.5, tick_label=tick)
plt.barh(x, y3, align='center', height=bar_width, left=y1+y2, color = 'c', label='英语', alpha=0.3)
plt.axvline(x=np.mean(y1+y2+y3),c='c',ls='--', lw=2)

plt.xlabel('成绩')
plt.ylabel('学号')
plt.legend(loc='upper right', fontsize=22)

python中pie bar 显示数字 python barh_数组_04



3、直方图

由一系列高度不等的纵向条纹或线段表示数据分布的情况。

是数值数据分布的精确图形显示,是一个连续变量的概率分步的估计。

通俗的讲,就是将一堆连续的数据分为多个区间,然后看每个区间数据出现的频数,一般的,横坐标表示数据的一个区间,纵坐标表示频数/频次。

优点:

可以解析出资料的规则性、比较直观地看出产品质量特性的分布。

绘制函数:

matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, \*, data=None, \*\*kwargs)

主要参数:

x :数组或数组序列类型的数据

*/bins:传 int 值:要把数据分成多少个均分的 bin,即区间;
传数组:自定义区间。如传[1,2,3,4],那么就会分成[1,2), [2,3),[3,4);
传 String类型: ‘auto’, ‘fd’, ‘doane’,‘scott’, ‘stone’, ‘rice’, ‘sturges’, or ‘sqrt’.,是
numpy.histogram_bin_edges支持的一种策略 ,大概意思就是它帮
你估算怎么分最合适;
默认值为10

*/range:指定数据中要进行展示的区间,默认为最小值到最大值。

**/density / normed:若为true ,表示展示频率;默认为false,展示频数;

*/cumulative :是否累加 。
若为 true ,表示后面一个 bin 会加上它前面所有bin 的频率/频数;
若为 -1,表示前面一个 bin 会加上它后面所有 bin的频率/频数;

*/botton:指定 bin 底部的位置,跟柱状图的botton一样意思;

*/histtype:设置bin 的类型,可选 {‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}
bar:最常见,不同的数据被分到不同的bar区间;
barstacked:官文说是把多样的数据叠放到各自顶部 ,亲试没找到区别,可能有
别的限制吧,官文描述如下:‘barstacked’ is a bar-type histogram
where multiple data are stacked on top of each other.
step:只显示线条,不填充bins
stepfilled:生成线条图并填充,结果也是跟 bar 类型的区别在于柱子间无线条显示
(有些参数设置对某些类型是无效的)

*/rwidth:bars 的宽度(这个设置对于histtype类型为 step 跟 stepfilled的直方图无效)

*/color:设置填充色,可以给每个bin单独设

*/label:设置标签

另还有weights 、log 、align、stacked,以及下方这些。笔者要考试了…不搞这个鬼东西了,前端太难了…

python中pie bar 显示数字 python barh_数据可视化_05

上一个测试用的小栗子,哈哈哈

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

plt.figure(figsize = (10,10))
data1 = np.random.normal(100, 20, size = 100)
data2 = np.random.normal(130, 20, size = 100)
data3 = np.random.normal(160, 20, size = 100)
bins_num = 20

plt.hist(data1, bins_num, histtype = 'step', alpha = 0.5, density = True)
#plt.hist(data2, bins_num, histtype = 'barstacked', alpha=0.5)
#plt.hist(data3, bins_num, histtype = 'barstacked', alpha=0.5)

python中pie bar 显示数字 python barh_数据可视化_06



二、散点/气泡图 scatter、棉棒图 stem

1 、散点/ 气泡图 scatter

以一个特征为横坐标,另一个特征为纵坐标,利用坐标点(散点)的分布形态反映特征间的统计关系的一种图形。

优点:

展现特征之间是否存在数值或者数量的关联趋势,关联趋势是线性的还是非线性的。

如果有某一个点或者某几个点偏离大多数点,这些点就是离群值,通过散点图可以一目了然。从而可以进一步分析这些离群值是否可能在建模分析中产生很大的影响。

注意:散点图通过散点的疏密程度和变化趋势表示两个特征的数量关系。不仅如此,如果有三个特征,若其中一个特征为类别型,散点图改变不同特征的点的形状或者颜色,即可了解两个数值型特征和这个类别型之间的关系。

函数绘制:

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=<deprecated parameter>, edgecolors=None, \*, plotnonfinite=False, data=None, \*\*kwargs)

主要参数:

x,y:设置数据的位置

**/*s:设置标志点的大小,可以设置每个不同,单位是 2

*/c:设置标志点的颜色。
可以是一种颜色 String;
可以是一组颜色;
可以是使用 cmap跟norm 映射颜色的一个数字或一串数字;
可以是行为RGB或RGBA的二维数组,

*/marker:设置标志点的形状

*/cmap:值为Colormap实例或已注册的colormap名称,只在上面的 c 属性的值为一串浮点数时有效;

*/norm:值为一个Normalize实例,用作规范化数据亮度到(0,1)。只在只在上面的 c 属性的值为一串浮点数时有效;

**/vmin、vmax:跟norm一起去规范数据亮度;如果使用了norm实例,该参数无效;

*/alpha:0-1,设置标志点透明度

*/linewidths:标志点边缘的线条宽度

*/edgecolor:标志点的边缘颜色。可选{‘face’, ‘none’, None}
‘face’:跟 face color相同颜色;
‘none’:没边缘;
None:一种颜色或一种颜色;

*/plotnonfinite:设置为使用非初始化c绘制点,并与Set_bad一起使用。



其他参数:

edgecolors: None
facecolors: None
linewidths: None
capstyle: None
joinstyle: None
antialiaseds: None
offsets: None
transOffset: transforms.IdentityTransform()
offset_position: ‘screen’ (default) or ‘data’
norm: None (optional for matplotlib.cm.ScalarMappable)
cmap: None (optional for matplotlib.cm.ScalarMappable)
hatch: None
zorder: 1

小栗子:

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

plt.title('某个农产品的产量与温度和降雨量的关系')
production = [1125, 1725, 2250, 2875, 2900, 3750, 4125]
tem = [6, 8, 10, 13, 14, 16, 21]
rain = [25, 40, 58, 68, 110, 98, 120]

colors = np.random.randn(len(tem))
plt.scatter(tem, production, c=colors, s=rain)
plt.xlabel('温度')
plt.ylabel('产量')

plt.show()

python中pie bar 显示数字 python barh_数据_07



2、棉棒图 stem

主要用来显示一个包含正负的数据集,如在地震勘察中表示地层间反射系数。

绘制函数:

stem([x,] y, linefmt=None, markerfmt=None, basefmt=None)

主要参数:

*/x:棉棒们的 x 坐标,这是可选参数,默认为从 0 到 len(y) -1

y:棉棒们头部的 y值

*/linefmt:定义竖直线条的形状,往往连颜色一起设置;默认‘C0-’
形状有以下这些:
‘-’ : solid line
‘–’ : dashed line
‘-.’ : dash-dot line
‘:’ : dotted line
除此表之外其它的一些设置方式也是被支持的,如 ‘rx’ 、‘-.’ ,但不一定有效而已。

*/basefmt:定义基线的属性,默认‘C3-’

*/bottom:定义基线的 y坐标位置

*/label:定义棉棒图的图例

*/user_line_collection:若为True,棉棒的线条会被存储为一个线条集合而非单个线条,这将大大提高性能。
在 Matplotlib3.3 之后默认为True

小栗子(这个真的好丑,还有为什么label不起作用…怀疑人生…不过这不是我的重点…抱歉.)

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

plt.title('棉棒图')
deep = [1125, -1725, 2250, -2875, 2900, -3750, 4125]
#deep = np.random.randn(20)
plt.stem(deep, basefmt='--',makerfmt='*',label='地震深度')

plt.show()

python中pie bar 显示数字 python barh_数据_08



三、箱线图 boxplot 、极线图 polar

**1 、箱线图/盒须图 boxplot **

能显示数据的位置和分散情况的统计图。还可以比较不同特征的分散程度差异。

箱线图通过五个统计量来描述数据:

最小值、下四分位数、中位数、上四分位数、最大值。

也可以粗略地看出数据是否具有对称性、分布的分散程度等信息,特别可以用于对几个样本的比较。

python中pie bar 显示数字 python barh_数据可视化_09


python中pie bar 显示数字 python barh_柱状图_10

绘制函数:

matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_ticks=True, autorange=False, zorder=None, \*, data=None)

主要参数:

x:数据(几组就代表画几个盒子)

*/notch:是否添加缺口,缺口即置信区间。
置信区间是有可能低于下四分位高于上四分位数的,反转形态是正常的。

*/sym:设置异常点的形状。

*/vert:是否翻转盒子。

*/whis:设置盒须的长度,即上边缘与上四分位数之间距离。
默认1.5。代表 盒须长度 = 1.5 四分位距

*/position:设置盒子的位置

*/widths:设置盒子宽度

*/label:设置标签

*/meanline:尝试根据meanprops将平均值呈现为一条横跨框的整个宽度的线。如果shownotches也是
真的,则不建议使用。否则,方法将显示为点

其他参数:/*bootstrap、*usermedians、*conf_intercals、zorder、autorange、patch_artist
及以下

showcapsbool, optional (True)Show the caps on the ends of whiskers.

showboxbool, optional (True)Show the central box.

showfliersbool, optional (True)Show the outliers beyond the caps.

showmeansbool, optional (False)Show the arithmetic means.

cappropsdict, optional (None)Specifies the style of the caps.

boxpropsdict, optional (None)Specifies the style of the box.

whiskerpropsdict, optional (None)Specifies the style of the whiskers.

flierpropsdict, optional (None)Specifies the style of the fliers.

medianpropsdict, optional (None)Specifies the style of the median.

meanpropsdict, optional (None)Specifies the style of the mean.

小栗子:

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

#设置字符正常显示以及标题,字体、画幅大小
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.size'] = 21
plt.figure(figsize=(12,8))
plt.title('某班级100个同学的期末成绩', color='y', y=1.05)

#生成100个学生的语数英物化生成绩(0-100的浮点数)
chinese = [np.random.random()*150 for x in range(100)]
maths   = [np.random.random()*150 for x in range(100)]
english = [np.random.random()*150 for x in range(100)]
physics = [np.random.random()*100 for x in range(100)]
chemistry = [np.random.random()*100 for x in range(100)]
biology = [np.random.random()*100 for x in range(100)]

#绘图,设置箱须长度、箱体颜色等
data = [chinese, maths, english, physics, chemistry,biology]
label = ['语文', '数学', '英语', '物理', '化学', '生物']
plt.boxplot(data, labels = label, sym='+', whis=1.0, widths=0.5,
            notch=True, patch_artist=True,  medianprops={'color':'pink'},
            boxprops=dict(color="cyan", facecolor="yellow", alpha=0.5), 
            whiskerprops = {'color': "pink"},capprops = {'color': "cyan"})

#设置网格、x y轴标签、刻度颜色等
plt.grid(ls='--', alpha=0.1)
plt.xticks(color = 'pink')
plt.yticks(color = 'pink')
plt.xlabel('科目', color='y', labelpad=22)
plt.ylabel('成绩', color='y', labelpad=22)

python中pie bar 显示数字 python barh_柱状图_11


2 、极线图 polar

极线图实际上是一种在圆上绘制的折线图,可通过角度来显示数据值的趋势。

主要用在数学和统计学应用方面。可显示基于方向变化的变量。

绘制函数:

matplotlib.pyplot.polar(theta, r, **kwargs)

其实还可以用:

plt.subplot(polar = True)
plt.plot(thera, r, **kwargs)	#此处还可以用bar、barh来绘制原型里面的条形图。。。但marker、ms、mfc等这些参数就不能用了

或者:

plt.subplot(projection = 'polar')	#当然,也可以赋给一个子图对象
plt.plot(thera, r, **kwargs)	#此处还可以用bar、barh来绘制原型里面的条形图。。。

theta:每个标记所在射线与极径的夹角

r:每个标记到原点的距离

*/color:线条颜色

*/marker:数据点的形状

*/mfc:数据点的颜色

*/ms:数据点的大小

举个栗子:(别说这个五角星他为什么有点奇怪…这就是与众不同!!!好吧我就是连不起来也不想搞了)

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize = (6,6))

thera = np.linspace(0,1,10,endpoint = False)
r = [10, 5]*5

plt.subplot(projection = 'polar')
plt.plot(thera*2*np.pi, r, color = 'red', marker = '*', mfc = 'b')

python中pie bar 显示数字 python barh_数组_12

我们把函数换成 bar 试试:

python中pie bar 显示数字 python barh_python中pie bar 显示数字_13

再换成barh 试试(我好无聊…)像极了某fi哈哈哈哈哈

python中pie bar 显示数字 python barh_数据可视化_14


然后我们再改回plot ,并添加一些修饰参数:

plt.plot(thera*2*np.pi, r, color = 'red', marker = '*',ms = 100, mfc = 'b')

python中pie bar 显示数字 python barh_数组_15


四 、误差棒图 errorbar

在上面,我们的柱状图里面可以放置误差棒,我们的折线图当然也可以。

误差棒图:绘制y轴或者 x轴方向的误差范围。

函数绘制:

matplotlib.pyplot.errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, elinewidth=None, capsize=None, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, \*, data=None, \*\*kwargs)

主要参数:

x,y:数据位置;

**/xerr, /yerr :若为一个值N,代表误差为离数据点上下距离N
若为两个值(N1,N2),代表误差为数据点-N1 到 数据点+N2

*/fmt:定义数据点/数据线的格式

*/ecolor:误差棒线条的颜色

*/elinewidth:误差棒线条的宽度

*/capsize:官文:The length of the error bar caps in points.(看不懂,懒得搜)
实践出真理:就是误差棒帽子的长度哈哈哈,就是在线的两端加个线,像盒须图的边缘一样。

*/capthink:官文:An alias to the keyword argument markeredgewidth (a.k.a. mew).
同理可得,这应该是帽子的宽度。

*/barsabove:若为真,将在图像符号上方绘图;默认在下方;就是word里面置于顶层的意思哦

**/*lolims、/*uplims、/xlolims、/xuplims:bool值,表示误差棒在y/x方向上的限制。可以是一个或一组值。其实误差
棒的限制,就是使误差单向。栗如,若设置xlolims为True,那么误差棒只在数据点向上递增。

(到这里我忽然懵了,因为我忽然看到官方居然有中文网??????????但这并不能阻止我偷懒&得过且过)
码一下

*/errorevery:接收单个值,表示隔多少个点绘制一次误差棒;
接收两个值,表示从哪里开始隔多少个点绘制一次。

其他参数:

python中pie bar 显示数字 python barh_数组_16

小栗子

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,20,12)
y = np.linspace(10,30,12)

xlolims = [True,False,False,False,True,False,True,True,False,True,False,True]

plt.errorbar(x, y, xerr = 2, yerr = 4, capsize= 10, barsabove = True, fmt = '*', ecolor = 'orange', xlolims = xlolims)

python中pie bar 显示数字 python barh_数组_17


五、子图划分

1 、plt.subplot(numRows,numCols,plotNums)

返回 numRows行、numCols列个子图中的第 plotNums个子图。(行列从1开始计算)

如 plt.subplot(324) or plt.subplot(3,2,4)

python中pie bar 显示数字 python barh_数据_18

2、add_subplot(行列从1开始计算)

fig = plt.figure()	#获取画布
ax = fig.add_subplot(324)	#得到子图赋给ax

第一种方法看似是直接获取,但实质还是使用画布创建子图的。

add_subplot时还可以用 facecolor来设置子图画布颜色

3、plt.subplot2grid(行列从0开始计算)

#设定网格,选中网格,确定选中行列区域数量,编号从0开始
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)

如 :plt.subplot2grid((3,3), (1,0), colspan=2)

python中pie bar 显示数字 python barh_数据可视化_19

注意ax3 是 plt.subplot2grid((3,3),(1,1),rowspan=2) 即其列数为1,而不是 2。

4 、引入 matplotlib 的gridspec类(行列从0开始计算)

import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(3,3)	#划分3*3的网格

ax1 = plt.subplot( gs[0, :] ) 	#返回横向第 0 行,纵向覆盖所有列
ax2 = plt.subplot( gs[1, :-1] )  	#返回横向第 1 行,纵向覆盖第一列到倒数第二列
ax3 = plt.subplot( gs[1:, -1] )  	#返回横向覆盖第一行到最后一行,纵向覆盖最后一列, -1前面逗号不可省略
ax4 = plt.subplot( gs[2, 0] )  	#返回横向第 2 行,纵向第 0 列
ax5 = plt.subplot( gs[2, 1] ) 	 #返回横向第 2 行,纵向第 1 列

#left、right、top、bottom表示子图所在其画布区域。当你保存图片时,就知道这个参数不能乱设了
#wspace子图的间隔宽度
plt.subplots_adjust(left = 0.08, right = 0.95, wspace = 0.9, hspace = 0.6)

python中pie bar 显示数字 python barh_数组_20

五、子图对象 Axes(ax)的行为

上面我们说到,其实plt.subplot 添加子图时,本质也是在画布Figure 加了一个Axes。

当我们调用plot时,matplotlib会调用 gca()来获取当前的 axes,然后进行操作;
反过来,axes对象也可以调用 gcf()来获取当前的 Figure对象。

由此可见,在matplotlib中,整个图像是一个 Figure对象,在Figure中有一个或者多个Axes;

每个Axes (ax)都是一个拥有自己坐标系统(包括但不仅限)的绘图区域。
其关系如下:

python中pie bar 显示数字 python barh_柱状图_21

其中坐标系统对象 Axis又包括:轴脊(四根)、刻度线 、刻度标签。

python中pie bar 显示数字 python barh_数据_22

那么我们来看一下,当有多个子图对象时 ,我们手动获取其中一个 Axes后,能对它做些什么呢~~~~(虽然都是对子图进行操作,但跟直接用 plt 绘制的方法还是不一样的哦)

首先获取子图:
(上部分的四种方式也都可以用一个 ax = 来接受获取一个子图,再直接对子图操作)

ax = plt.gca()

然后对子图进行操作:

1 、获取子图的轴脊

ridge = ax.spines['right']  #四个方向轴脊‘left'  'right'  'top'  'bottom'

2、获取并给轴脊设置颜色、线条宽度、线条样式、位置

ax.spines['right'].set_color('red')		#设为none可以隐藏轴脊
ax.spines['right'].set_linewidth(5)  		# 等同于  ax.spines['right'].set_lw(5)
ax.spines['right'].set_linestyle('--')	 	# 等同于  ax.spines['right'].set_ls('--')
ax.spines['right'].set_position(('data',0.5))   #右侧边界交叉于0.5位置

3、获取子图的x轴 / y轴

xaxis = ax.xaxis
yaxis = ax.yaxis

4、获取并给x轴 / y轴设置位置(也就是要放在哪根轴脊上)

ax.xaxis.set_ticks_position('top')

5、直接设置x轴 / y轴的范围

ax.xlim(0,4)
ax.ylim(1,2)

5、获取并设置某轴的主 / 副刻度线的位置

from matplotlib.ticker import AutoMinorLocator, MultipleLocator

ax.xaxis.set_major_locator(MultipleLocator(1))	#设x轴主刻度位置
ax.yaxis.set_minor_locator(AutoMinorLocator(4))	#设y轴的副刻度位置

6、获取并设置某轴的主刻度线的标签的精度

formatter = ticker.FormatStrFormatter('%1.2f%%')
ax.yaxis.set_major_formatter(formatter)

7、获取并设置某轴的刻度线的颜色、符号大小、边缘宽度

ax.yaxis.get_ticklines().set_color('red')
ax.yaxis.get_ticklines().set_markersize(20)
ax.yaxis.get_ticklines().set_markeredgewidth(3)

8、直接设置刻度线的样式(包括x,y轴的刻度线。长度、宽度、颜色、标签大小等)

ax.tick_params( which=“major”, length = 10)	#设置主刻度长度为10
'''
 其他参数:
which:指定设置刻度还是副刻度  {'major', 'minor'}  
length:设置刻度线的长度    
width:设置刻度线的宽度
colors:设置刻度线和主刻度标签的颜色
labelsize:设置刻度标签的大小
labelcolor:设置刻度标签的颜色'''

9、获取刻度标签并对它们设置颜色 、字体大小、旋转角度、

ax.xaxis.get_ticklabels().set_color('red')
ax.xaxis.get_ticklabels().set_fontsize(20)
ax.xaxis.get_ticklabels().set_rotation(20)

10、给子图添加注解(分为指示注解和无指示注解)

(1)有指示注解

ax.annotate(
s:注解内容
xy:被注解位置
xycoords:xy的坐标系统与折线图在同一坐标系统中
xytext:注释文本的位置
weight:注解内容的显示风格
color:注解内容的颜色
arrowprops:指示箭头的属性,箭头风格、颜色 )

(2)无指示注解

ax.text(
xy:注解文本所在的横纵坐标
string:注释文本内容
weight:注释文本内容的粗细风格
color:注释文本内容的字体颜色 )

小栗子:

python中pie bar 显示数字 python barh_柱状图_23