In [ ]:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
%matplotlib inline
sns.set()
In [ ]:
plt.figure(figsize=(10,5)) # 建立一張圖,大小為5X10(英吋)
x=np.linspace(0,2.*np.pi,50) # 建立線性空間x, 其範圍是0到2pi, 共有50個點
y=np.sin(x) # 建立y=sin(x)
plt.plot(x,y,marker='o',ms=5) # 繪圖,資料點用圓圈標示,圓圈大小5
plt.xlabel('x') # 給x軸名稱
plt.ylabel('sin(x)') # 給y軸名稱
plt.title('my plot') # 給圖標題
plt.show() # 顯示該張圖
In [ ]:
plt.plot(x,y,marker='o',lw=0)
In [ ]:
plt.plot(x,y,marker='o',lw=0)
plt.xlim(0,np.pi,50)
plt.ylim(0,1)
In [ ]:
plt.figure(figsize=(10,5))
plt.suptitle('my figure')
plt.subplot(1,2,1) #(1,2,1): 畫於1X2圖陣列中的第1個
x=np.linspace(0,2.*np.pi,50)
y=np.sin(x)
plt.plot(x,y,marker='o')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.title('fig1')
plt.subplot(1,2,2) #(1,2,2): 畫於1X2圖陣列中的第2個
y=np.cos(x)
plt.plot(x,y,marker='o')
plt.xlabel('x')
plt.ylabel('cos(x)')
plt.title('fig2')
plt.show()
建一張空圖,含有座標1X2個
In [ ]:
fig,axes=plt.subplots(1,2)
In [ ]:
axes
建一張空圖,含有座標2X3個
In [ ]:
fig,axes=plt.subplots(2,3)
In [ ]:
axes
In [ ]:
axes.shape
In [ ]:
fig,axes=plt.subplots(1,2,figsize=(10,5),sharex=True)
fig.suptitle('my figure')
x=np.linspace(0,2.*np.pi)
y=np.sin(x)
axes[0].plot(x,y,marker='o') #畫於1X2圖陣列中的第1個
axes[0].set_xlabel('x')
axes[0].set_ylabel('sin(x)')
axes[0].set_title('fig1')
y=np.cos(x)
axes[1].plot(x,y,marker='o') #畫於1X2圖陣列中的第2個
axes[1].set_xlim((0,2.*np.pi))
axes[1].set_xlabel('x')
axes[1].set_ylabel('cos(x)')
axes[1].set_title('fig2')
In [ ]:
fig,ax=plt.subplots()
x=np.linspace(0,2.*np.pi,50)
y=np.sin(x)
ax.plot(x,y,marker='o',label='sin(x)')
ax.set_xlim((0,np.pi))
y=np.cos(x)
ax.plot(x,y,marker='v',label='cos(x)')
plt.legend()
建立100000個亂數,其是由$\mu=0$, $\sigma=1$的高斯分佈中取出的。
https://zh.wikipedia.org/wiki/%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83
In [ ]:
s=np.random.normal(0,1,100000)
In [ ]:
plt.plot(s)
將該亂數所在的區間切割兩百個小區間,統計各小區間有幾個亂數落在裡面。
In [ ]:
hist, bins =np.histogram(s,bins=200)
plt.bar(bins[:-1], hist, width=(bins[1]-bins[0]))
In [ ]:
df=pd.DataFrame.from_csv('https://raw.githubusercontent.com/chi-hung/PythonTutorial/master/datasets/iris.csv',index_col=None)
In [ ]:
df[:3]
先研究花鄂長度和花鄂寬度有什麼關係
In [ ]:
df=df[['sepal_length','sepal_width','species']]
In [ ]:
groups=df.groupby('species')
In [ ]:
groups.indices
In [ ]:
fig,ax=plt.subplots(figsize=(5,5))
for name,group in groups:
ax.scatter(group['sepal_length'],group['sepal_width'],label=name)
plt.legend()
看一下各種類的最短花鄂長,以及最長花鄂長
In [ ]:
for name,group in groups:
print(name,np.min(group['sepal_length']),np.max(group['sepal_length']))
不同種類的花鄂長度區間分佈
In [ ]:
fig,ax=plt.subplots(3,figsize=(5,5))
color=['b','g','r']
for idx,(name,group) in enumerate(groups):
hist, bins =np.histogram(group['sepal_length'],bins=10,range=(4.3,7.9))
ax[idx].label=name
ax[idx].bar(bins[:-1], hist, width=(bins[1]-bins[0]),align='edge',label=name,color=color[idx])
print(idx,name)
ax[idx].legend()
ax[idx].set_ylim((0,30))
In [ ]:
fig,ax=plt.subplots(figsize=(5,5))
for idx,(name,group) in enumerate(groups):
if(idx==0):
bottom=0
else:
bottom+=hist
hist, bins =np.histogram(group['sepal_length'],bins=10,range=(4.3,7.9))
ax.bar(bins[:-1], hist,bottom=bottom, width=(bins[1]-bins[0]),align='edge',label=name)
ax.set_xlim((4,8))
plt.legend()
以上我們做的事情,事實上,seaborn已經幫我們做好了
In [ ]:
sns.pairplot(df, hue="species")
In [ ]:
df=pd.DataFrame.from_csv('https://raw.githubusercontent.com/chi-hung/PythonTutorial/master/datasets/iris.csv',index_col=None)
In [ ]:
df[:3]
In [ ]:
sns.pairplot(df, hue="species")
利用以下練習畫圖,NumPy array和程式設計:
In [ ]:
v=np.array([[0,np.sqrt(3.)/2.],[-0.5,0],[0.5,0]])
print(np.sqrt(3.)/2.)
In [ ]:
v=np.array([[0,np.sqrt(3.)/2.],[-0.5,0],[0.5,0]])
print(np.sqrt(3.)/2.)
n=10000
v_i=v[0]
v_walker=np.zeros(2)
for i in range(n):
v_rand=np.random.randint(0,3)
v_selected=v[v_rand]
# 完成以下程式碼
v_walker=...
In [12]:
# 產生好座標後,畫出以下三角形:
plt.plot(....)
Out[12]: