<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS_HTML"></script> <!-- MathJax configuration --> <script type="text/x-mathjax-config"> MathJax.Hub.Config({ tex2jax: { inlineMath: [ ['$','$'], ["\\(","\\)"] ], displayMath: [ ['$$','$$'], ["\\[","\\]"] ], processEscapes: true, processEnvironments: true }, // Center justify equations in code and markdown cells. Elsewhere // we use CSS to left justify single line equations in code cells. displayAlign: 'center', "HTML-CSS": { styles: {'.MathJax_Display': {"margin": 0}}, linebreaks: { automatic: true } } }); </script> <!-- End of mathjax configuration --></head>
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties # 修改字體
</div>
x = [5,7,2,10]
plt.plot(x) ### 畫折線圖,傳入一個值的話,這個值就是y軸值
plt.show()
</div>
<div class="prompt"></div>
x = [5,7,2,10]
y = [3,9,10,5]
plt.plot(x,y) ### 畫折線圖,傳入兩個值的話,第一個表明x值,第二個表明y值。
plt.show()
</div>
<div class="prompt"></div>
x = [1,3,6,9]
y = [12,5,10,20]
font=FontProperties(fname='C:\Windows\Fonts\simhei.ttf')
plt.figure(figsize=(10,6)) #### 設置畫板大小,第一個值表示寬度,第二個值表示高度。
plt.title('兩個參數的折線圖',fontproperties=font, fontsize=20, color='red') ### 設置標題
plt.xlabel('x軸', fontproperties=font,fontsize=15, color='red') ### 設置 x軸的說明
plt.ylabel('y軸', fontproperties=font,fontsize=20, color='blue') ### 設置 y 軸的說明
plt.plot(x, y)
plt.show()javascript
#### 存在的問題:1.中文亂碼
css
</div>
<div class="prompt"></div>
matplotlib 從配置文件 matplotlibrc 中讀取配置,字體相關內容也在其中。查詢當前matplotlibrc 所在目錄,能夠用 get_configdir()函數:java
一般存放位置:lib\site-packages\matplotlib\mpl-data\matplotlibrcnode
import matplotlib
matplotlib.get_configdir()
</div>
涉及到字體部分的設置內容爲:python
#font.family : sans-serif
#font.style : normal
#font.variant : normal
#font.weight : normal
#font.stretch : normal
## note that font.size controls default text sizes. To configure
## special text sizes tick labels, axes, labels, title, etc, see the rc
## settings for axes and ticks. Special text sizes can be defined
## relative to font.size, using the following values: xx-small, x-small,
## small, medium, large, x-large, xx-large, larger, or smaller
#font.size : 10.0
#font.serif : DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
#font.sans-serif : DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
#font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, Script MT, Felipa, cursive
#font.fantasy : Comic Sans MS, Chicago, Charcoal, ImpactWestern, Humor Sans, xkcd, fantasy
#font.monospace : DejaVu Sans Mono, Bitstream Vera Sans Mono, Computer Modern Typewriter, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace
</div>
matplotlib 默認使用的 font.family 是 sans-serif,即無襯線字體,能夠看到在font.sans-serif中設置的所有爲西文字體,這裏的設置和css樣式文件中設置差很少,只須要添加系統存在的字體名稱便可(須要注意的是,matplotlib:jquery
只支持ttf格式的字體),設置時須要將註釋符號#去除。linux
import matplotlib as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示爲方塊的問題,或者轉換負號爲字符串
</div>
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
</div>
#### windows配置
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
</div>
x = [1,3,6,9]
y = [12,5,10,20]
plt.figure(figsize=(10,6)) #### 設置畫板大小android
plt.title('標題',fontsize=20, color='red') ### 設置標題
plt.xlabel('x軸',fontsize=15, color='blue') ### 設置 x軸的說明
plt.ylabel('y軸', fontsize=20, color='blue') ### 設置 y 軸的說明
plt.plot(x, y)
plt.show()
</div>
<div class="prompt"></div>
import numpy as np
import pylab as pl
import matplotlib.font_manager as fm
myfont = fm.FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf') # 設置字體
t = np.arange(0.0,2.0 * np.pi,0.01) # 自變量取值範圍
s = np.sin(t) # 計算正弦函數值
z = np.cos(t) # 計算餘弦函數值
pl.plot(t,s,label='正弦')
pl.plot(t,z,label='餘弦')
pl.xlabel('x-變量',fontproperties=myfont,fontsize=24) #設置標籤
pl.ylabel('y-正弦餘弦函數值',fontproperties=myfont,fontsize=24)
pl.title('sin-cos函數圖像',fontproperties=myfont,fontsize=32) #圖像標題
pl.legend(prop=myfont)
pl.show()
</div>
<div class="prompt"></div>
import pandas as pd
movies = pd.read_csv('./douban_movie.csv') ### 只須要read_csv函數, 將csv中的全部數據讀出
movies
</div>
<div class="prompt output_prompt">Out[20]:</div>
movies.groupby('產地').groups
</div>
<div class="prompt output_prompt">Out[21]:</div>
res = movies.groupby('產地').size().sort_values(ascending=False)
res
</div>
<div class="prompt output_prompt">Out[22]:</div>
res[0]
</div>
<div class="prompt output_prompt">Out[12]:</div>
res.values
</div>
<div class="prompt output_prompt">Out[23]:</div>
res.index
</div>
<div class="prompt output_prompt">Out[24]:</div>
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties # 修改字體
font=FontProperties(fname='C:\Windows\Fonts\simfang.ttf')
plt.style.use('ggplot') # 設置條形圖的背景
plt.figure(figsize=(18,6))
Product_origin=res.index
movies_count = res.values
plt.xlabel('產地',FontProperties=font,fontsize=15,color='blue')
plt.ylabel('出影數',FontProperties=font,fontsize=15,color='blue')
plt.title('產地-電影數量',FontProperties=font,fontsize=30)
plt.xticks(fontproperties=font, size=18, rotation=90) ### 對座標軸上的刻度進行設置 rotation控制字體旋轉
for a,b in zip(Product_origin,movies_count):
plt.text(a,b+100,b,ha='center') #### 參數1控制x軸文本,參數2控制柱上的數字,+100是柱子和數字之間的距離,參數3控制文本在柱子上居中,參數4控制字體大小
plt.bar(Product_origin,movies_count,color='darkgreen')
# plt.savefig('./a.png') #### 保存圖片
plt.show()
</div>
<div class="prompt"></div>
<div class="prompt"></div>
<div class="prompt"></div>
<div class="prompt"></div>
<div class="prompt"></div>
movies.groupby('年代').groups
</div>
<div class="prompt output_prompt">Out[48]:</div>
res = movies.groupby('年代').size().sort_index()[:-2] #### 按照年代分組,用size統計每一年對應的數量,再以年代爲索引排序,[:-2]刪除最後兩個無效數據
res
</div>
<div class="prompt output_prompt">Out[62]:</div>
x = res.index
y = res.values
plt.figure(figsize=(10,6))
plt.title('每一年電影數量的折線圖',FontProperties=font,color='red',size=20)
plt.xlabel('年代',FontProperties=font,color='blue',size=15)
plt.ylabel('數量',FontProperties=font,color='blue',size=15)
plt.plot(x,y)
plt.show()
</div>
<div class="prompt"></div>
#### 分佈的範圍:0-70 70-100 100-130 130-----
</div>
t = pd.cut([10,5,20,15,8], (2,10,15,50)) ### 第一個參數是待分割的數據 第二個參數是分割的範圍
t
</div>
<div class="prompt output_prompt">Out[66]:</div>
res = t.value_counts() ### 將值相同的進行分組而且計算個數
res
</div>
<div class="prompt output_prompt">Out[72]:</div>
res.index
</div>
<div class="prompt output_prompt">Out[73]:</div>
res.values
</div>
<div class="prompt output_prompt">Out[74]:</div>
movie_time = movies['時長']
movie_time
</div>
<div class="prompt output_prompt">Out[76]:</div>
res_time = pd.cut(movie_time,(0,70,100,130,1000)).value_counts()
res_time
</div>
<div class="prompt output_prompt">Out[79]:</div>
x = res_time.index
y = res_time.values
plt.figure(figsize=(10,6))
plt.title('電影時長分佈圖', FontProperties=font, color='red', size=20)
patchs, l_text, p_text = plt.pie(y,labels=x, autopct='%.2f%%')
for l in l_text: ### l_text 就是一個lable的列表
l.set_size(15)
l.set_color('red')
for p in p_text: #### p_text: 就是百分比值
p.set_size(15)
p.set_color('white')
plt.show()
</div>
<div class="prompt"></div>
matplotlib模塊第二部分:matplotlib模塊 07