Matplotlib入门
原始數(shù)據(jù)樣本
DATE,VALUE 1948-01-01,3.4 1948-02-01,3.8 1948-03-01,4.0 1948-04-01,3.9 1948-05-01,3.5 1948-06-01,3.6 1948-07-01,3.6 1948-08-01,3.9 1948-09-01,3.8 1948-10-01,3.7 1948-11-01,3.8 1948-12-01,4.0 1949-01-01,4.3 1949-02-01,4.7 1949-03-01,5.0 1949-04-01,5.31. 畫折線圖
import matplotlib.pyplot as plt import pandas as pdunrate = pd.read_csv('UNRATE.csv') twelve = unrate[0:12] # 獲取前12條數(shù)據(jù) plt.plot(twelve['DATE'], twelve['VALUE']) # 橫坐標(biāo)是時間,縱坐標(biāo)是值 plt.show()結(jié)果如下圖:
可以看出來,橫坐標(biāo)的值已經(jīng)擠壓在一起了,
使用plt.xticks(rotation=45)將橫坐標(biāo)進(jìn)行旋轉(zhuǎn)45度,
顯示結(jié)果如下:
1.1 增加XY的label,以及title
plt.xlabel('Month') plt.ylabel('Unemployment Rate') plt.plot(twelve['DATE'], twelve['VALUE']) plt.xticks(rotation=45) plt.show()結(jié)果如下圖
2子圖
2.1添加子圖
在寫論文時,有很多指標(biāo),這些指標(biāo)沒有辦法畫在一張圖中,因此需要畫很多子圖來表示。
- fig.add_subplot(4, 1, x):4和1表示4行一列,順序是從上到下,從左到右進(jìn)行排序。
2.2 修改圖片大小
fig = plt.figure(figsize=(5,3)) # 5表示圖片的長,3表示圖片的寬 ax1 = fig.add_subplot(2,1,1) # 添加子圖1 ax2 = fig.add_subplot(2,1,2) # 添加子圖2 ax1.plot(twelve['DATE'], twelve['VALUE']) # 給子圖1添加數(shù)據(jù) ax2.plot(twelve['DATE'], twelve['VALUE']) # 給子圖2添加數(shù)據(jù) plt.xticks(rotation=45) plt.show()2.3 在同一個圖中,畫兩條折線
fig = plt.figure(figsize=(6,3))plt.plot(unrate[0:12]['DATE'], unrate[0:12]['VALUE'], c='red', label='0-12') #添加一條紅色的線 plt.plot(unrate[0:12]['DATE'], unrate[12:24]['VALUE'], c='blue', label='12-24') # 添加一條藍(lán)色的線 plt.legend(loc='best') # 添加圖例,best表示自動決定放到最合適的位置 plt.xticks(rotation=45) plt.show()結(jié)果如下:
3 柱狀圖
import numpy reviews = pd.read_csv('fandango_scores.csv') num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue','Fandango_Stars'] #print(norm_reviews) bar_heights = reviews.loc[0, num_cols].values # 每一個柱狀的高度, loc表示定位第幾行 print(bar_heights) bar_positions = numpy.arange(5) + 0.75 # 每一個柱狀的位置。就是離原點(diǎn)的位置 print(bar_positions) fig,ax = plt.subplots() # 創(chuàng)建一個figure 和一組subplots ax.bar(bar_positions, bar_heights, 0.3) #0.3表示柱狀條形圖寬度 ax.set_xticks(range(1, 6)) ax.set_xticklabels(num_cols, rotation=45)ax.set_xlabel('Rating Source') ax.set_ylabel('Average Rating') ax.set_title('Average User Rating For Avengers: Age of Ultro(2015)')plt.show()輸出結(jié)果:
3.1 橫向柱狀圖
import numpy reviews = pd.read_csv('fandango_scores.csv') num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue','Fandango_Stars'] #print(norm_reviews) bar_heights = reviews.loc[0, num_cols].values # 每一個柱狀的高度 print(bar_heights) bar_positions = numpy.arange(5) + 0.75 # 每一個柱狀的位置。就是離原點(diǎn)的位置 print(bar_positions) fig,ax = plt.subplots() # 創(chuàng)建一個figure 和一組subplots ax.barh(bar_positions, bar_heights, 0.3) #0.3表示柱狀條形圖寬度, barh表示橫向畫圖 ax.set_yticks(range(1, 6)) ax.set_yticklabels(num_cols, rotation=45)ax.set_xlabel('Average Rating') ax.set_ylabel('Rating Source') ax.set_title('Average User Rating For Avengers: Age of Ultro(2015)')plt.show()輸出結(jié)果:
3.2 按照x軸數(shù)據(jù)歸類來畫柱狀圖
當(dāng)x軸上的數(shù)據(jù)非常多的時候,不方便將每個x軸數(shù)據(jù)進(jìn)行顯示,可以進(jìn)行歸類,如下圖:
輸出結(jié)果如下:
默認(rèn)情況下,hist按照10個進(jìn)行統(tǒng)計。可以指定個數(shù):
ax.hist(norm_reviews['Fandango_Ratingvalue'], bins=20)
這樣會自動劃分20個區(qū)間,那么輸出結(jié)果如下:
同時,還可以指定具體某一個區(qū)間,比如只顯示區(qū)間(4,5)之間的數(shù)據(jù),ax.hist(norm_reviews['Fandango_Ratingvalue'], range=(4,5),bins=20)如下圖所示:
同時可以指定y軸和x軸的區(qū)間范圍:
輸出結(jié)果如下:
指定橫軸區(qū)間
import matplotlib.pyplot as plt height = [168,155,182,170,173,161,155,173,176,181,166,172,170] bins = range(150, 191, 5) # 指定橫軸區(qū)間 plt.hist(height, bins=bins) plt.show()條形圖
條形圖是用寬度相同的條形的高度或長短來表示數(shù)據(jù)多少的圖形。
import matplotlib.pyplot as plt classes = ['class1', 'class2', 'class3'] scores = [70,80,60] plt.bar(classes,scores) plt.show()4 散點(diǎn)圖
fig,ax = plt.subplots() ax.scatter(norm_reviews['Fandango_Ratingvalue'], norm_reviews['RT_user_norm']) ax.set_xlabel('Fandango') ax.set_ylabel('Rotten Tomatoes') plt.show()輸出結(jié)果:
5 盒圖
fig, ax = plt.subplots() num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue'] ax.boxplot(norm_reviews[num_cols]) ax.set_xticklabels(num_cols, rotation=90) ax.set_ylim(0,5)plt.show()輸出結(jié)果如下:
6 餅圖
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 中文顯示labels = ['房貸', '飲食', '出行', '教育'] data = [8000, 2000, 2000, 3000] plt.pie(data, labels=labels, autopct='%1.1f%%') # autopct表示顯示百分比中文設(shè)置
默認(rèn)情況下中文設(shè)置會顯示亂碼,如下代碼所示:
import matplotlib.pyplot as plt x=[1,2] y=[3,4] plt.title('中文標(biāo)題') plt.bar(x,y) plt.show()結(jié)果如下:
可以看出來中文顯示亂碼了。
可以添加參數(shù)rcParams
負(fù)號亂碼
當(dāng)我們的數(shù)值中包含負(fù)號時,默認(rèn)也會出現(xiàn)亂碼現(xiàn)象:
import matplotlib.pyplot as plt import matplotlib as mpl x=[1,2] y=[-3,4] mpl.rcParams['font.sans-serif'] = ['SimHei'] plt.title('中文標(biāo)題') plt.bar(x,y) plt.show()
同樣可以通過設(shè)置參數(shù)進(jìn)行修改:
修改線條樣式
折線圖:
import matplotlib.pyplot as plt import matplotlib as mpl x=[1,2] y=[-3,4] mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False plt.title('中文標(biāo)題') plt.plot(x,y) plt.show()
設(shè)置線條類型:
設(shè)置title xlable ylabel xticks
x = [1,2,3] name = ['A班', 'B班', 'C班'] y = [80, 85, 75] plt.bar(x, y) plt.title("三班成績柱狀圖") plt.xlabel('班級') plt.ylabel('成績') plt.xticks(x, name) # 將1對應(yīng)為A班,2對應(yīng)為B班,3對應(yīng)為C班 plt.text(1, 81,80) # 在(1,81)位置上添加文字80 plt.text(2, 86, 85) # 在(2,86)位置上添加文字85總結(jié)
以上是生活随笔為你收集整理的Matplotlib入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全切双眼皮多久能恢复正常饮食
- 下一篇: Jupyter Noteboot 添加k