4-3 条形图

In [1]:
import numpy as np
import matplotlib
matplotlib.use('nbagg')
import matplotlib.pyplot as plt
 

seed可以保证每次生成的随机数值是一样的,参数是确定随机数的生成起始位置,注意:不是seed(0)第一个随机数就是0而是seed里设置好的第0个参数。详情看:https://www.cnblogs.com/subic/p/8454025.html

 

1.柱状图的子图 ,画图方向,画线方向

In [2]:
np.random.seed(0)
x=np.arange(5)
y=np.random.randint(-5,5,5)
print(y)
fig,axes=plt.subplots(ncols=2)#生成2列的子图
v_bars=axes[0].bar(x,y,color='red')#竖着画图bar
h_bars=axes[1].barh(x,y,color='red')#横着画图barh

axes[0].axhline(0,color='grey',linewidth=2)#在图分界线那加一横条线axhline
axes[1].axvline(0,color='grey',linewidth=2)#在图分界线那加一竖条线axvline
plt.show()#没有写%matplotlib.inline魔法指令就必须写plt.show()
 
[ 0 -5 -2 -2  2]
 
 
 
In [3]:
fig,ax=plt.subplots()
v_bars=ax.bar(x,y,color='lightblue')

#对y值=>height的属性修改
for bar,height in zip(v_bars,y):
    if height<0:
        bar.set(edgecolor='darkred',color='green',linewidth=3)
plt.show()
    
 
 
 
 

2.填充图

2-1填充一条曲线

In [4]:
x=np.random.randn(100).cumsum()
y=np.linspace(0,10,100)

fig,ax=plt.subplots()
ax.fill_between(x,y,color='lightblue')#填充图
plt.show()
 
 
 
 

2-2 填充2条线间的面积

In [5]:
x=np.linspace(0,10,200)
y1=2*x+1
y2=3*x+1.2
y_mean=0.5*np.cos(2*x)+2.5*x+1.1

fig,ax=plt.subplots()
ax.fill_between(x,y1,y2,color='lightblue')#填充图y1和y2

ax.plot(x,y_mean,color='black')
plt.show()
 
 
 
 

3.条形图细节设置

  • bar(left, height, width, color, align, yerr)函数:绘制柱形图。left为x轴的位置序列,一般采用arange函数产生一个序列;height为y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据;width为柱形图的宽度,一般这是为1即可;color为柱形图填充的颜色;align设置plt.xticks()函数中的标签的位置;yerr让柱形图的顶端空出一部分。

下面图的那条黑线就是方差部分

 

3-1 显示方差的柱状图

In [6]:
mean_values=[1,2,3]
variance=[0.2,0.4,0.5]#variance是方差
bar_label=['bar1','bar2','bar3']

x_pos=list(range(len(bar_label)))
plt.bar(x_pos,mean_values,yerr=variance,alpha=0.4)#绘图x_pos为x轴,mean_values为y轴,alpha为透明度bar函数指定了条形图的x轴、y轴值,设置x轴刻度标签,条形图的色,同时设置透明度alpha
max_y=max(zip(mean_values,variance))#将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
plt.ylim([0,(max_y[0]+max_y[1]*1.2)])#设置Y轴刻度范围
plt.ylabel('variance y')
plt.xticks(x_pos,bar_label)#添加x轴刻度标签
plt.show()
 
 
 
 
  • figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

    num:图像编号或名称,数字为编号 ,字符串为名称

    figsize:指定figure的宽和高,单位为英寸;

    dpi:参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80,1英寸等于2.5cm,A4纸是 21*30cm的纸张

    facecolor:背景颜色

    edgecolor:边框颜色

    frameon:是否显示边框

 

3-2 背靠背的柱状图

In [7]:
x1=np.array([1,2,3])
x2=np.array([2,2,3])

bar_label=['bar1','bar2','bar3']
fig=plt.figure(figsize=(8,6))
y_pos=np.arange(len(x1))
y_pos=[x for x in y_pos]

plt.barh(y_pos,x1,color='g',alpha=0.5)
plt.barh(y_pos,-x2,color='b',alpha=0.5)

plt.xlim(-max(x2)-1,max(x1)+1)#设置x范围
plt.ylim(-1,len(x1)+1)#设置y范围
plt.show()
 
 
 
In [8]:
green_data=[1,2,3]
blue_data=[3,2,1]
red_data=[2,3,3]
labels=['group 1','group 2','group 3']

pos=list(range(len(green_data)))
width=0.2
fig,ax=plt.subplots(figsize=(8,6))

plt.bar(pos,green_data,width,alpha=0.5,color='g',label=labels[0])
plt.bar([p+width for p in pos],blue_data,width,alpha=0.5,color='c',label=labels[0])
plt.bar([p+width*2 for p in pos],red_data,width,alpha=0.5,color='r',label=labels[0])

plt.show()
 
 
 
 

4.柱状图外观设置

 

4-1 在状图上显示数据指标和分界线

  • matplotlib.pyplot.hlines(y, xmin, xmax)表示横线,参数(y的值,横线开始横坐标,横线结束横坐标)
  • matplotlib.pyplot.vlines(x, ymin, ymax)表示竖线,参数(x的值,竖线开始纵坐标,竖线结束纵坐标)
  • 除以上基本属性外还可以添加其他属性设置如:linestyles等
In [9]:
data=range(200,225,5)
bar_labels=['a','b','c','d','e']
fig=plt.figure(figsize=(10,8))#
y_pos=np.arange(len(data))
plt.yticks(y_pos,bar_labels,fontsize=16)#添加y轴刻度标签
bars=plt.barh(y_pos,data,alpha=0.5,color='g')
plt.vlines(min(data),-1,len(data)+0.5,linestyles='dashed')#画一条竖线
#在每个柱状后面显示当前数据是最小数据的多少占比
for b,d in zip(bars,data):
    plt.text(b.get_width()+b.get_width()*0.05,b.get_y()+b.get_height()/2,'{0:.2%}'.format(d/min(data)))

plt.show()
 
 
 
 

4-2 画出渐变颜色的柱状图

  • matplotlib库中内置的色彩映射函数。matplotlib.cm.色彩即对[数据集]应用[色彩]
  • cm.ScalarMappable这是一个mixin类,用于支持RGBA映射的标量数据。ScalarMappable在从给定的颜色映射返回RGBA颜色之前使用数据标准化。
In [14]:
mean_values=range(10,18)
x_pos=range(len(mean_values))

import matplotlib.colors as col
import matplotlib.cm as cm

# 创建 colormap
cmap1=cm.ScalarMappable(col.Normalize(min(mean_values),max(mean_values),cm.hot))#定义颜色区间,和颜色方式
cmap2=cm.ScalarMappable(col.Normalize(0,20,cm.hot))

#画子图
plt.subplot(121)
plt.bar(x_pos,mean_values,color=cmap1.to_rgba(mean_values))
plt.subplot(122)
plt.bar(x_pos,mean_values,color=cmap2.to_rgba(mean_values))
plt.show()
 
 
 
In [19]:
patterns=('-','+','x','\\','*','o','0','.')

fig=plt.gca()

mean_value=range(1,len(patterns)+1)
x_pos=list(range(len(mean_value)))

bars=plt.bar(x_pos,mean_value,color='green')

for bar,patterns in zip(bars,patterns):
    bar.set_hatch(patterns)
plt.show()
 
 
 

猜你喜欢

转载自www.cnblogs.com/AI-robort/p/11740360.html
今日推荐