import numpy as np
import matplotlib
matplotlib.use('nbagg')
import matplotlib.pyplot as plt
seed能夠保證每次生成的隨機數值是同樣的,參數是肯定隨機數的生成起始位置,注意:不是seed(0)第一個隨機數就是0而是seed裏設置好的第0個參數。詳情看:http://www.javashuo.com/article/p-flbjvggs-s.htmljavascript
1.柱狀圖的子圖 ,畫圖方向,畫線方向css
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()
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.填充圖html
2-1填充一條曲線html5
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條線間的面積java
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.條形圖細節設置python
下面圖的那條黑線就是方差部分jquery
3-1 顯示方差的柱狀圖linux
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)android
num:圖像編號或名稱,數字爲編號 ,字符串爲名稱css3
figsize:指定figure的寬和高,單位爲英寸;
dpi:參數指定繪圖對象的分辨率,即每英寸多少個像素,缺省值爲80,1英寸等於2.5cm,A4紙是 21*30cm的紙張
facecolor:背景顏色
edgecolor:邊框顏色
frameon:是否顯示邊框
3-2 背靠背的柱狀圖
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()
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 在狀圖上顯示數據指標和分界線
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 畫出漸變顏色的柱狀圖
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()
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()