當前位置:首頁 » 編程語言 » python箱形圖

python箱形圖

發布時間: 2023-03-01 02:47:42

python數據可視化 箱線圖

Python數據可視化:箱線圖
一、箱線圖概念
箱形圖(Box-plot)又稱為盒須圖、盒式圖或箱線圖,是一種用作顯示一組數據分散情況資料的統計圖。
計算過程:

(1)計算上四分位數(Q3),中位數,下四分位數(Q1)
(2)計算上四分位數和下四分位數之間的差值,即四分位數差(IQR,interquartile range)Q3-Q1
(3)繪制箱線圖的上下范圍,上限為上四分位數,下限為下四分位數。在箱子內部中位數的位置繪制橫線。
(4)大於上四分位數1.5倍四分位數差的值,或者小於下四分位數1.5倍四分位數差的值,劃為異常值(outliers)。
(5)異常值之外,最靠近上邊緣和下邊緣的兩個值處,畫橫線,作為箱線圖的觸須。
(6)極端異常值,即超出四分位數差3倍距離的異常值,用實心點表示;較為溫和的異常值,即處於1.5倍-3倍四分位數差之間的異常值,用空心點表示。
(7)為箱線圖添加名稱,數軸等

二、四分位數的計算

分位數根據其將數列等分的形式不同可以分為中位數,四分位數,十分位數、百分位數等等。四分位數作為分位數的一種形式,在統計中有著十分重要的意義和作用,而大多數的統計學原理教材只介紹其基本含義,對其具體計算,尤其是由組距數列計算都不作介紹,成為統計學原理教材中的空白。那麼,如何根據數列計算四分位數呢?一般來講,視資料是否分組而定。

1、根據未分組的資料計算四分位數

第一步:確定四分位數的位置

四分位數是將數列等分成四個部分的數,一個數列有三個四分位數,設下分位數、中分位數和上分位式中n表示資料的項數

第二步:根據第一步所確定的四分位數的位置,確定其相應的四分位數。
例1:某車間某月份的工人生產某產品的數量分別為13、13.5、13.8、13.9、14、14.6、14.8、15、15.2、15.4、15.7公斤,則三個四分位數的位置分別為:

即變數數列中的第三個、第六個、第九個工人的某種產品產量分別為下四分位數、中位 數和上四分位數。即:
Q1 =13.8公斤、Q2=14.6公斤、Q3=15.2公斤
上例中(n+1)恰好為4的倍數,所以確定四分數較簡單,如果(n+1)不為4的整數倍數,按上述分式計算出來的四分位數位置就帶有小數,這時,有關的四分位數就應該是與該小數相鄰的兩個整數位置上的標志值的平均數,權數的大小取決於兩個整數位置距離的遠近,距離越近,權數越大,距離越遠,權數越小,權數之和等於1。
例2:某車間某月份的工人生產某產品的數量分別為13、13.5、13.8、13.9、14、14.6、14.8、15、15.2、15.4公斤,則三個四分位數的位置分別為:

即變數數列中的第2.75項、第5.5項、第8.25項工人的某種產品產量分別為下四分位 數、中位數和上四分位數。即:

在實際資料中,由於標志值序列中的相鄰標志值往往是相同的,因而不一定要通過計算才能得到有關的四分位數。

2、由組距式數列確定四分位數

第一步,向上或向下累計次數.
第二步,根據累計次數確定四分位數的位置.
(1)、當採用向上累計次數的資料確定四分位數時,四分位數位置的公式是:

(2)、當採用向下累計次數的資料確定四分位數時,四分位數位置的公式是:

第三步,根據四分位數的位置算出各四分位數.
(1)、當累計次數是向上累計時,按下限公式計算各四分位數.

(2)、當累計次數是向下累計時,按上限公式計算各四分位數.

例3:某企業職工按月工資的分組資料如下:

根據上述資料確定某企業職工的月工資的三個四分位數如下:
(1)、採用向上累計職工人數的資料得月工資四分位數的位置為:
(2)、採用向下累計職工人數的資料得月工資四分位數的位置為:

3、異常值

異常值:限制線以外的數據全部為異常值
三、畫圖

# Python
import plotly.plotly
import plotly.graph_objs as go

data = [
go.Box(
y=[0, 1, 1, 2, 3, 5, 8, 13, 21] # 9個數據
)
]
plotly.offline.plot(data) # 離線繪圖

② 強烈推薦一款Python可視化神器!強烈必備!

Plotly Express 是一個新的高級 Python 可視化庫:它是 Plotly.py 的高級封裝,它為復雜的圖表提供了一個簡單的語法。

受 Seaborn 和 ggplot2 的啟發,它專門設計為具有簡潔,一致且易於學習的 API :只需一次導入,您就可以在一個函數調用中創建豐富的互動式繪圖,包括分面繪圖(faceting)、地圖、動畫和趨勢線。 它帶有數據集、顏色面板和主題,就像 Plotly.py 一樣。

Plotly Express 完全免費:憑借其寬松的開源 MIT 許可證,您可以隨意使用它(是的,甚至在商業產品中!)。

最重要的是,Plotly Express 與 Plotly 生態系統的其他部分完全兼容:在您的 Dash 應用程序中使用它,使用 Orca 將您的數據導出為幾乎任何文件格式,或使用JupyterLab 圖表編輯器在 GUI 中編輯它們!

用 pip install plotly_express 命令可以安裝 Plotly Express。

一旦導入Plotly Express(通常是 px ),大多數繪圖只需要一個函數調用,接受一個整潔的Pandas dataframe,並簡單描述你想要製作的圖。 如果你想要一個基本的散點圖,它只是 px.scatter(data,x =「column_name」,y =「column_name」)。

以下是內置的 Gapminder 數據集的示例,顯示2007年按國家/地區的人均預期壽命和人均GDP 之間的趨勢:

如果你想通過大陸區分它們,你可以使用 color 參數為你的點著色,由 px 負責設置默認顏色,設置圖例等:

這里的每一點都是一個國家,所以也許我們想要按國家人口來衡量這些點...... 沒問題:這里也有一個參數來設置,它被稱為 size:

如果你好奇哪個國家對應哪個點? 可以添加一個 hover_name ,您可以輕松識別任何一點:只需將滑鼠放在您感興趣的點上即可! 事實上,即使沒有 hover_name ,整個圖表也是互動的:

也可以通過 facet_col =」continent「 來輕松劃分各大洲,就像著色點一樣容易,並且讓我們使用 x軸 對數(log_x)以便在我們在圖表中看的更清晰:

也許你不僅僅對 2007年 感興趣,而且你想看看這張圖表是如何隨著時間的推移而演變的。 可以通過設置 animation_frame=「year」 (以及 animation_group =「country」 來標識哪些圓與控制條中的年份匹配)來設置動畫。

在這個最終版本中,讓我們在這里調整一些顯示,因為像「gdpPercap」 這樣的文本有點難看,即使它是我們的數據框列的名稱。 我們可以提供更漂亮的「標簽」 (labels),可以在整個圖表、圖例、標題軸和懸停(hovers)中應用。 我們還可以手動設置邊界,以便動畫在整個過程中看起來更棒:

因為這是地理數據,我們也可以將其表示為動畫地圖,因此這清楚地表明 Plotly Express 不僅僅可以繪制散點圖(不過這個數據集缺少前蘇聯的數據)。

事實上,Plotly Express 支持三維散點圖、三維線形圖、極坐標和地圖上三元坐標以及二維坐標。 條形圖(Bar)有二維笛卡爾和極坐標風格。

進行可視化時,您可以使用單變數設置中的直方圖(histograms)和箱形圖(box)或小提琴圖(violin plots),或雙變數分布的密度等高線圖(density contours)。 大多數二維笛卡爾圖接受連續或分類數據,並自動處理日期/時間數據。 可以查看我們的圖庫 (ref-3) 來了解每個圖表的例子。

數據 探索 的主要部分是理解數據集中值的分布,以及這些分布如何相互關聯。 Plotly Express 有許多功能來處理這些任務。

使用直方圖(histograms),箱形圖(box)或小提琴圖(violin plots)可視化單變數分布:

直方圖:

箱形圖:

小提琴圖:

還可以創建聯合分布圖(marginal rugs),使用直方圖,箱形圖(box)或小提琴來顯示雙變數分布,也可以添加趨勢線。 Plotly Express 甚至可以幫助你在懸停框中添加線條公式和R²值! 它使用 statsmodels 進行普通最小二乘(OLS)回歸或局部加權散點圖平滑(LOWESS)。

在上面的一些圖中你會注意到一些不錯的色標。 在 Plotly Express 中, px.colors 模塊包含許多有用的色標和序列:定性的、序列型的、離散的、循環的以及所有您喜歡的開源包:ColorBrewer、cmocean 和 Carto 。 我們還提供了一些功能來製作可瀏覽的樣本供您欣賞(ref-3):

定性的顏色序列:

眾多內置順序色標中的一部分:

我們特別為我們的互動式多維圖表感到自豪,例如散點圖矩陣(SPLOMS)、平行坐標和我們稱之為並行類別的並行集。 通過這些,您可以在單個圖中可視化整個數據集以進行數據 探索 。 在你的Jupyter 筆記本中查看這些單行及其啟用的交互:

散點圖矩陣(SPLOM)允許您可視化多個鏈接的散點圖:數據集中的每個變數與其他變數的關系。 數據集中的每一行都顯示為每個圖中的一個點。 你可以進行縮放、平移或選擇操作,你會發現所有圖都鏈接在一起!

平行坐標允許您同時顯示3個以上的連續變數。 dataframe 中的每一行都是一行。 您可以拖動尺寸以重新排序它們並選擇值范圍之間的交叉點。

並行類別是並行坐標的分類模擬:使用它們可視化數據集中多組類別之間的關系。

Plotly Express 之於 Plotly.py 類似 Seaborn 之於 matplotlib:Plotly Express 是一個高級封裝庫,允許您快速創建圖表,然後使用底層 API 和生態系統的強大功能進行修改。 對於Plotly 生態系統,這意味著一旦您使用 Plotly Express 創建了一個圖形,您就可以使用Themes,使用 FigureWidgets 進行命令性編輯,使用 Orca 將其導出為幾乎任何文件格式,或者在我們的 GUI JupyterLab 圖表編輯器中編輯它 。

主題(Themes)允許您控制圖形范圍的設置,如邊距、字體、背景顏色、刻度定位等。 您可以使用模板參數應用任何命名的主題或主題對象:

有三個內置的 Plotly 主題可以使用, 分別是 plotly, plotlywhite 和 plotlydark。

px 輸出繼承自 Plotly.py 的 Figure 類 ExpressFigure 的對象,這意味著你可以使用任何 Figure 的訪問器和方法來改變 px生成的繪圖。 例如,您可以將 .update() 調用鏈接到 px 調用以更改圖例設置並添加註釋。 .update() 現在返回修改後的數字,所以你仍然可以在一個很長的 Python 語句中執行此操作:

在這里,在使用 Plotly Express 生成原始圖形之後,我們使用 Plotly.py 的 API 來更改一些圖例設置並添加註釋。

Dash 是 Plotly 的開源框架,用於構建具有 Plotly.py 圖表的分析應用程序和儀錶板。Plotly Express 產生的對象與 Dash 100%兼容,只需將它們直接傳遞到 dash_core_components.Graph,如下所示: dcc.Graph(figure = px.scatter(...))。 這是一個非常簡單的 50行 Dash 應用程序的示例,它使用 px 生成其中的圖表:

這個 50 行的 Dash 應用程序使用 Plotly Express 生成用於瀏覽數據集的 UI 。

可視化數據有很多原因:有時您想要提供一些想法或結果,並且您希望對圖表的每個方面施加很多控制,有時您希望快速查看兩個變數之間的關系。 這是交互與 探索 的范疇。

Plotly.py 已經發展成為一個非常強大的可視化交互工具:它可以讓你控制圖形的幾乎每個方面,從圖例的位置到刻度的長度。 不幸的是,這種控制的代價是冗長的:有時可能需要多行 Python 代碼才能用 Plotly.py 生成圖表。

我們使用 Plotly Express 的主要目標是使 Plotly.py 更容易用於 探索 和快速迭代。

我們想要構建一個庫,它做出了不同的權衡:在可視化過程的早期犧牲一些控制措施來換取一個不那麼詳細的 API,允許你在一行 Python 代碼中製作各種各樣的圖表。 然而,正如我們上面所示,該控制項並沒有消失:你仍然可以使用底層的 Plotly.py 的 API 來調整和優化用 Plotly Express 製作的圖表。

支持這種簡潔 API 的主要設計決策之一是所有 Plotly Express 的函數都接受「整潔」的 dataframe 作為輸入。 每個 Plotly Express 函數都體現了dataframe 中行與單個或分組標記的清晰映射,並具有圖形啟發的語法簽名,可讓您直接映射這些標記的變數,如 x 或 y 位置、顏色、大小、 facet-column 甚至是 動畫幀到數據框(dataframe)中的列。 當您鍵入 px.scatter(data,x ='col1',y='col2') 時,Plotly Express 會為數據框中的每一行創建一個小符號標記 - 這就是 px.scatter 的作用 - 並將 「col1」 映射到 x 位置(類似於 y 位置)。 這種方法的強大之處在於它以相同的方式處理所有可視化變數:您可以將數據框列映射到顏色,然後通過更改參數來改變您的想法並將其映射到大小或進行行分面(facet-row)。

接受整個整潔的 dataframe 的列名作為輸入(而不是原始的 numpy 向量)也允許 px 為你節省大量的時間,因為它知道列的名稱,它可以生成所有的 Plotly.py 配置用於標記圖例、軸、懸停框、構面甚至動畫幀。 但是,如上所述,如果你的 dataframe 的列被笨拙地命名,你可以告訴 px 用每個函數的 labels 參數替換更好的。

僅接受整潔輸入所帶來的最終優勢是它更直接地支持快速迭代:您整理一次數據集,從那裡可以使用 px 創建數十種不同類型的圖表,包括在 SPLOM 中可視化多個維度 、使用平行坐標、在地圖上繪制,在二維、三維極坐標或三維坐標中使用等,所有這些都不需要重塑您的數據!

在 API 級別,我們在 px 中投入了大量的工作,以確保所有參數都被命名,以便在鍵入時最大限度地發現:所有 scatter -類似的函數都以 scatter 開頭(例如 scatter_polar, scatter_ternary)所以你可以通過自動補全來發現它們。 我們選擇拆分這些不同的散點圖函數,因此每個散點圖函數都會接受一組定製的關鍵字參數,特別是它們的坐標系。 也就是說,共享坐標系的函數集(例如 scatter, line & bar,或 scatter_polar, line_polar 和 bar_polar )也有相同的參數,以最大限度地方便學習。 我們還花了很多精力來提出簡短而富有表現力的名稱,這些名稱很好地映射到底層的 Plotly.py 屬性,以便於在工作流程中稍後調整到交互的圖表中。

最後,Plotly Express 作為一個新的 Python 可視化庫,在 Plotly 生態系統下,將會迅速發展。所以不要猶豫,立即開始使用 Plotly Express 吧!

③ python可視化神器——pyecharts庫

無意中從今日頭條中看到的一篇文章,可以生成簡單的圖表。據說一些大數據開發們也是經常用類似的圖表庫,畢竟有現成的,改造下就行,誰會去自己造輪子呢。

pyecharts是什麼?

pyecharts 是一個用於生成 Echarts 圖表的類庫。Echarts 是網路開源的一個數據可視化 JS 庫。用 Echarts 生成的圖可視化效果非常棒, pyecharts 是為了與 Python 進行對接,方便在 Python 中直接使用數據生成圖 。使用pyecharts可以生成獨立的網頁,也可以在flask、django中集成使用。

安裝很簡單:pip install pyecharts

如需使用 Jupyter Notebook 來展示圖表,只需要調用自身實例即可,同時兼容 Python2 和 Python3 的 Jupyter Notebook 環境。所有圖表均可正常顯示,與瀏覽器一致的交互體驗,簡直不要太強大。

參考自pyecharts官方文檔: http://pyecharts.org

首先開始來繪制你的第一個圖表

使用 Jupyter Notebook 來展示圖表,只需要調用自身實例即可

add() 主要方法,用於添加圖表的數據和設置各種配置項

render() 默認將會在根目錄下生成一個 render.html 的文件,文件用瀏覽器打開。

使用主題

自 0.5.2+ 起,pyecharts 支持更換主體色系

使用 pyecharts-snapshot 插件

如果想直接將圖片保存為 png, pdf, gif 格式的文件,可以使用 pyecharts-snapshot。使用該插件請確保你的系統上已經安裝了 Nodejs 環境。

安裝 phantomjs $ npm install -g phantomjs-prebuilt

安裝 pyecharts-snapshot $ pip install pyecharts-snapshot

調用 render 方法 bar.render(path='snapshot.png') 文件結尾可以為 svg/jpeg/png/pdf/gif。請注意,svg 文件需要你在初始化 bar 的時候設置 renderer='svg'。

圖形繪制過程

基本上所有的圖表類型都是這樣繪制的:

chart_name = Type() 初始化具體類型圖表。

add() 添加數據及配置項。

render() 生成本地文件(html/svg/jpeg/png/pdf/gif)。

add() 數據一般為兩個列表(長度一致)。如果你的數據是字典或者是帶元組的字典。可利用 cast() 方法轉換。

多次顯示圖表

從 v0.4.0+ 開始,pyecharts 重構了渲染的內部邏輯,改善效率。推薦使用以下方式顯示多個圖表。如果使是 Numpy 或者 Pandas,可以參考這個示例

當然你也可以採用更加酷炫的方式,使用 Jupyter Notebook 來展示圖表,matplotlib 有的,pyecharts 也會有的

Note: 從 v0.1.9.2 版本開始,廢棄 render_notebook() 方法,現已採用更加  pythonic  的做法。直接調用本身實例就可以了。

比如這樣

還有這樣

如果使用的是自定義類,直接調用自定義類示例即可

圖表配置

圖形初始化

通用配置項

xyAxis:平面直角坐標系中的 x、y 軸。(Line、Bar、Scatter、EffectScatter、Kline)

dataZoom:dataZoom 組件 用於區域縮放,從而能自由關注細節的數據信息,或者概覽數據整體,或者去除離群點的影響。(Line、Bar、Scatter、EffectScatter、Kline、Boxplot)

legend:圖例組件。圖例組件展現了不同系列的標記(symbol),顏色和名字。可以通過點擊圖例控制哪些系列不顯示。

label:圖形上的文本標簽,可用於說明圖形的一些數據信息,比如值,名稱等。

lineStyle:帶線圖形的線的風格選項(Line、Polar、Radar、Graph、Parallel)

grid3D:3D笛卡爾坐標系組配置項,適用於 3D 圖形。(Bar3D, Line3D, Scatter3D)

axis3D:3D 笛卡爾坐標系 X,Y,Z 軸配置項,適用於 3D 圖形。(Bar3D, Line3D, Scatter3D)

visualMap:是視覺映射組件,用於進行『視覺編碼』,也就是將數據映射到視覺元素(視覺通道)

markLine&markPoint:圖形標記組件,用於標記指定的特殊數據,有標記線和標記點兩種。(Bar、Line、Kline)

tooltip:提示框組件,用於移動或點擊滑鼠時彈出數據內容

toolbox:右側實用工具箱

圖表詳細

Bar(柱狀圖/條形圖)

Bar3D(3D 柱狀圖)

Boxplot(箱形圖)

EffectScatter(帶有漣漪特效動畫的散點圖)

Funnel(漏斗圖)

Gauge(儀表盤)

Geo(地理坐標系)

GeoLines(地理坐標系線圖)

Graph(關系圖)

HeatMap(熱力圖)

Kline/Candlestick(K線圖)

Line(折線/面積圖)

Line3D(3D 折線圖)

Liquid(水球圖)

Map(地圖)

Parallel(平行坐標系)

Pie(餅圖)

Polar(極坐標系)

Radar(雷達圖)

Sankey(桑基圖)

Scatter(散點圖)

Scatter3D(3D 散點圖)

ThemeRiver(主題河流圖)

TreeMap(矩形樹圖)

WordCloud(詞雲圖)

用戶自定義

Grid 類:並行顯示多張圖

Overlap 類:結合不同類型圖表疊加畫在同張圖上

Page 類:同一網頁按順序展示多圖

Timeline 類:提供時間線輪播多張圖

統一風格

註:pyecharts v0.3.2以後,pyecharts 將不再自帶地圖 js 文件。如用戶需要用到地圖圖表,可自行安裝對應的地圖文件包。

地圖文件被分成了三個 Python 包,分別為:

全球國家地圖:

echarts-countries-pypkg

中國省級地圖:

echarts-china-provinces-pypkg

中國市級地圖:

echarts-china-cities-pypkg

直接使用python的pip安裝

但是這里大家一定要注意,安裝完地圖包以後一定要重啟jupyter notebook,不然是無法顯示地圖的。

顯示如下:

總得來說,這是一個非常強大的可視化庫,既可以集成在flask、Django開發中,也可以在做數據分析的時候單獨使用,實在是居家旅行的必備神器啊

④ python中怎麼畫箱線圖

如下灰色框里的就是箱形圖(英文:Box plot):又稱為盒須圖、盒式圖、盒狀圖或箱線圖,是一種用作顯示一組數據分散情況資料的統計圖。因型狀如箱子而得名。

箱形圖最大的優點就是不受異常值的影響,可以以一種相對穩定的方式描述數據的離散分布情況。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = [1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100]

df = pd.DataFrame(data)
df.plot.box(title="hua tu")
plt.grid(linestyle="--", alpha=0.3)
plt.show()

⑤ 在python中如何繪制畫兩組箱形圖

授人以魚不如授人以漁,想畫什麼圖就去matplotlib官網找有沒有類似的,把對應代碼改一改,完美解決

熱點內容
代號治癒如何創建伺服器 發布:2024-11-07 16:50:25 瀏覽:45
dos強制刪除文件夾 發布:2024-11-07 16:41:05 瀏覽:294
java協程框架 發布:2024-11-07 16:30:55 瀏覽:380
預測擬合演算法 發布:2024-11-07 16:30:45 瀏覽:663
橙光原始密碼是多少 發布:2024-11-07 16:24:33 瀏覽:34
安卓電話密碼是什麼 發布:2024-11-07 16:14:44 瀏覽:317
戰網客戶端文件夾 發布:2024-11-07 16:02:42 瀏覽:123
我的世界伺服器轉賬點券的指令 發布:2024-11-07 15:57:34 瀏覽:268
馬桶解壓 發布:2024-11-07 15:57:32 瀏覽:890
手機游戲蘋果和安卓哪個好 發布:2024-11-07 15:55:36 瀏覽:701