r語言ggplot2 多線圖繪制圖例_plotnine: Python版的ggplot2作圖庫

騰訊課堂 | Python網絡爬蟲與文本數據分析

同樣的基本作圖任務,plotnine比matplotlib和seaborn代碼量少,更美觀。所以我又重新發一遍,大家可以先收藏起來,后面總有用到的時候~

R語言的ggplot2繪圖能力超強,python雖有matplotlib,但是語法臃腫,使用復雜,入門極難,seaborn的出現稍微改善了matplotlib代碼量問題,但是定制化程度依然需要借助matplotlib,使用難度依然很大。

而且咱們經管專業學編程語言,一直有一個經久不衰的問題-“學數據分析,到底選擇R還是Python”。通過plotnine這個庫,你就可以在python世界中體驗下R語言的新奇感,體驗可視化之美,如果著迷上癮,再學R也不遲。

plotnine包,可以實現絕大多數ggplot2的繪圖功能,兩者語法十分相似,R和Python的語法轉換成本大大降低。

  • plotnine文檔 https://plotnine.readthedocs.io/en/latest/
  • R語言ggplot2文檔 https://ggplot2.tidyverse.org/reference/index.html

安裝

pip?install?plotnine

準備數據

from?plotnine.data?import?mpg

#dataframe
mpg.head()
manufacturermodeldisplyearcyltransdrvctyhwyflclass
0audia41.819994auto(l5)f1829pcompact
1audia41.819994manual(m5)f2129pcompact
2audia42.020084manual(m6)f2031pcompact
3audia42.020084auto(av)f2130pcompact
4audia42.819996auto(l5)f1626pcompact

快速作圖qplot

我們先直接看最簡單好用的快速作圖函數qplot(x, y, data)

  • 橫坐標displ
  • 縱坐標cty
  • 數據mpg
from?plotnine?import?qplot

qplot(x='displ',?
??????y='cty',
??????data=mpg)

2c21d2edd5cebf26e154b8c99f629e74.png


ggplot圖層

qplot是快速作圖函數,如果想讓圖更好看,進行私人訂制,那么我們需要進行圖層設計

首先設置ggplot圖層(相當于買了一個高級畫布),

  • 數據mpg
  • 橫坐標x軸為displ
  • 縱坐標y軸cty

在plotnine中,變量所對應的數據均可通過字段名調用

from?plotnine?import?ggplot,?geom_point,?aes

ggplot(aes(x='displ',?y='cty'),?mpg)

ea5f176c35856f91486695a9488684a6.png


圖層疊加

我們可以看到,已經繪制出一個空的ggplot圖層,x軸為displ,y軸為cty。

接下來我們給這個圖層上加上數據對應的散點,使用geom_point()直接追加在ggplot圖層之上即可。

(
????ggplot(aes(x='displ',?y='cty'),?mpg)
????+?geom_point()
)

2c21d2edd5cebf26e154b8c99f629e74.png


color

在上圖中,散點是沒有區分每輛車的氣缸數cyl。

在geom_point()中,我們可以按照氣缸數cyl分門別類,按照顏色顯示出來

(
????ggplot(aes(x='displ',?y='cty'),?mpg)
????+?geom_point(aes(color='cyl'))
)

62996e468dcb0136fdedf51910956f29.png


上圖挺好看的,有時候需要繪制的字段是離散型數值,但是上色后可能不夠明顯,需要聲明該字段為離散型。這時候用factor()來告訴plotnine,這個字段是離散型數值

(
????ggplot(aes(x='displ',?y='cty'),?mpg)
????+?geom_point(aes(color='factor(cyl)'))?
)

0e4940bfd7daea1d900d05291efc97e0.png



size

有時候為了增加可視化顯示的維度數,還可以考慮加入點的大小size

(
????ggplot(aes(x='displ',?y='cty'),?mpg)
????+?geom_point(aes(size='hwy'))
)

b2b0265f6c1c0da907f0244dc2a21237.png



梯度色

如果你想自己設置顏色的梯度,可以通過scale_color_gradient設置

from?plotnine?import?scale_color_gradient

(
????ggplot(aes(x='displ',?y='cty'),?mpg)
????+?geom_point(aes(color='hwy'))
????+?scale_color_gradient(low='blue',?high='red')
)

c33c2b41fb89c23fdfffe31f033fa87e.png


條形圖

plotnine中可繪制的圖有很多,剛剛已經講了散點圖,接下來我們看看plotnine中的條形圖。

首先準備一下數據

import?pandas?as?pd

df?=?pd.DataFrame({
????'variable':?['gender',?'gender',?'age',?'age',?'age',?'income',?'income',?'income',?'income'],
????'category':?['Female',?'Male',?'1-24',?'25-54',?'55+',?'Lo',?'Lo-Med',?'Med',?'High'],
????'value':?[60,?40,?50,?30,?20,?10,?25,?25,?40],
})
df['variable']?=?pd.Categorical(df['variable'],?categories=['gender',?'age',?'income'])
df['category']?=?pd.Categorical(df['category'],?categories=df['category'])

df
variablecategoryvalue
0genderFemale60
1genderMale40
2age1-2450
3age25-5430
4age55+20
5incomeLo10
6incomeLo-Med25
7incomeMed25
8incomeHigh40
from?plotnine?import?ggplot,?aes,?geom_text,?position_dodge,?geom_point

#調整文本位置
dodge_text?=?position_dodge(width=0.9)??????????????????????????????#?new

(
????ggplot(df,?aes(x='variable',?
???????????????????y='value',?
???????????????????fill='category'))?#類別填充顏色
????+?geom_col(position='dodge',?
???????????????show_legend=False)???#?modified
????+?geom_text(aes(y=-.5,?label='category'),??????????????????????????#?new
????????????????position=dodge_text,
????????????????color='gray',??#文本顏色
????????????????size=8,???#字號
????????????????angle=30,?#文本的角度
????????????????va='top')
????
?+?lims(y=(-5,?60))?????????????????????????????????????????????????#?new
)

1faf817cff8fc12a32f540367e034a18.png


from?plotnine.data?import?economics_long

economics_long.head()
datevariablevaluevalue01
01967-07-01pce507.40.000000
11967-08-01pce510.50.000266
21967-09-01pce516.30.000764
31967-10-01pce512.90.000472
41967-11-01pce518.10.000918
from?plotnine?import?ggplot,?aes,?geom_line

(
????ggplot(economics_long,?aes(x='date',?y='value01',?color='variable'))
????+?geom_line()
)

e341d654ccdd3ad9a2552e24ee7547e8.png


plotnine目前已經支持絕大多數ggplot2,但是文檔方面沒有ggplot2全,所以學習plotnine時可以參考ggplot2。

  • plotnine文檔 https://plotnine.readthedocs.io/en/latest/
  • R語言ggplot2文檔 https://ggplot2.tidyverse.org/reference/index.html

往期文章

[更新] Python網絡爬蟲與文本數據分析?rpy2庫 | 在jupyter中調用R語言代碼plydata庫 | 數據操作管道操作符>>tidytext | 耳目一新的R-style文本分析庫七夕禮物 | 全網最火的釘子繞線圖制作教程讀完本文你就了解什么是文本分析文本分析在經管領域中的應用概述??綜述:文本分析在市場營銷研究中的應用plotnine: Python版的ggplot2作圖庫小案例: Pandas的apply方法??stylecloud:簡潔易用的詞云庫?用Python繪制近20年地方財政收入變遷史視頻??Wow~70G上市公司定期報告數據集漂亮~pandas可以無縫銜接Bokeh??YelpDaset: 酒店管理類數據集10+G??

公眾號后臺回復關鍵詞【plotnine入門】即可下載本文數據代碼

分享”和“在看”是更好的支持!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374464.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374464.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374464.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單元和集成測試的代碼覆蓋率

我最近在一個寵物項目中著手構建自動化的UI(集成)測試以及普通的單元測試。 我想將所有這些集成到我的Maven構建中,并提供代碼覆蓋率報告,以便我可以了解測試覆蓋率不足的區域。 我不僅發布了項目的源代碼,還整理了一個…

javascript事件與event對象的屬性

javascript事件列表解說事件瀏覽器支持解說一般事件onclickIE3、N2鼠標點擊時觸發此事件ondblclickIE4、N4鼠標雙擊時觸發此事件onmousedownIE4、N4按下鼠標時觸發此事件onmouseupIE4、N4鼠標按下后松開鼠標時觸發此事件onmouseoverIE3、N2當鼠標移動到某對象范圍的上方時觸發此…

感想

讀完三篇文章看到了前輩們的努力與堅持和對各自的學科的熱愛,以及各位前輩的奮斗的艱苦環境,我與那些前輩相比也許還達不到前輩們的那種級別,但是我的學習的條件卻比那些前輩們好的多,看完前輩們的奮斗史,以及前輩們的…

python學生分布_Python數據分析實戰之分布分析

前言 本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。 作者:嚴小樣兒 分布分析法,一般是根據分析目的,將數據進行分組,研究各組別分布規律的一種分析方法。…

使用Spring Security 3.1保護RESTful Web服務,第3部分

1.概述 本教程顯示了如何使用Spring和基于Java的Spring Security 3.1來保護REST服務 。 本文將重點介紹如何使用“登錄和Cookie”方法專門針對REST API設置安全配置。 2. Spring Security的體系結構完全基于Servlet過濾器,因此,在HTTP請求處理方面&…

一次完整的HTTP請求所經歷的7個步驟

HTTP通信機制是在一次完整的HTTP通信過程中,Web瀏覽器與Web服務器之間將完成下列7個步驟: 1、建立TCP連接 在HTTP工作開始之前,Web瀏覽器首先要通過網絡與Web服務器建立連接,該連接是通過TCP來完成的,該協議與IP協議共…

jQuery基礎--樣式篇(3)

1.jQuiery對象與DOM對象   對于剛剛接觸jQuery的初學者,我們要清楚認識一點:jQuery對象與DOM對象是不一樣的。可能一時半會分不清楚哪些是jQuery對象,哪些是DOM對象,下面重點介紹一下jQuery對象,以及兩者相互間的轉換…

hls fifo_HLS優化方法DATAFLOW你用了嗎

上期內容:異步跨時鐘域電路該怎么約束DATAFLOW作為HLS的一種優化方法,對于改善吞吐率(Throughput)、降低延遲(Latency)非常有效。DATAFLOW的作用對象DATAFLOW可以作用于函數,也可以作用于for循環。如下圖所示(圖片來源Figure62, Figure 63, u…

Java 8虛擬擴展方法

我一直關注Java 8 Lambda表達式項目的發展已經有一段時間了,我對其當前的進展狀態感到非常興奮。 我發現的最新“易于理解”的演示文稿是這樣的: http://blogs.oracle.com/briangoetz/resource/devoxx-lang-lib-vm-co-evol.pdf 現在,作為一名…

python爬蟲 庫_七款必備的Python爬蟲庫,你知道幾個?

很多你需要的信息數據都是在網站內,雖然有些網站的數據會以整潔、結構化的形式呈現,但大部分網站卻無法做到這樣。因此,當你想要獲得一些數據的時候,你需要一些爬蟲工具幫助抓取,然后再對其進行分析。今天,…

62個Android Studio小技巧合集

轉載: 原文鏈接:http://laobie.github.io/android/2016/02/14/android-studio-tips.html轉載于:https://www.cnblogs.com/kesteler/p/5618490.html

在Hibernate,EhCache,Quartz,DBCP和Spring中啟用JMX

繼續使用JMX的過程(請參閱: 人類JMX ),我們將學習如何在一些流行的框架中啟用JMX支持(通常是統計和監視功能)。 這些信息大部分都可以在項目的主頁上找到,但是我決定在收集這些信息的同時&#…

二叉樹遍歷(前中后)

二叉樹前序遍歷&#xff1a; /*** Definition for binary tree* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vector<int> preorderTravers…

python語言程序設計實踐教程答案實驗六_Python程序設計實踐教程

書名&#xff1a;Python程序設計實踐教程 定價&#xff1a;29.8 ISBN&#xff1a;9787115532602 作者&#xff1a;儲岳中 薛希玲 版次&#xff1a;*1版 出版時間&#xff1a;2020-04 內容提要&#xff1a; 本書是Python語言程序設計的配套實踐教材&#xff0c;分為三部分&#…

400多萬微信用戶如何“變現”?凱叔說了五大秘訣與教訓

凱叔&#xff0c;原名王凱&#xff0c;自媒體“凱叔講故事”創始人&#xff0c;近日在獅享家班委會上做了分享&#xff0c;全是實實在在的實驗性方法論。以下是王凱的分享內容&#xff0c;整理 / 垅青 我講的主題叫“基于內容的MVP探索”&#xff0c;MVP是什么東西&#xff1f;…

使用dbUnit,JSON,HSQLDB和JUnit規則進行數據庫單元測試

在本周TDD課程的運行中&#xff0c;我認為編寫一些夾具以簡化dbUnit的使用將很有趣。 我最初的想法只是教dbUnit有關JSON的知識&#xff0c;但事實證明Lieven Doclo已經做到了。 因此&#xff0c;我決定更進一步&#xff0c;還將dbUnit與JUnit Rules結合起來&#xff0c;并提供…

Codeforces Round #321 (Div. 2) E. Kefa and Watch 線段樹hash

E. Kefa and Watch Time Limit: 1 Sec Memory Limit: 256 MB 題目連接 http://codeforces.com/contest/580/problem/EDescription One day Kefa the parrot was walking down the street as he was on the way home from the restaurant when he saw something glittering by…

python文字游戲源代碼求年紀_Python實現猜年齡游戲代碼實例

1. 在猜年齡的基礎上編寫登錄、注冊方法&#xff0c;并且把猜年齡游戲分函數處理&#xff0c;如 2. 登錄函數 3. 注冊函數 4. 猜年齡函數 5. 選擇獎品函數 代碼如下 import json real_age 18 prize_list [好迪洗發水, 綠箭俠, 小豬佩奇, 布娃娃, 再來一次!] import random us…

KVC 與 KVO

一、Key-Value Coding (KVC)鍵值編碼 KVC&#xff0c;即是指 NSKeyValueCoding&#xff0c;一個非正式的 Protocol&#xff0c;提供一種機制來間接訪問對象的屬性。KVO 就是基于 KVC 實現的關鍵技術之一。 一個對象擁有某些屬性。比如說&#xff0c;一個 Person 對象有一個 nam…

使用模擬的單元測試–測試技術5

我的最后一個博客是有關測試代碼方法的一系列博客中的第四篇&#xff0c;演示了如何創建使用存根對象隔離測試對象的單元測試。 今天的博客探討了有時被視為對立的技術&#xff1a;使用模擬對象進行單元測試。 同樣&#xff0c;我使用了從數據庫檢索地址的簡單方案&#xff1a;…