使用Python Matplotlib庫繪製圖表的步驟和方法是什麼?
中文字體設定:
# 字体设置 plt.rcParams['font.sans-serif'] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False
1、基本使用
Matplotlib:是一個Python的2D繪圖庫,透過Matplotlib,開發者可以只需要幾行程式碼,便可以產生折線圖,直方圖,長條圖,餅狀圖,散佈圖等。 plot
是一個畫圖的函數,他的參數:plot([x],y,[fmt],data=None,**kwargs)
#1.1、線條樣式& 顏色
(1)點線形式
#(2)線條顏色
import matplotlib.pyplot as plt import numpy as np # 原始线图 plt.plot(range(10),[np.random.randint(0,10) for x in range(10)]) # 点线图 plt.plot(range(10),[np.random.randint(0,10) for x in range(10)],"*") # 线条颜色 plt.plot([1,2,3,4,5],[1,2,3,4,5],'r') #将颜色线条设置成红色
運行結果:
#1.2、軸&標題
- ##1、設置圖片標題:plt.title
- 2、設定軸標題:plt.xlabel & plt.ylabel - 標題名稱
- 3、設定軸刻度:plt.xticks & plt.yticks - 刻度長度,刻度標題
範例:##x = range(10)
y = [np.random.randint(0,10) for x in range(10)]
plt.plot(x,y,linewidth=10,color='red')
# 设置图标题
plt.title("sin函数")
# 设置轴标题
plt.xlabel("x轴")
plt.ylabel("y轴")
# 设置轴刻度
plt.xticks(range(10),["第%d天"%x for x in range(1,10)])
plt.yticks(range(10),["第%d天"%x for x in range(1,10)])
# 加载字体
plt.rcParams['font.sans-serif'] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
1.3、marker設定
marker:关键点重点标记
x = range(10)
y = [np.random.randint(0,10) for x in range(10)]
plt.plot(x,y,linewidth=10,color='red')
# 重点标记
plt.plot(x,y,marker="o",markerfacecolor='k',markersize=10)
1.4、註解文字
annotate:注释文本
x = range(10)
y = [np.random.randint(0,10) for x in range(10)]
plt.plot(x,y,linewidth=10,color='red')
# 重点标记
plt.plot(x,y,marker="o",markerfacecolor='k',markersize=10)
# 注释文本设置
plt.annotate('local max', xy=(5, 5), xytext=(10,15),
arrowprops=dict(facecolor='black',shrink=0.05),
)
1.5、設定圖形樣式
plt.figure:调整图片的大小和像素 `num`:图的编号, `figsize`:单位是英寸, `dpi`:每英寸的像素点, `facecolor`:图片背景颜色, `edgecolor`:边框颜色, `frameon`:是否绘制画板。
x = range(10)
y = [np.random.randint(0,10) for x in range(10)]
# 设置图形样式
plt.figure(figsize=(20,10),dpi=80)
plt.plot(x,y,linewidth=10,color='red')
2、長條圖
- 1 . 數量統計。
- 2. 頻率統計。
barh:長條圖
- 1. `x`:一個陣列或列表,代表需要繪製的長條圖的x軸的座標點。
- 2. `height`:一個陣列或列表,代表需要繪製的長條圖y軸的座標點。
- 3. `width`:每個長條圖的寬度,預設是0.8的寬度。
- 4. `bottom`:`y`軸的基線,預設是0,也就是距離底部為0.
- ##5. `align`:對齊方式,預設是`center`,也就是跟指定的`x`座標居中對齊,還有為`edge`,靠邊對齊,具體靠右邊還是靠左邊,看`width`的正負。
- 6. `color`:長條圖的顏色。
- 2.1、橫向長條圖範例
movies = { "流浪地球":40.78, "飞驰人生":15.77, "疯狂的外星人":20.83, "新喜剧之王":6.10, "廉政风云":1.10, "神探蒲松龄":1.49, "小猪佩奇过大年":1.22, "熊出没·原始时代":6.71 } plt.barh(np.arange(len(movies)),list(movies.values())) plt.yticks(np.arange(len(movies)),list(movies.keys()),fontproperties=font) plt.grid()
2.2、分組長條圖
範例:
movies = { "流浪地球":[2.01,4.59,7.99,11.83,16], "飞驰人生":[3.19,5.08,6.73,8.10,9.35], "疯狂的外星人":[4.07,6.92,9.30,11.29,13.03], "新喜剧之王":[2.72,3.79,4.45,4.83,5.11], "廉政风云":[0.56,0.74,0.83,0.88,0.92], "神探蒲松龄":[0.66,0.95,1.10,1.17,1.23], "小猪佩奇过大年":[0.58,0.81,0.94,1.01,1.07], "熊出没·原始时代":[1.13,1.96,2.73,3.42,4.05] } plt.figure(figsize=(20,8)) width = 0.75 bin_width = width/5 movie_pd = pd.DataFrame(movies) ind = np.arange(0,len(movies)) # 第一种方案 for index in movie_pd.index: day_tickets = movie_pd.iloc[index] xs = ind-(bin_width*(2-index)) plt.bar(xs,day_tickets,width=bin_width,label="第%d天"%(index+1)) for ticket,x in zip(day_tickets,xs): plt.annotate(ticket,xy=(x,ticket),xytext=(x-0.1,ticket+0.1)) # 设置图例 plt.ylabel("单位:亿") plt.title("春节前5天电影票房记录") # 设置x轴的坐标 plt.xticks(ind,movie_pd.columns) plt.xlim plt.grid(True) plt.show()
2.3、堆疊長條圖
範例:
menMeans = (20, 35, 30, 35, 27) womenMeans = (25, 32, 34, 20, 25) groupNames = ('G1','G2','G3','G4','G5') xs = np.arange(len(menMeans)) plt.bar(xs,menMeans) plt.bar(xs,womenMeans,bottom=menMeans) plt.xticks(xs,groupNames) plt.show()
##3、直方圖
#1. x:陣列或可以循環的序列;
2. bins:數字或序列(陣列/列表等);
3. range:元組或None,如果為元組,那麼指定`x`分割區間的最大值和最小值;
4. density:預設是`False`,如果等於`True`,那麼將會使用頻率分佈直方圖;
#5. cumulative:如果這個和`density`都等於`True`,那麼傳回值的第一個參數會不斷的累加,最後等於`1`。
- 應用場景:
#1. 顯示各組資料數量分佈的情況。
2. 用於觀察異常或孤立資料。
3. 抽取的樣本數太小,將會產生較大誤差,可信度低,也就失去了統計的意義。因此,樣本數不應少於50個。
3.1、直方圖
durations = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150] plt.figure(figsize=(15,5)) nums,bins,patches = plt.hist(durations,bins=20,edgecolor='k') plt.xticks(bins,bins) for num,bin in zip(nums,bins): plt.annotate(num,xy=(bin,num),xytext=(bin+1.5,num+0.5)) plt.show()
運行結果:
3.2、频率直方图
density:频率直方分布图
范例:
nums,bins,patches = plt.hist(durations,bins=20,edgecolor='k',density=True,cumulative=True) plt.xticks(bins,bins) for num,bin in zip(nums,bins): plt.annotate("%.4f"%num,xy=(bin,num),xytext=(bin+0.2,num+0.0005))
运行结果:
3.3、直方图
cumulative参数:nums的总和为1
范例:
plt.figure(figsize=(15,5)) nums,bins,patches = plt.hist(durations,bins=20,edgecolor='k',density=True,cumulative=True) plt.xticks(bins,bins) for num,bin in zip(nums,bins): plt.annotate("%.4f"%num,xy=(bin,num),xytext=(bin+0.2,num+0.0005))
运行结果:
4、散点图
plt.scatter:散点图绘制:
1. x,y:分别是x轴和y轴的数据集。两者的数据长度必须一致。
2. s:点的尺寸。
3. c:点的颜色。
4. marker:标记点,默认是圆点,也可以换成其他的。
范例:
plt.scatter(x =data_month_sum["sumprice"] #传入X变量数据 ,y=data_month_sum["Quantity"] #传入Y变量数据 ,marker='*' #点的形状 ,s=10 #点的大小 ,c='r' #点的颜色 ) plt.show()
运行结果:
5、饼图
饼图:一个划分为几个扇形的圆形统计图表,用于描述量、频率或百分比之间的相对关系的。
在matplotlib
中,可以通过plt.pie
来实现,其中的参数如下:
x
:饼图的比例序列。labe
ls
:饼图上每个分块的名称文字。explode
:设置某几个分块是否要分离饼图。autopct
:设置比例文字的展示方式。比如保留几个小数等。shadow
:是否显示阴影。textprops
:文本的属性(颜色,大小等)。 范例
plt.figure(figsize=(8,8),dpi=100,facecolor='white') plt.pie(x = StockCode.values, #数据传入 radius=1.5, #半径 autopct='%.2f%%' #百分比显示 ,pctdistance=0.6, #百分比距离圆心比例 labels=StockCode.index, #标签 labeldistance=1.1, #标签距离圆心比例 wedgeprops ={'linewidth':1.5,'edgecolor':'green'}, #边框的线宽和颜色 textprops={'fontsize':10,'color':'blue'}) #文本字体大小和颜色 plt.title('商品销量占比',pad=100) #设置标题及距离坐标轴的位置 plt.show()
运行结果:
6、箱线图
箱图的绘制方法是:
:1、先找出一组数据的上限值、下限值、中位数(Q2)和下四分位数(Q1)以及上四分位数(Q3)
:2、然后连接两个四分位数画出箱子
:3、再将最大值和最小值与箱子相连接,中位数在箱子中间。
中位数:把数据按照从小到大的顺序排序,然后最中间的那个值为中位数,如果数据的个数为偶数,那么就是最中间的两个数的平均数为中位数。
上下四分位数:同样把数据排好序后,把数据等分为4份。出现在`25%`位置的叫做下四分位数,出现在`75%`位置上的数叫做上四分位数。但是四分位数位置的确定方法不是固定的,有几种算法,每种方法得到的结果会有一定差异,但差异不会很大。
上下限的计算规则是:
IQR=Q3-Q1
上限=Q3+1.5IQR
下限=Q1-1.5IQR
在matplotlib
中有plt.boxplot
来绘制箱线图,这个方法的相关参数如下:
x
:需要绘制的箱线图的数据。notch
:是否展示置信区间,默认是False
。如果设置为True
,那么就会在盒子上展示一个缺口。sym
:代表异常点的符号表示,默认是小圆点。vert
:是否是垂直的,默认是True
,如果设置为False
那么将水平方向展示。whis
:上下限的系数,默认是1.5
,也就是上限是Q3+1.5IQR
,可以改成其他的。也可以为一个序列,如果是序列,那么序列中的两个值分别代表的就是下限和上限的值,而不是再需要通过IQR
来计算。positions
:设置每个盒子的位置。widths
:设置每个盒子的宽度。labels
:每个盒子的label
。meanline
和showmeans
:如果这两个都为True
,那么将会绘制平均值的的线条。
范例:
#箱线图 - 主要观察数据是否有异常(离群点) #箱须-75%和25%的分位数+/-1.5倍分位差 plt.figure(figsize=(6.4,4.8),dpi=100) #是否填充箱体颜色,是否展示均值,是否展示异常值,箱体设置,异常值设置,均值设置,中位数设置 plt.boxplot(x=UnitPrice #传入数据 ,patch_artist=True #是否填充箱体颜色 ,showmeans=True #是否展示均值 ,showfliers=True #是否展示异常值 ,boxprops={'color':'black','facecolor':'white'} #箱体设置 ,flierprops={'marker':'o','markersize':4,'markerfacecolor':'red'} #异常值设置 ,meanprops={'marker':'o','markersize':6,'markerfacecolor':'indianred'} #均值设置 ,medianprops={'linestyle':'--','color':'blue'} #中位数设置 ) plt.show()
运行结果:
7、雷达图
雷达图:又被叫做蜘蛛网图,适用于显示三个或更多的维度的变量的强弱情况
plt.polar
来绘制雷达图,x
轴的坐标点应该为弧度(2*PI=360°)
范例:
import numpy as np properties = ['输出','KDA','发育','团战','生存'] values = [40,91,44,90,95,40] theta = np.linspace(0,np.pi*2,6) plt.polar(theta,values) plt.xticks(theta,properties) plt.fill(theta,values)
运行结果:
注意事项:
因為
polar
並不會完成線條的閉合繪製,所以我們在繪製的時候需要在theta
中和values
中在最後多重複加入第0個位置的值,然後在繪製的時候就可以和第1個點進行閉合了。polar
只是繪製線條,所以如果想要在裡面進行顏色填充,那麼需要呼叫fill
函數來實現。polar
預設的圓圈的座標是角度,如果我們想要改成文字顯示,那麼可以透過xticks
來設定。
以上是使用Python Matplotlib庫繪製圖表的步驟和方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

MySQL 有免費的社區版和收費的企業版。社區版可免費使用和修改,但支持有限,適合穩定性要求不高、技術能力強的應用。企業版提供全面商業支持,適合需要穩定可靠、高性能數據庫且願意為支持買單的應用。選擇版本時考慮的因素包括應用關鍵性、預算和技術技能。沒有完美的選項,只有最合適的方案,需根據具體情況謹慎選擇。

HadiDB:輕量級、高水平可擴展的Python數據庫HadiDB(hadidb)是一個用Python編寫的輕量級數據庫,具備高度水平的可擴展性。安裝HadiDB使用pip安裝:pipinstallhadidb用戶管理創建用戶:createuser()方法創建一個新用戶。 authentication()方法驗證用戶身份。 fromhadidb.operationimportuseruser_obj=user("admin","admin")user_obj.

MySQL Workbench 可以連接 MariaDB,前提是配置正確。首先選擇 "MariaDB" 作為連接器類型。在連接配置中,正確設置 HOST、PORT、USER、PASSWORD 和 DATABASE。測試連接時,檢查 MariaDB 服務是否啟動,用戶名和密碼是否正確,端口號是否正確,防火牆是否允許連接,以及數據庫是否存在。高級用法中,使用連接池技術優化性能。常見錯誤包括權限不足、網絡連接問題等,調試錯誤時仔細分析錯誤信息和使用調試工具。優化網絡配置可以提升性能

直接通過 Navicat 查看 MongoDB 密碼是不可能的,因為它以哈希值形式存儲。取回丟失密碼的方法:1. 重置密碼;2. 檢查配置文件(可能包含哈希值);3. 檢查代碼(可能硬編碼密碼)。

無法連接 MySQL 可能是由於以下原因:MySQL 服務未啟動、防火牆攔截連接、端口號錯誤、用戶名或密碼錯誤、my.cnf 中的監聽地址配置不當等。排查步驟包括:1. 檢查 MySQL 服務是否正在運行;2. 調整防火牆設置以允許 MySQL 監聽 3306 端口;3. 確認端口號與實際端口號一致;4. 檢查用戶名和密碼是否正確;5. 確保 my.cnf 中的 bind-address 設置正確。

MySQL 可在無需網絡連接的情況下運行,進行基本的數據存儲和管理。但是,對於與其他系統交互、遠程訪問或使用高級功能(如復制和集群)的情況,則需要網絡連接。此外,安全措施(如防火牆)、性能優化(選擇合適的網絡連接)和數據備份對於連接到互聯網的 MySQL 數據庫至關重要。

MySQL數據庫性能優化指南在資源密集型應用中,MySQL數據庫扮演著至關重要的角色,負責管理海量事務。然而,隨著應用規模的擴大,數據庫性能瓶頸往往成為製約因素。本文將探討一系列行之有效的MySQL性能優化策略,確保您的應用在高負載下依然保持高效響應。我們將結合實際案例,深入講解索引、查詢優化、數據庫設計以及緩存等關鍵技術。 1.數據庫架構設計優化合理的數據庫架構是MySQL性能優化的基石。以下是一些核心原則:選擇合適的數據類型選擇最小的、符合需求的數據類型,既能節省存儲空間,又能提升數據處理速度

作為數據專業人員,您需要處理來自各種來源的大量數據。這可能會給數據管理和分析帶來挑戰。幸運的是,兩項 AWS 服務可以提供幫助:AWS Glue 和 Amazon Athena。
