日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python制作图_Python做图的方法

發布時間:2024/8/23 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python制作图_Python做图的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近一直沒有更新文章,在學習Machine learning。然后業余在kaggle那里瞎轉,對Python常用的作圖摸了個遍,本文將對這些作圖方法做個簡單介紹

一般我們作圖主要是為了看數據分布、數據趨勢、以及比較大小。常用的圖包括:

line(折線圖):展示趨勢

scatter (散點圖):展示分布(機械學習中經常使用)

bar (柱狀圖):感覺柱狀圖主要是多項目的趨勢比較

pie (餅圖):展示分布

box (箱型圖):展示單個項目數據的分布細節

heatmap (熱力圖):主要是列聯表表示數據相對大小

作圖的工具有很多,例如Pandas、Seaborn、ggplot、Bokeh、Plotly、Pypal。而對于我來說,作圖的工具主要就是兩種matplotlib和seaborn兩種。matplotlib可以在numpy數組里面使用,也可以處理pandas中的dataframe。

此外matplotlib還是python作圖的基礎包,大部分作圖模塊都是基于matplotlib來的,因此matplotlib的自定義屬性最高。為了減少美化以及配色的麻煩,我一般時候喜歡作圖的使用通過引用ggplot的style來解決美化問題:

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

plt.style.use('ggplot') ##使得作圖自帶色彩,這樣不用費腦筋去考慮配色什么的;

%matplotlib inline

numpy array的作圖

numpy數組主要是出現在python的數據分析里面,例如,在監督型學習的時候,需要做對分布的散點進行模式識別,并擬合。在擬合的過程中,需要用到梯度下降法,為了快速了解收斂的過程,需要對cost function進行監督。

在這里先不描述梯度下降法的作圖方法,先簡單介紹numpy數組的散點圖以及擬合方法(注意poly1d不是擬合方法,而是一個多項式生成器,真正的擬合在polyfit那里)。通過linspace生成一組數據,并引入random:

x = np.linspace(1,10,80)

y = x + np.random.standard_normal(size=80)

y_s = np.ploy1d(np.plotfit(x,y,1))(x)

plt.scatter(x,y)

plt.plot(x, y_s)

plt.show()

這樣就可以生成下面的這個圖了:

一維擬合

當然,可以看到。這個圖里面散點的點比較大,可以通過改變s參數更改散點的大小(如果將s變為一個函數,那么散點圖就可以成為泡沫圖了),線可以通過linewidth 加粗。在這里,我們將s調大,并將其調成半透明,將線加粗,加入軸說明和圖表抬頭(title的字號大小通過fontsize來改變):

x = np.linspace(1,10,80)

y = x + np.random.standard_normal(size=80)

plt.scatter(x,y, s = 20, alpha=0.2)

plt.plot(x, y_s, linewidth = 2)

plt.xlabel('area')

plt.ylabel('price')

plt.legend(('fit', 'origin'), loc = 'best', fontsize = 8)

plt.title('the price of the house with various area', {'fontsize':10})

plt.show()

更改后的一維擬合

Pandas的作圖方法

dataframe里面一般涉及幾組參數,一般無外乎是通過作圖來發現參數組之間的規律或者關系。并且Pandas里面所有的作圖可以都可以通過df.plot來實現,不同的圖僅僅需要plot函數中的kind參數,將其改為ine、scatter、bar和pie等可以生成對應的圖,詳細需要看Visualization章節。在這里,我將以散點圖為例做一個講解:

x = np.linspace(0,10,101) + np.random.normal(1,0.5,101)

y = np.linspace(20,30,101) + np.random.normal(1,0.5,101)

z = np.linspace(40,50,101) + np.random.normal(1,0.5,101)

df = pd.DataFrame({'x':x, 'y':y, 'z':z, 'H' : 2*x ** 3 + 3*np.log10(y)+4*z})

df.head(5)

先生成一個數據表格:

df

例如,我想看x-H的散點圖關系。可以將其中的kind參數設置為scatter,x和y的值取為對應列的名稱,加入title就可以了:

df.plot(kind='scatter', x='x', y='H')

plt.title('x vs H')

plt.show()

x vs H

當然,如果我想同時看x,y,z對H的影響,似乎就要將上面的這個圖重復三遍,比較麻煩。Pandas里面的scatter_matrix就可以解決這個問題,引用pandas.tools.plotting中的scatter_matrix函數:

from pandas.tools.plotting import scatter_matrix

scatter_matrix(df, figsize=(10,1 0), diagonal='kde')

plt.suptitle('the inflence of x,y,z to H')

plt.show()

xyz vs H

Heatmap

這是一種比較特殊的圖,一般是對pivot_table的可視化展出,由于這種展示效果比較好,也比較直觀,所以想在這里稍微提一下。先給出heatmap中的例子,稍微作了下改動,展示的是6*6隨機數矩陣:

import numpy as np

import seaborn as sns

random_set = np.random.randint(0,10,(6,6))

sns.heatmap(random_set)

在一開始我提到了,這個東西比較多的可以用在pivot_table里面,舉個例子,我要展示幾個旗艦店(A店、B店、C店)的商品(a、b、c、d、e)的銷量。手頭上沒有數據,生成個隨機數組湊合著用吧:

mall_all = ['mall_A', 'mall_B', 'mall_C']

com_all = ['commodity_a', 'commodity_b','commodity_c', 'commodity_d', 'commodity_e']

mall = np.random.choice(mall_all,(1,100))[0]

com = np.random.choice(com_all, (1,100))[0]

ammout = np.random.randint(1,10,(100))

index = np.linspace(1,100, 100)

df = pd.DataFrame({'mall':mall, 'com':com, 'amount':ammout}, index=index, columns=['mall', 'com', 'amount'])

df.head()

生成出來的數據大概是這個樣子的:

隨機原始數據

對其進行數據透視,以Mall為列,以Commodity為行,總計售出商品數量:

pivot_df = pd.pivot_table(df, index='com', columns='mall', values=['amount'], aggfunc=np.sum)

pivot_df

數據透視后

通過heatmap將其進行可視化轉化:

sns.heatmap(pivot_df)

plt.xlabel('Mall')

plt.ylabel('Commodity')

plt.title('Mall_Commodity')

plt.show()

數據透視的可視化

使用heatmap的幾個重要的參數,vmin和vmax可以控制整圖的最小和最大值,cmap為整體配色方案,annot參數用來控制是否顯示原始數據,fmt用來控制展示數據格式,linewidths和linecolor用來控制分割線的粗細以及顏色,cbar用來確認是否顯示圖例。下面將調整一下最大和最小值,并且打開annot,更改整體配色方案,將分割線加粗并設置為白色看看:

sns.heatmap(pivot_df, vmax=80, annot=True, linecolor='white', linewidths=0.5, cmap='RdBu_r')

plt.xlabel('Mall')

plt.ylabel('Commodity')

plt.title('Mall_Commodity')

plt.show()

數據透視的可視化_改

小結

想想,作圖也是我在python學習里面的一個巨坑,因為命令和參數比較多,但是用的比較少,偏偏作圖包還比較多,一直搞不太懂各種的邏輯,所以一直忘記。這一次經過給自己一個詳細的總結之后,應該會好很多。

在Python作圖里面,還有一類圖比較常見,就是地圖。之前雖然我也有利用plotly玩過,但感覺還是沒有進到里面的細節。我會再用一篇文章詳細講述一下,敬請期待。

總結

以上是生活随笔為你收集整理的python制作图_Python做图的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。