import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# 使用%matplotlib命令可以將matplotlib的圖表直接嵌入到Notebook之中,或者使用指定的界面庫顯示圖表叶堆,它有一個(gè)參數(shù)指定matplotlib圖表的顯示方式抠璃。inline表示將圖表嵌入到Notebook中勇劣。
plt.rcParams['font.sans-serif']=['SimHei']
# 用來正常顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus']=False
# 用來顯示正負(fù)號
X=np.linspace(0,2*np.pi,100)# 均勻的劃分?jǐn)?shù)據(jù)
Y=np.sin(X)
Y1=np.cos(X)
plt.title("Hello广匙,matplotlib;】伞`易帧!")
plt.plot(X,Y)
plt.plot(X,Y1)
X=np.linspace(0,2*np.pi,100)
Y=np.sin(X)
Y1=np.cos(X)
plt.subplot(211)
plt.plot(X,Y,color='dodgerblue')
plt.subplot(212)
plt.plot(X,Y1,color = 'r')
# 柱狀圖
?柱狀圖一般用來統(tǒng)計(jì)一些類型的數(shù)量掸掸,例如不同產(chǎn)品的銷售額氯庆。柱狀圖一般有兩種,一個(gè)是傳統(tǒng)的猾漫,一個(gè)是疊加的。
data=[10,35,60,40]
plt.bar(range(len(data)),data)
plt.title('柱狀圖')
data=[10,35,60,40]
plt.barh(range(len(data)),data)
plt.title('水平柱狀圖')
data = [[5,25,50,20],
? ? ? ? [4,23,30,18],
? ? ? ? [6,22,90,10]]
X = np.arange(4)
plt.bar(X+0.00,data[0],color='b',width=0.25,label="A")
plt.bar(X+0.25,data[1],color='g',width=0.25,label="B")
plt.bar(X+0.50,data[2],color='r',width=0.25,label="C")
# 顯示上面設(shè)置的 lable
plt.legend()
plt.title('多個(gè)柱狀圖')
data = [[5,25,50,20],
? ? ? ? [4,23,30,18],
? ? ? ? [6,22,90,10]]
X = np.arange(4)
plt.bar(X, data[0], color = 'b', width = 0.25)
plt.bar(X, data[1], color = 'g', width = 0.25,bottom=data[0])
plt.bar(X, data[2], color = 'r', width = 0.25,bottom = np.array(data[0]) + np.array(data[1]))
plt.title('疊加型柱狀圖')
plt.show()
散點(diǎn)圖
散點(diǎn)圖用來衡量兩個(gè)連續(xù)變量之間的相關(guān)性
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
plt.scatter(x,y)
plt.title('普通散點(diǎn)圖')
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.randn(N)
# 顏色可以用數(shù)值表示
area = np.pi * (15 * np.random.rand(N))**2
# 調(diào)整大小
plt.scatter(x,y,c=colors,alpha=0.5, s = area)
N = 30
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.randint(0,2,size =30)
colors = np.random.randint(0,2,size = 30)
plt.scatter(x,y,c=colors,alpha=0.5,s = area)
直方圖
直方圖是用來衡量連續(xù)變量的概率分布的感凤。在構(gòu)建直方圖之前悯周,我們需要先定義好bin(值的范圍),也就是說我們需要先把連續(xù)值劃分成不同等份陪竿,然后計(jì)算每一份里面數(shù)據(jù)的數(shù)量
a = np.random.rand(60)
plt.hist(a,bins=20)
plt.ylim(0,15)
a = np.random.randn(1000)
plt.hist(a,bins=50)
plt.title("標(biāo)準(zhǔn)正態(tài)分布")
盒圖
boxplot用于表達(dá)連續(xù)特征的百分位數(shù)分布禽翼。統(tǒng)計(jì)學(xué)上經(jīng)常被用于檢測單變量的異常值,或者用于檢查離散特征和連續(xù)特征的關(guān)系
x = np.random.randint(20,100,size=(30,3))
plt.boxplot(x)
plt.ylim(0,120)
# 在x軸的什么位置填一個(gè)label族跛,我們這里制定在1闰挡,2,3位置礁哄,寫上ABC
plt.xticks([1,2,3],['A','B','C'])
plt.hlines(y = np.median(x,axis = 0)[0],xmin=0,xmax=3)
添加描述性文字
增加文字
plt.text(x, y, s, fontdict=None, withdash=False, **kwargs)
# 設(shè)置畫布顏色為blue
fig, ax =plt.subplots(facecolor='blue')
# y軸數(shù)據(jù)
data =[[5,25,50,20],
? ? ? [4,23,51,17],
? ? ? [6,22,52,19]]
X = np.arange(4)
plt.bar(X+0.00, data[0], color='darkorange',width = 0.25,label='A')
plt.bar(X+0.25, data[1], color='steelblue',width = 0.25,label='B')
plt.bar(X+0.50, data[2], color='violet',width = 0.25,label='C')
ax.set_title('Figure 2')
plt.legend()
W = [0.00,0.25,0.50]
for i in range(3):
? ? for a,b in zip(X+W[i],data[i]):
? ? ? ? plt.text(a,b,"%.0f"%b,ha="center",va="bottom")
plt.xlabel("Group")
plt.ylabel("Num")
plt.text(0.0,48,"TEXT")
注釋地另一種方法:annotate
在數(shù)據(jù)可視化的過程中长酗,圖片中的文字經(jīng)常被用來注釋圖中的一些特征。使用annotate()方法可以很方便地添加此類注釋桐绒。在使用annotate時(shí)夺脾,要考慮兩個(gè)地方的坐標(biāo)(text只需要一個(gè)):被注釋的地方xy(x, y)和插入文本的地方xytext(x, y)
X = np.linspace(0,2*np.pi,100)# 均勻的劃分?jǐn)?shù)據(jù)
Y = np.sin(X)
Y1 = np.cos(X)
plt.plot(X,Y)
plt.plot(X,Y1)
plt.annotate('Points',
? ? ? ? ? ? xy=(1,np.sin(1)),
? ? ? ? ? ? xytext=(2,0.5), fontsize=16,
? ? ? ? ? ? arrowprops=dict(arrowstyle="->"))
plt.title("這是一副測試圖!")
%pylab inline
pylab.rcParams['figure.figsize'] = (10, 6) # 調(diào)整圖片大小
# np.random.seed(19680801)
n_bins = 10
x = np.random.randn(1000, 3)
fig, axes = plt.subplots(nrows=2, ncols=2)
ax0, ax1, ax2, ax3 = axes.flatten()
colors = ['red', 'tan', 'lime']
ax0.hist(x, n_bins, normed=1, histtype='bar', color=colors, label=colors)
ax0.legend(prop={'size': 10})
ax0.set_title('bars with legend')
ax1.hist(x, n_bins, normed=1, histtype='bar', stacked=True)
ax1.set_title('stacked bar')
ax2.hist(x, n_bins, histtype='step', stacked=True, fill=False)
ax2.set_title('stack step (unfilled)')
# Make a multiple-histogram of data-sets with different length.
x_multi = [np.random.randn(n) for n in [10000, 5000, 2000]]
ax3.hist(x_multi, n_bins, histtype='bar')
ax3.set_title('different sample sizes')
%pylab inline
import pandas as pd
df = pd.DataFrame(np.random.rand(50, 2), columns=['a', 'b'])
# 散點(diǎn)圖
df.plot.scatter(x='a', y='b')
df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
# 繪制柱狀圖
df.plot.bar()
# 堆積的柱狀圖
df.plot.bar(stacked=True)
# 水平的柱狀圖
df.plot.barh(stacked=True)
df = pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
# 直方圖
df.plot.hist(bins=20)
# 盒圖
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.plot.box()