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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python 画蜘蛛_如何学习 R 绘图?

發(fā)布時(shí)間:2023/12/2 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 画蜘蛛_如何学习 R 绘图? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫(xiě)在前面:為啥不用excel繪制這些圖,用PoweBI,帆軟BI等可視化軟件來(lái)繪圖,不是更方便嗎?的確,這些工具都很方便,但同時(shí),它們顯得很呆,不夠靈活,更為致命的是,它們繪制出的圖形,分辨率不夠,用來(lái)出版論文,是不合格的。所以,要做學(xué)術(shù)的朋友,對(duì)R,Python可視化繪圖感興趣的朋友,不妨下點(diǎn)功夫?qū)⑦@些技術(shù)學(xué)到手。

我之所以,將自己花費(fèi)4個(gè)晚上,8個(gè)小時(shí)整理出來(lái)的文檔分享出來(lái),無(wú)非是為了減少大家學(xué)習(xí)技術(shù)的時(shí)間,我深知入門(mén)一種語(yǔ)言的艱辛,因?yàn)槲以趯W(xué)習(xí)的時(shí)候,也是網(wǎng)上各種找資料,一個(gè)軟件下載安裝完畢,花費(fèi)大半天的時(shí)間,當(dāng)初學(xué)習(xí)一門(mén)語(yǔ)言的激情都走了大半;所以,希望大家能夠快速上手,將時(shí)間花費(fèi)在能真正提高技術(shù)的地方,比如設(shè)置圖形的顏色,寬度,線(xiàn)條,靈活的修改圖形等方面,這也是我接下來(lái)要研究的。

看在我這么辛苦的份上,看完不妨點(diǎn)個(gè)贊。。。文章最后放本文所需要的軟件安裝過(guò)程鏈接,用R與Python繪制中國(guó)地圖,某省地圖,以及可視化技術(shù)的介紹。。。

本文要繪制的圖形以及如何使用這些圖形:散點(diǎn)圖、折線(xiàn)圖、直方圖、條形圖、箱線(xiàn)圖、餅圖、熱力圖、蜘蛛圖、二元變量分布和成對(duì)關(guān)系。

用R繪圖

軟件:w10版Rstudio

條形圖通過(guò)垂直的或水平的條形展示了類(lèi)別型變量的分布(頻數(shù))。

> install.packages("vcd")

> library(vcd)

> counts

> counts

None Some Marked

42 14 28

> barplot(counts,main="簡(jiǎn)單的條形圖",xlab="Improvement",ylab="Frequency")

> counts

> counts

Placebo Treated

None 29 13

Some 7 7

Marked 7 21

> plot(counts,main="堆砌條形圖",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"))

> barplot(counts,main="堆砌條形圖",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"),legend=rownames(counts))

> barplot(counts,main="分組條形圖",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"),beside=T,legend=rownames(counts))

> states

> means

> means

> barplot(means$x,names.arg=means$Group.1)

> title("均值條形圖")

?

使用中注意:我用plot()與barplot()繪制的堆砌條形圖并不一樣!!!要想使得條形圖“橫著放”,barplot()函數(shù)中加上horiz=T

在繪圖堆砌條形圖時(shí),使用table()函數(shù)將數(shù)據(jù)表格化,之所以使用table()是為了防止類(lèi)別型變量不是因子,本例中Arthritis$Improved是一個(gè)因子。

散點(diǎn)圖的英文叫做 scatter plot,它將兩個(gè)變量的值顯示在二維坐標(biāo)中,非常適合展示兩個(gè)變量之間的關(guān)系。

> x

> y

> plot(x,y,main="Linearly correlated random numbers",xlab="x",ylab="2*x+noise",xlim=c(-4,4),ylim=c(-4,4))

> plot(0:25,0:25,pch=0:25,xlim=c(-1,26),ylim=c(-1,26),main="point stytles (pch)")

> text(0:25+1,0:25,0:25)

> plot(x,y,pch=ifelse(x*y>1,16,1),main="scatter plot with conditional point styles")

> z

> plot(x,y,pch=1,xlim=range(x),ylim=range(y,z),xlab="x",ylab="values")

> points(x,z,pch=17)

> title("scatter plot with two series")

?

R語(yǔ)言有向量(python中沒(méi)有),pch是向量,控制點(diǎn)的類(lèi)型。col也是向量,控制點(diǎn)的顏色

> plot(x,y,pch=16,col="blue",main="scatter plot with blue points")

> plot(x,y,pch=16,col=ifelse(y>=mean(y),"red","green"),main="scatter plot with conditional colors")

?

有沒(méi)有一幅圖中顯示x,y的關(guān)系,x,z的相關(guān)關(guān)系了?(看我這么貼心,你們要是不點(diǎn)贊收藏,好好看都對(duì)不起我)

> plot(x,y,pch=16,col=ifelse(y>=mean(y),"red","green"),main="scatter plot with conditional colors")

> plot(x,y,col="blue",pch=0,xlim=range(x),ylim=range(y,z),xlab="x",ylab="value")

> points(x,z,col="red",pch=1)

> title("scatter plot with two series")

> t

> y

> plot(t,y,type="l",main="single line plot")

> lty_values

> plot(lty_values,type="n",axes=F,ann=F)

> abline(h=lty_values,lty=lty_values,lwd=2)

> mtext(lty_values,side=2,at=lty_values)

> title("line types (lty)")

> p

> plot(t[t<=p],y[t<=p],col="red",type="l",xlim=range(t),xlab="t")

> lines(t[t>=p],y[t>=p],col="blue",lty=2)

> plot(y,type="l")

> points(y,pch=16)

> x

> y

> z

> plot(x,y,type="l",ylim=range(y,z),col="black")

> points(y,pch=15)

> lines(z,lty=2,col="blue")

> points(z,pch=16,col="blue")

> title("plot of two series")

> legend("topleft",legend=c("y","z"),col=c("black","blue"),lty=c(1,2),pch=c(15,16),cex=0.8,x.intersp = 0.5,y.intersp=0.8)

?> barplot(1:10,names.arg =LETTERS[1:10])

> data("flights",package="nycflights13")

> carriers

> sorted_carriers

> barplot(head(sorted_carriers,8),ylim=c(0,max(sorted_carriers)*1.1),xlab="carrier",ylab="flights",main="top 8 carriers with the most flights in record")

> hist(flight_speed,probability = T,ylim=c(0,0.5),main="Histogram and empirical distribution of flight speed",border="gray",col="lightgray")

> lines(density(flight_speed,from=2,na.rm=T),col="darkgray",lwd=2)

> abline(v=mean(flight_speed,na.rm=T,col="blue",lty=2))

Hist():畫(huà)出flight_speed的柱狀圖

Density():估計(jì)飛行速度的經(jīng)驗(yàn)分布,并在上面繪制光滑的概率分布曲線(xiàn)

Abline():繪制飛行速度的平均水平線(xiàn)

?

> grades pie(grades,main="Grades",radius=1)

?

boxplot(distance/air_time~carrier,data=flights,main="box plot of light speed by carrier")

?

散點(diǎn)圖矩陣&氣泡圖

散點(diǎn)圖矩陣:可以看到線(xiàn)性和平滑(loess)擬合曲線(xiàn)被默認(rèn)添加,主對(duì)角線(xiàn)處添加了核密度曲 線(xiàn)和軸須圖。spread = FALSE選項(xiàng)表示不添加展示分散度和對(duì)稱(chēng)信息的直線(xiàn),lty.smooth = 2設(shè)定平滑(loess)擬合曲線(xiàn)使用虛線(xiàn)而不是實(shí)線(xiàn)。

氣泡圖:我們避免用三維散點(diǎn)圖的表達(dá);先創(chuàng)建一個(gè)二維散點(diǎn)圖,第三個(gè)變量用氣泡大小表示。

你可用symbols()函數(shù)來(lái)創(chuàng)建氣泡圖。該函數(shù)可以在指定的(x, y)坐標(biāo)上繪制圓圈圖、方形 圖、星形圖、溫度計(jì)圖和箱線(xiàn)圖。以繪制圓圈圖為例: symbols(x,y,circle=radius);x,y表示坐標(biāo),circle表示圓半徑。如果你想要用面積而不是半徑來(lái)表示第三個(gè)變量,(r=sqrt(s/pi) )變 換即可:

在氣泡圖中,x軸代表車(chē)重,y軸代表每加侖英里數(shù),氣泡大 小代表發(fā)動(dòng)機(jī)排量

> attach(mtcars)

> library(car)

> scatterplotMatrix(~mpg+disp+drat+wt,data=mtcars,spread=F,lty.smooth=2,main="基本矩陣散點(diǎn)圖")

> attach(mtcars)

> r

> symbols(wt,mpg,circles = r,inches=0.3,fg="white",bg="lightblue",main="氣泡圖",xlab="車(chē)重",ylab="每加侖因里數(shù)")

> text(wt,mpg,rownames(mtcars),cex=0.6)

?

Python繪圖

軟件環(huán)境:

Anaconda

Jupyter notebook

如果說(shuō)通過(guò)直方圖可以看到變量的數(shù)值分布,那么條形圖可以幫我們查看類(lèi)別的特征。在條形圖中,長(zhǎng)條形的長(zhǎng)度表示類(lèi)別的頻數(shù),寬度表示類(lèi)別。

在 Matplotlib 中,我們使用 plt.bar(x, height) 函數(shù),其中參數(shù) x 代表 x 軸的位置序列,height 是 y 軸的數(shù)值序列

在 Seaborn 中,我們使用 sns.barplot(x=None, y=None, data=None) 函數(shù),參數(shù) data 為 DataFrame 類(lèi)型,x、y 是 data 中的變量。

import matplotlib.pyplot as plt

import seaborn as sns

# 數(shù)據(jù)準(zhǔn)備

x = ['Cat1', 'Cat2', 'Cat3', 'Cat4', 'Cat5']

y = [5, 4, 8, 12, 7]

# 用 Matplotlib 畫(huà)條形圖

plt.bar(x, y)

print (plt.show())

# 用 Seaborn 畫(huà)條形圖

sns.barplot(x, y)

print (plt.show())

?

散點(diǎn)圖

畫(huà)散點(diǎn)圖,需要使用 plt.scatter(x, y, marker=None) 函數(shù)。marker 代表了標(biāo)記的符號(hào)。比如“x”、“>”或者“o”。

除了 Matplotlib 外,你也可以使用 Seaborn 進(jìn)行散點(diǎn)圖的繪制。使用 sns.jointplot(x, y, data=None, kind=‘scatter’) 函數(shù),data 就是我們要傳入的數(shù)據(jù),一般是 DataFrame 類(lèi)型;kind 這類(lèi)我們?nèi)?scatter,代表散點(diǎn)的意思

import numpy as np

import pandas as pd

# 數(shù)據(jù)準(zhǔn)備

N = 1000

x = np.random.randn(N)

y = np.random.randn(N)

# 用 Matplotlib 畫(huà)散點(diǎn)圖

plt.scatter(x, y,marker='x')

plt.show()

# 用 Seaborn 畫(huà)散點(diǎn)圖

df = pd.DataFrame({'x': x, 'y': y})

sns.jointplot(x="x", y="y", data=df, kind='scatter');

plt.show()

?

折線(xiàn)圖可以用來(lái)表示數(shù)據(jù)隨著時(shí)間變化的趨勢(shì)。

在 Matplotlib 中,我們可以直接使用 plt.plot() 函數(shù),當(dāng)然需要提前把數(shù)據(jù)按照 x 軸的大小進(jìn)行排序,要不畫(huà)出來(lái)的折線(xiàn)圖就無(wú)法按照 x 軸遞增的順序展示。

在 Seaborn 中,我們使用 sns.lineplot (x, y, data=None) 函數(shù),data 就是我們要傳入的數(shù)據(jù),一般是 DataFrame 類(lèi)型。

# 數(shù)據(jù)準(zhǔn)備

x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]

y = [5, 3, 6, 20, 17, 16, 19, 30, 32, 35]

# 使用 Matplotlib 畫(huà)折線(xiàn)圖

plt.plot(x, y)

plt.show()

# 使用 Seaborn 畫(huà)折線(xiàn)圖

df = pd.DataFrame({'x': x, 'y': y})

sns.lineplot(x="x", y="y", data=df)

plt.show()

?

直方圖是比較常見(jiàn)的視圖;

在 Matplotlib 中,我們使用 plt.hist(x, bins=10) 函數(shù),其中參數(shù) x 是一維數(shù)組,bins 代表直方圖中的箱子數(shù)量,默認(rèn)是 10。

在 Seaborn 中,我們使用 sns.distplot(x, bins=10, kde=True) 函數(shù)。參數(shù) x 是一維數(shù)組,bins 代表直方圖中的箱子數(shù)量,kde 代表顯示核密度估計(jì),默認(rèn)是 True.核密度估計(jì)是通過(guò)核函數(shù)幫我們來(lái)估計(jì)概率密度的方法。

# 數(shù)據(jù)準(zhǔn)備

a = np.random.randn(100)

s = pd.Series(a)

# 用 Matplotlib 畫(huà)直方圖

plt.hist(s)

plt.show()

# 用 Seaborn 畫(huà)直方圖

sns.distplot(s, kde=False)

plt.show()

sns.distplot(s, kde=True)

plt.show()

?

餅圖餅圖是常用的統(tǒng)計(jì)學(xué)模塊,可以顯示每個(gè)部分大小與總和之間的比例。在 Matplotlib 中,我們使用 plt.pie(x, labels=None) 函數(shù),其中參數(shù) x 代表要繪制餅圖的數(shù)據(jù),labels 是缺省值,可以為餅圖添加標(biāo)簽。

# 數(shù)據(jù)準(zhǔn)備

nums = [25, 37, 33, 37, 6]

labels = ['High-school','Bachelor','Master','Ph.d', 'Others']

# 用 Matplotlib 畫(huà)餅圖

plt.pie(x = nums, labels=labels)

plt.show()

?

箱線(xiàn)圖,又稱(chēng)盒式圖,它是在 1977 年提出的,由五個(gè)數(shù)值點(diǎn)組成:最大值 (max)、最小值 (min)、中位數(shù) (median) 和上下四分位數(shù);它可以幫我們分析出數(shù)據(jù)的差異性、離散程度和異常值等。

在 Matplotlib 中,我們使用 plt.boxplot(x, labels=None) 函數(shù)

在 Seaborn 中,我們使用 sns.boxplot(x=None, y=None, data=None) 函數(shù);參數(shù) data 為 DataFrame 類(lèi)型,x、y 是 data 中的變量。

# 數(shù)據(jù)準(zhǔn)備

# 生成 0-1 之間的 10*4 維度數(shù)據(jù)

data=np.random.normal(size=(10,4))

lables = ['A','B','C','D']

# 用 Matplotlib 畫(huà)箱線(xiàn)圖

plt.boxplot(data,labels=lables)

plt.show()

# 用 Seaborn 畫(huà)箱線(xiàn)圖

df = pd.DataFrame(data, columns=lables)

sns.boxplot(data=df)

plt.show()

?

熱力圖是一種非常直觀的多元變量分析方法。

我們一般使用 Seaborn 中的 sns.heatmap(data) 函數(shù),其中 data 代表需要繪制的熱力圖數(shù)據(jù)。

# 數(shù)據(jù)準(zhǔn)備

flights = sns.load_dataset("flights")

data=flights.pivot('year','month','passengers')

# 用 Seaborn 畫(huà)熱力圖

sns.heatmap(data)

plt.show()

蜘蛛圖

蜘蛛圖是一種顯示一對(duì)多關(guān)系的方法。在蜘蛛圖中,一個(gè)變量相對(duì)于另一個(gè)變量的顯著性是清晰可見(jiàn)的。假設(shè)我們想要給王者榮耀的玩家做一個(gè)戰(zhàn)力圖,指標(biāo)一共包括推進(jìn)、KDA、生存、團(tuán)戰(zhàn)、發(fā)育和輸出。那該如何做呢?

這里我們需要使用 Matplotlib 來(lái)進(jìn)行畫(huà)圖,首先設(shè)置兩個(gè)數(shù)組:labels 和 stats。他們分別保存了這些屬性的名稱(chēng)和屬性值。

因?yàn)樾枰?jì)算角度,所以我們要準(zhǔn)備 angles 數(shù)組;又因?yàn)樾枰O(shè)定統(tǒng)計(jì)結(jié)果的數(shù)值,所以我們要設(shè)定 stats 數(shù)組。并且需要在原有 angles 和 stats 數(shù)組上增加一位,也就是添加數(shù)組的第一個(gè)元素。

代碼中 flt.figure 是創(chuàng)建一個(gè)空白的 figure 對(duì)象---畫(huà)幕布 ;add_subplot(111) 可以把畫(huà)板劃分成 1 行 1 列;

再用 ax.plot 和 ax.fill 進(jìn)行連線(xiàn)以及給圖形上色。

Matplotlib 對(duì)中文的顯示不是很友好,我在網(wǎng)上下載了中文字體;(記得記載包from matplotlib.font_manager import FontProperties

,否則報(bào)錯(cuò)!!!)

# 數(shù)據(jù)準(zhǔn)備

from matplotlib.font_manager import FontProperties

labels=np.array([u" 推進(jìn) ","KDA",u" 生存 ",u" 團(tuán)戰(zhàn) ",u" 發(fā)育 ",u" 輸出 "])

stats=[83, 61, 95, 67, 76, 88]

# 畫(huà)圖數(shù)據(jù)準(zhǔn)備,角度、狀態(tài)值

angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False)

stats=np.concatenate((stats,[stats[0]]))

angles=np.concatenate((angles,[angles[0]]))

# 用 Matplotlib 畫(huà)蜘蛛圖

fig = plt.figure()

ax = fig.add_subplot(111, polar=True)

ax.plot(angles, stats, 'o-', linewidth=2)

ax.fill(angles, stats, alpha=0.25)

# 設(shè)置中文字體

font = FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf", size=14)

ax.set_thetagrids(angles * 180/np.pi, labels, FontProperties=font)

plt.show()

?

散點(diǎn)圖,核密度圖,Hexbin 圖

如果我們想要看兩個(gè)變量之間的關(guān)系,就需要用到二元變量分布。散點(diǎn)圖就是一種二元變量分布。

在 Seaborn 里,使用二元變量分布是非常方便的,直接使用 sns.jointplot(x, y, data=None, kind) 函數(shù)即可。其中用 kind 表示不同的視圖類(lèi)型:“kind=‘scatter’”代表散點(diǎn)圖,“kind=‘kde’”代表核密度圖,“kind=‘hex’”代表 Hexbin 圖,它代表的是直方圖的二維模擬。

# 數(shù)據(jù)準(zhǔn)備

tips = sns.load_dataset("tips")

print(tips.head(10))

# 用 Seaborn 畫(huà)二元變量分布圖(散點(diǎn)圖,核密度圖,Hexbin 圖)

sns.jointplot(x="total_bill", y="tip", data=tips, kind='scatter')

sns.jointplot(x="total_bill", y="tip", data=tips, kind='kde')

sns.jointplot(x="total_bill", y="tip", data=tips, kind='hex')

plt.show()

?

散點(diǎn)圖矩陣

如果想要探索數(shù)據(jù)集中的多個(gè)成對(duì)雙變量的分布,可以直接采用 sns.pairplot() 函數(shù)。它可以說(shuō)是探索性分析中的常用函數(shù),可以很快幫我們理解變量對(duì)之間的關(guān)系。

pairplot 函數(shù)的使用,就像在 DataFrame 中使用 describe() 函數(shù)一樣方便!!!

在這里,直接使用anaconda自帶包中的數(shù)據(jù);

# 數(shù)據(jù)準(zhǔn)備

iris = sns.load_dataset('iris')

# 用 Seaborn 畫(huà)成對(duì)關(guān)系

sns.pairplot(iris)

plt.show()

如何描述這幅圖:只看右上角就行,(與左下角對(duì)稱(chēng))橫軸找一個(gè)變量,縱軸找一個(gè)變量,圖形就顯示二者間的相關(guān)關(guān)系。

總結(jié): Python 可視化工具包 Matplotlib 和 Seaborn 工具就好比 NumPy 和 Pandas 的關(guān)系。Seaborn 是基于 Matplotlib 更加高級(jí)的可視化庫(kù)。

如果你想設(shè)置修改顏色、寬度等視圖屬性。你可以看之后,我寫(xiě)的文檔(相信我一定會(huì)放的,畢竟在學(xué)習(xí)的路上,不能停)。也可以在網(wǎng)上自己學(xué)習(xí)相關(guān)函數(shù)文檔。

“老弟,來(lái)了”。能看到這里,我為你手動(dòng)點(diǎn)個(gè)贊,感謝大家。

R就使用Rstudio,安裝起來(lái)非常方便,快速,一個(gè)輕量型的R可以做到如此貼心的地步,默默為R點(diǎn)個(gè)贊。(切記,先裝R,再Rstudio)

PYTHON的話(huà)建議使用Anaconda:因?yàn)樗艽?#xff0c;庫(kù)很多,一旦下載,方便新手操作!(500多M的樣子)

總結(jié)

以上是生活随笔為你收集整理的python 画蜘蛛_如何学习 R 绘图?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。