gdp_dat.csv在文章末尾
方法講解
中文顯示錯誤問題
在繪圖中如果出現中文標籤或者負號,會無法正常顯示,可以使用以下解決方案:
import matplotlib.pyplot as plt
# 用來正常顯示中文標籤
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用來正常顯示負號
plt.rcParams['axes.unicode_minus'] = False
設置x軸的標籤
例子:
import matplotlib.pyplot as plt
# 設置座標的標籤
plt.xlabel('花瓣長度')
ylabel
設置y軸的標籤
與設置x軸標籤類似
legend
設置圖例位置
例子:
import matplotlib.pyplot as plt
# 表示圖例將添加在圖中的左上角
plt.legend(loc= 'upper left')
show
展示繪製好的圖形
例子:
import matplotlib.pyplot as plt
plt.show()
plot
繪製曲線圖。注意:曲線圖如果出現x或者y軸無序的情況,那是因爲數據類型沒轉成數字類型的
例子:
import matplotlib.pyplot as plt
import pandas as pd
# 用來正常顯示中文標籤
plt.rcParams['font.sans-serif'] = ['SimHei']
gdp_data = pd.read_csv('gdp_data.csv')
gdp_data = gdp_data[::-1]
plt.plot(gdp_data['年份'][0:10], gdp_data['增速'][0:10])
# 讓 X 軸的數據呈45度展示
plt.xticks(rotation=45)
# 給 X 軸和 Y 軸加上標籤
plt.xlabel('年份')
plt.ylabel('增速')
# 設置標題
plt.title('國內GDP增速')
# 展示繪圖
plt.show()
輸出如下:
add_subplot
添加子圖,方法接收三個參數,參數1表示行,參數2表示列,參數3表示第在矩陣中的第幾個元素,比如add_subplot(2, 3, 2)表示創建一個兩行三列的矩陣,子圖位於矩陣的第二個元素。元素個數是先從左往右,再從上往下依次添加的。如下圖所示:
例子:
gdp_data = pd.read_csv('gdp_data.csv')
gdp_data = gdp_data[::-1]
# 創建圖形對象
fig = plt.figure()
# 如果加上figsize就是指定figure的寬高,單位爲英尺
# fig = plt.figure(figsize=(3, 3))
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 4)
# 使用子圖去繪製
ax1.plot(gdp_data["年份"][0:10], gdp_data["增速"][0:10])
ax2.plot(gdp_data["年份"][10:20], gdp_data["增速"][10:20])
ax3.plot(gdp_data["年份"][20:30], gdp_data["增速"][20:30])
plt.show()
輸出如下:
在同一幅圖當中繪製兩條曲線
例子:
# 用來正常顯示中文標籤
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用來正常顯示負號
plt.rcParams['axes.unicode_minus'] = False
gdp_data = pd.read_csv('gdp_data.csv')
usa_gdp_data = pd.read_csv('usa_gdp_data.csv')
gdp_data = gdp_data[::-1]
usa_gdp_data = usa_gdp_data[::-1]
plt.figure(figsize=(6,3))
plt.plot(gdp_data["年份"][0:10], gdp_data["增速"][0:10], color='red', label='中國gdp增速')
plt.plot(usa_gdp_data["年份"][0:10], usa_gdp_data["增速"][0:10], color='blue', label='美國gdp增速')
plt.xlabel("年份")
plt.xlabel("增速")
plt.title('中美1961-1970GDP增速對比')
plt.legend(loc= 'upper left')
plt.show()
輸出如下:
subplot、subplots和add_subplot的區別
plt.subplots()是一個函數,返回一個包含figure和axes對象的元組。因此,使用fig,ax = plt.subplots()將元組分解爲fig和ax兩個變量。
下面兩種表達方式具有同樣的效果,可以看出fig.ax = plt.subplots()較爲簡潔。
fig = plt.figure()
ax = fig.add_subplt(111)
fig,ax = plt.subplots()
通常,我們只用到ax.
fig,ax = plt.subplots(nrows=2, ncols=2)
axes = ax.flatten()
把父圖分成2*2個子圖,ax.flatten()把子圖展開賦值給axes,axes[0]便是第一個子圖,axes[1]是第二個... ...
如果,你想改變圖形的屬性或想把圖形保存爲.npg文件,那麼fig是非常有用的。
fig = plt.figure()
fig.add_subplot(121)
fig.savefig("name.npg")
fig.add_subplot(121)和fig.add_subplot(1,2,1)是可互換的。表示把父圖分成1行2列,圖形繪製在第一個子圖上。
ax = fig.add_subplot(121) ax.hist() #直方圖就繪製在了1*2中的第一個子圖上。
bar
繪製條形圖(柱狀圖),也可以使用plt.bar來進行繪製,若使用plt.bar繪製,設置對應的參數則是plt.xxx()
例子:
# 用來正常顯示中文標籤
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用來正常顯示負號
plt.rcParams['axes.unicode_minus'] = False
petal_data = pd.read_csv('data.csv')
show_column = ["花萼長度", "花萼寬度", "花瓣長度", "花瓣寬度"]
# 獲取第一行數據
bar_heights = petal_data.loc[0, show_column].values
# 定義每個柱子的中心線到零軸的距離
bar_position = np.arange(1, 5)
# 相當於 fig = plt.figure 和 ax = fig.add_subplot(1, 1, 1)的簡寫
fig, ax = plt.subplots()
# 繪製條形圖,第一個參數是每個柱子的中心線到零軸的距離,第二個參數是每個柱子的高度,第三個參數是每個柱子的寬度
ax.bar(bar_position, bar_heights, 0.5)
# 條形圖橫向顯示,若是橫向則所有x和y的設置都要相互替換
# ax.barh(bar_heights, bar_position, 0.5)
# 設置 X 軸第一到第四個元素的刻度
ax.set_xticks(range(1,5))
# 設置 X 軸刻度的標籤和角度
ax.set_xticklabels(show_column , rotation=45)
# 設置 X 和 Y 軸的標籤,相當於plt.xlabel('xx')和plt.ylabel('xx')
ax.set_xlabel('植物屬性')
ax.set_ylabel('釐米')
# 設置標題,相當於plt.title('xx')
ax.set_title('植物參數對比圖')
plt.show()
輸出如下:
scatter
繪製散點圖,可以用plt.scatter()方法來繪製,
例子:
import matplotlib.pyplot as plt
# 用來正常顯示中文標籤
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用來正常顯示負號
plt.rcParams['axes.unicode_minus'] = False
petal_data = pd.read_csv('data.csv')
fig, ax = plt.subplots()
# 參數1是橫座標數組,參數2是縱座標數組,color是顏色,marker是座標點的形狀,label是標籤
ax.scatter(petal_data["花萼長度"][0:100], petal_data["花瓣長度"][0:100], color='blue', marker='o', label='a')
# 還可以使用plt繪製
# plt.scatter(petal_data["花萼長度"][0:100], petal_data["花瓣長度"][0:100], color='red', marker='o', label='a')
ax.set_title('植物信息散點圖')
ax.set_xlabel('花萼長度')
ax.set_ylabel('花瓣長度')
plt.show()
輸出如下:
hist
繪製直方圖。直方圖和條形圖的區別:條形圖是繪製某一個屬性對應的值,比如中國人口數量、美國人口數量等。 而直方圖則是繪製某一個屬性區間對應的值,比如學生成績,70~80分段的人數,80~90分段的人數等。
例子:
# 用來正常顯示中文標籤
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用來正常顯示負號
plt.rcParams['axes.unicode_minus'] = False
petal_data = pd.read_csv('data.csv')
fig, ax = plt.subplots()
# 繪製直方圖,range表示展示的區間,bins表示區間內劃分多少個區域
ax.hist(petal_data['花萼長度'], range=(5.1, 5.9), bins=9)
# 設置 X 和 Y 軸刻度的區間
ax.set_xlim(5, 6)
ax.set_ylim(0, 10)
ax.set_title('花萼長度統計直方圖')
ax.set_xlabel('花萼長度')
ax.set_ylabel('數量')
plt.show()
輸出如下:
boxplot
繪製和盒形圖
例子:
# 用來正常顯示中文標籤
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用來正常顯示負號
plt.rcParams['axes.unicode_minus'] = False
petal_data = pd.read_csv('data.csv')
# 要繪製的列
columns = ['花萼長度','花瓣長度']
fig, ax = plt.subplots()
# 繪製盒形圖
ax.boxplot(petal_data[columns].values)
# 設置 X 軸刻度
ax.set_xticklabels(columns)
ax.set_ylabel('長度/cm')
plt.show()
輸出如下(紅色部分是自己標註上去說明的):
gdp_data.csv:
年份,增速
2018,6.6%
2017,6.76%
2016,6.74%
2015,6.91%
2014,7.3%
2013,7.77%
2012,7.86%
2011,9.55%
2010,10.64%
2009,9.4%
2008,9.65%
2007,14.23%
2006,12.72%
2005,11.4%
2004,10.11%
2003,10.04%
2002,9.13%
2001,8.34%
2000,8.49%
1999,7.67%
1998,7.84%
1997,9.23%
1996,9.93%
1995,10.95%
1994,13.05%
1993,13.87%
1992,14.22%
1991,9.29%
1990,3.91%
1989,4.19%
1988,11.23%
1987,11.69%
1986,8.94%
1985,13.44%
1984,15.14%
1983,10.84%
1982,8.93%
1981,5.17%
1980,7.81%
1979,7.6%
1978,11.13%
1977,7.57%
1976,-1.57%
1975,8.72%
1974,2.31%
1973,7.76%
1972,3.81%
1971,7.06%
1970,19.3%
1969,16.94%
1968,-4.1%
1967,-5.77%
1966,10.65%
1965,16.95%
1964,18.18%
1963,10.3%
1962,-5.58%
1961,-27.27%