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

写在前面:为啥不用excel绘制这些图,用PoweBI,帆软BI等可视化软件来绘图,不是更方便吗?的确,这些工具都很方便,但同时,它们显得很呆,不够灵活,更为致命的是,它们绘制出的图形,分辨率不够,用来出版论文,是不合格的。所以,要做学术的朋友,对R,Python可视化绘图感兴趣的朋友,不妨下点功夫将这些技术学到手。

我之所以,将自己花费4个晚上,8个小时整理出来的文档分享出来,无非是为了减少大家学习技术的时间,我深知入门一种语言的艰辛,因为我在学习的时候,也是网上各种找资料,一个软件下载安装完毕,花费大半天的时间,当初学习一门语言的激情都走了大半;所以,希望大家能够快速上手,将时间花费在能真正提高技术的地方,比如设置图形的颜色,宽度,线条,灵活的修改图形等方面,这也是我接下来要研究的。

看在我这么辛苦的份上,看完不妨点个赞。。。文章最后放本文所需要的软件安装过程链接,用R与Python绘制中国地图,某省地图,以及可视化技术的介绍。。。

本文要绘制的图形以及如何使用这些图形:散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图、二元变量分布和成对关系。

用R绘图

软件:w10版Rstudio

条形图通过垂直的或水平的条形展示了类别型变量的分布(频数)。

> install.packages("vcd")

> library(vcd)

> counts

> counts

None Some Marked

42 14 28

> barplot(counts,main="简单的条形图",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()函数中加上horiz=T

在绘图堆砌条形图时,使用table()函数将数据表格化,之所以使用table()是为了防止类别型变量不是因子,本例中Arthritis$Improved是一个因子。

散点图的英文叫做 scatter plot,它将两个变量的值显示在二维坐标中,非常适合展示两个变量之间的关系。

> 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语言有向量(python中没有),pch是向量,控制点的类型。col也是向量,控制点的颜色

> 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")

有没有一幅图中显示x,y的关系,x,z的相关关系了?(看我这么贴心,你们要是不点赞收藏,好好看都对不起我)

> 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():画出flight_speed的柱状图

Density():估计飞行速度的经验分布,并在上面绘制光滑的概率分布曲线

Abline():绘制飞行速度的平均水平线

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

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

散点图矩阵&气泡图

散点图矩阵:可以看到线性和平滑(loess)拟合曲线被默认添加,主对角线处添加了核密度曲 线和轴须图。spread = FALSE选项表示不添加展示分散度和对称信息的直线,lty.smooth = 2设定平滑(loess)拟合曲线使用虚线而不是实线。

气泡图:我们避免用三维散点图的表达;先创建一个二维散点图,第三个变量用气泡大小表示。

你可用symbols()函数来创建气泡图。该函数可以在指定的(x, y)坐标上绘制圆圈图、方形 图、星形图、温度计图和箱线图。以绘制圆圈图为例: symbols(x,y,circle=radius);x,y表示坐标,circle表示圆半径。如果你想要用面积而不是半径来表示第三个变量,(r=sqrt(s/pi) )变 换即可:

在气泡图中,x轴代表车重,y轴代表每加仑英里数,气泡大 小代表发动机排量

> attach(mtcars)

> library(car)

> scatterplotMatrix(~mpg+disp+drat+wt,data=mtcars,spread=F,lty.smooth=2,main="基本矩阵散点图")

> attach(mtcars)

> r

> symbols(wt,mpg,circles = r,inches=0.3,fg="white",bg="lightblue",main="气泡图",xlab="车重",ylab="每加仑因里数")

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

Python绘图

软件环境:

Anaconda

Jupyter notebook

如果说通过直方图可以看到变量的数值分布,那么条形图可以帮我们查看类别的特征。在条形图中,长条形的长度表示类别的频数,宽度表示类别。

在 Matplotlib 中,我们使用 plt.bar(x, height) 函数,其中参数 x 代表 x 轴的位置序列,height 是 y 轴的数值序列

在 Seaborn 中,我们使用 sns.barplot(x=None, y=None, data=None) 函数,参数 data 为 DataFrame 类型,x、y 是 data 中的变量。

import matplotlib.pyplot as plt

import seaborn as sns

# 数据准备

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

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

# 用 Matplotlib 画条形图

plt.bar(x, y)

print (plt.show())

# 用 Seaborn 画条形图

sns.barplot(x, y)

print (plt.show())

散点图

画散点图,需要使用 plt.scatter(x, y, marker=None) 函数。marker 代表了标记的符号。比如“x”、“>”或者“o”。

除了 Matplotlib 外,你也可以使用 Seaborn 进行散点图的绘制。使用 sns.jointplot(x, y, data=None, kind=‘scatter’) 函数,data 就是我们要传入的数据,一般是 DataFrame 类型;kind 这类我们取 scatter,代表散点的意思

import numpy as np

import pandas as pd

# 数据准备

N = 1000

x = np.random.randn(N)

y = np.random.randn(N)

# 用 Matplotlib 画散点图

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

plt.show()

# 用 Seaborn 画散点图

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

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

plt.show()

折线图可以用来表示数据随着时间变化的趋势。

在 Matplotlib 中,我们可以直接使用 plt.plot() 函数,当然需要提前把数据按照 x 轴的大小进行排序,要不画出来的折线图就无法按照 x 轴递增的顺序展示。

在 Seaborn 中,我们使用 sns.lineplot (x, y, data=None) 函数,data 就是我们要传入的数据,一般是 DataFrame 类型。

# 数据准备

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

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

# 使用 Matplotlib 画折线图

plt.plot(x, y)

plt.show()

# 使用 Seaborn 画折线图

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

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

plt.show()

直方图是比较常见的视图;

在 Matplotlib 中,我们使用 plt.hist(x, bins=10) 函数,其中参数 x 是一维数组,bins 代表直方图中的箱子数量,默认是 10。

在 Seaborn 中,我们使用 sns.distplot(x, bins=10, kde=True) 函数。参数 x 是一维数组,bins 代表直方图中的箱子数量,kde 代表显示核密度估计,默认是 True.核密度估计是通过核函数帮我们来估计概率密度的方法。

# 数据准备

a = np.random.randn(100)

s = pd.Series(a)

# 用 Matplotlib 画直方图

plt.hist(s)

plt.show()

# 用 Seaborn 画直方图

sns.distplot(s, kde=False)

plt.show()

sns.distplot(s, kde=True)

plt.show()

饼图饼图是常用的统计学模块,可以显示每个部分大小与总和之间的比例。在 Matplotlib 中,我们使用 plt.pie(x, labels=None) 函数,其中参数 x 代表要绘制饼图的数据,labels 是缺省值,可以为饼图添加标签。

# 数据准备

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

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

# 用 Matplotlib 画饼图

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

plt.show()

箱线图,又称盒式图,它是在 1977 年提出的,由五个数值点组成:最大值 (max)、最小值 (min)、中位数 (median) 和上下四分位数;它可以帮我们分析出数据的差异性、离散程度和异常值等。

在 Matplotlib 中,我们使用 plt.boxplot(x, labels=None) 函数

在 Seaborn 中,我们使用 sns.boxplot(x=None, y=None, data=None) 函数;参数 data 为 DataFrame 类型,x、y 是 data 中的变量。

# 数据准备

# 生成 0-1 之间的 10*4 维度数据

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

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

# 用 Matplotlib 画箱线图

plt.boxplot(data,labels=lables)

plt.show()

# 用 Seaborn 画箱线图

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

sns.boxplot(data=df)

plt.show()

热力图是一种非常直观的多元变量分析方法。

我们一般使用 Seaborn 中的 sns.heatmap(data) 函数,其中 data 代表需要绘制的热力图数据。

# 数据准备

flights = sns.load_dataset("flights")

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

# 用 Seaborn 画热力图

sns.heatmap(data)

plt.show()

蜘蛛图

蜘蛛图是一种显示一对多关系的方法。在蜘蛛图中,一个变量相对于另一个变量的显著性是清晰可见的。假设我们想要给王者荣耀的玩家做一个战力图,指标一共包括推进、KDA、生存、团战、发育和输出。那该如何做呢?

这里我们需要使用 Matplotlib 来进行画图,首先设置两个数组:labels 和 stats。他们分别保存了这些属性的名称和属性值。

因为需要计算角度,所以我们要准备 angles 数组;又因为需要设定统计结果的数值,所以我们要设定 stats 数组。并且需要在原有 angles 和 stats 数组上增加一位,也就是添加数组的第一个元素。

代码中 flt.figure 是创建一个空白的 figure 对象---画幕布 ;add_subplot(111) 可以把画板划分成 1 行 1 列;

再用 ax.plot 和 ax.fill 进行连线以及给图形上色。

Matplotlib 对中文的显示不是很友好,我在网上下载了中文字体;(记得记载包from matplotlib.font_manager import FontProperties

,否则报错!!!)

# 数据准备

from matplotlib.font_manager import FontProperties

labels=np.array([u" 推进 ","KDA",u" 生存 ",u" 团战 ",u" 发育 ",u" 输出 "])

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

# 画图数据准备,角度、状态值

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

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

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

# 用 Matplotlib 画蜘蛛图

fig = plt.figure()

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

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

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

# 设置中文字体

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

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

plt.show()

散点图,核密度图,Hexbin 图

如果我们想要看两个变量之间的关系,就需要用到二元变量分布。散点图就是一种二元变量分布。

在 Seaborn 里,使用二元变量分布是非常方便的,直接使用 sns.jointplot(x, y, data=None, kind) 函数即可。其中用 kind 表示不同的视图类型:“kind=‘scatter’”代表散点图,“kind=‘kde’”代表核密度图,“kind=‘hex’”代表 Hexbin 图,它代表的是直方图的二维模拟。

# 数据准备

tips = sns.load_dataset("tips")

print(tips.head(10))

# 用 Seaborn 画二元变量分布图(散点图,核密度图,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()

散点图矩阵

如果想要探索数据集中的多个成对双变量的分布,可以直接采用 sns.pairplot() 函数。它可以说是探索性分析中的常用函数,可以很快帮我们理解变量对之间的关系。

pairplot 函数的使用,就像在 DataFrame 中使用 describe() 函数一样方便!!!

在这里,直接使用anaconda自带包中的数据;

# 数据准备

iris = sns.load_dataset('iris')

# 用 Seaborn 画成对关系

sns.pairplot(iris)

plt.show()

如何描述这幅图:只看右上角就行,(与左下角对称)横轴找一个变量,纵轴找一个变量,图形就显示二者间的相关关系。

总结: Python 可视化工具包 Matplotlib 和 Seaborn 工具就好比 NumPy 和 Pandas 的关系。Seaborn 是基于 Matplotlib 更加高级的可视化库。

如果你想设置修改颜色、宽度等视图属性。你可以看之后,我写的文档(相信我一定会放的,毕竟在学习的路上,不能停)。也可以在网上自己学习相关函数文档。

“老弟,来了”。能看到这里,我为你手动点个赞,感谢大家。

R就使用Rstudio,安装起来非常方便,快速,一个轻量型的R可以做到如此贴心的地步,默默为R点个赞。(切记,先装R,再Rstudio)

PYTHON的话建议使用Anaconda:因为它很大,库很多,一旦下载,方便新手操作!(500多M的样子)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

conflicting types for ‘方法名’ 的错误

将main()的实现写在drawShapes(),drawCircle(),drawRectangle()...之前. 结果编译的时候出现了 conflicting types for "方法名"的错误。故到网上查找答案&#xff0c;发现在这里需要严格按照函数出现的先后顺序才能成功编译&#xff0c;也就是main()要定义在最后&a…

Oracle用户system解锁

1.首先进入sql plus窗口&#xff08;参见上一篇文章&#xff09; 2.进入后&#xff1a;输入select username,account_status from dba_users where usernameSYSTEM; 3.查询system用户的状态和用户名&#xff0c;这里能查询出密码&#xff0c;但是查出来的密码是密文&#xff0c…

captcha库_将CAPTCHA添加到您的GWT应用程序

captcha库什么是验证码&#xff1f; 在一个充满恶意机器人的世界中&#xff0c;您应该怎么做才能保护您宝贵的Web应用程序&#xff1f; 您真正应该做的基本事情之一就是向其中添加CAPTCHA功能。 如果您不熟悉&#xff08;听起来有些奇怪&#xff09;&#xff0c;则CAPTCHA是确保…

GCD6: 在GCD上异步执行非UI相关任务

讨论&#xff1a;在主队列、串行队列和并发队列上异步执行代码块才能见识到 GCD 的真正实力。 要在分派队列上执行异步任务,你必须使用下面这些函数中的其中一个: dispatch_async为了异步执行向分派队列提交一个 Block Object(2 项都通过参数指定) dispatch_async_f为了异步执行…

带有Java 8,lambda表达式和Mockito-Java8附加组件的更紧凑的Mockito

Mockito-Java8是一组Mockito附加组件&#xff0c;它们利用Java 8和lambda表达式使Mockito的模拟更加紧凑。 在2015年初&#xff0c;我进行了简短的演讲&#xff0c; Java 8为测试带来了力量&#xff01; 我在GeeCON TDD 2015和DevConf.cz 2015上发表了演讲。在我使用4个示例的演…

ContentProvider与ContentResolver使用

例如以下内容为从网络转载&#xff1a;使用ContentProvider共享数据&#xff1a;当应用继承ContentProvider类&#xff0c;并重写该类用于提供数据和存储数据的方法&#xff0c;就能够向其它应用共享其数据。虽然使用其它方法也能够对外共享数据&#xff0c;但数据訪问方式会因…

cshtml中引用css_ASP.NET CoreMVC 中的控制器

Controller in ASP.NET Core MVC在本节中&#xff0c;我们将讨论 Controller 是什么以及它在 ASP.NET Core MVC 中的作用。Fiddler需要大家提前装一个工具&#xff0c;https://www.telerik.com/fiddlerFiddler 是一个 http 协议调试代理工具&#xff0c;它能够记录并检查所有你…

小学阅读方法六种_小学生掌握了这些语文答题方法,轻松应对阅读理解,不再是难事...

家长们都知道&#xff0c;孩子们在学习数学的时候&#xff0c;重要的就是数学的一些公式&#xff0c;只要把数学公式记牢&#xff0c;做很多题的时候灵活运用&#xff0c;就可以解答。今天我们来看看&#xff0c;语文方面也有一些答题公式&#xff0c;当孩子们完全掌握了这些公…

hdu--4028--dp

这个dp我没做出来啊...其实不难..主要题意没理解好 fuck. 给你1-N这N个数 一共2^N-1个子集 每个子集的LCM值>M的情况数有多少种 我也是醉了 这么个题目 给我套他那个题面 硬是没看懂 他在问什么 还是 英语太渣了 然后就是个 状态转移方程的考虑了 map<LL,LL>dp[size]…

敏捷中gwt含义_在您的GWT应用程序中添加JSON功能

敏捷中gwt含义JSON简介 在Web应用程序上工作时&#xff0c;总是会出现客户端-服务器数据交换的问题。 在此问题上有多种方法&#xff0c;其中许多使用XML进行交换。 执行此任务的一种不太知名的格式是JSON。 JSON&#xff08;JavaScript对象表示法&#xff09;是一种轻量级的数…

c++ 经典代码_C语言经典100题(31)

1上期答案揭晓首先给大家看看上一篇文章C语言经典100题(30)中第三部分编程题的答案&#xff1a;#include int main( ){ long ge,shi,qian,wan,x; printf("请输入 5 位数字&#xff1a;"); scanf("%ld",&x); wanx/10000; /*分解出万…

$ 与 # 区别

# 会根据不同类型而生产字符串&#xff0c;如 String 类型 : aa ---> aa,长整型Long:123 ---> 123$ 表示原生类型&#xff0c;如 String 类型 : aa ---> aa,长整型Long:123 ---> 123转载于:https://www.cnblogs.com/svennee/p/4078824.html

JAX-RS 2.x与Spring MVC:返回对象列表的XML表示

JSON是所有REST * API的王者&#xff0c;但是您仍然可能需要公开多种表示形式&#xff0c;包括XML。 使用JAX-RS和Spring MVC都非常简单。 实际上&#xff0c;唯一要做的就是用JAXB注释对从API调用返回的POJO进行注释。 但是&#xff0c;我认为序列化对象列表时&#xff0c;JA…

android读取excel文件_python里读写excel等数据文件的几种常用方式

python处理数据文件第一步是要读取数据&#xff0c;文件类型主要包括文本文件(csv、txt等)、excel文件、数据库文件、api等。下面整理下python有哪些方式可以读取数据文件。1. python内置方法(read、readline、readlines)read() &#xff1a; 一次性读取整个文件内容。推荐使用…

UGUI学习笔记之渲染顺序

转载请注明地址&#xff1a;http://www.cnblogs.com/Vincentblogs/p/4083028.html QQ群&#xff1a;346738352 Unity技术交流群&#xff0c;讲纯粹的技术。 数据记录为Unity4.6b21版本 图片解释&#xff1a;这是一个按钮UI,层级1显示的是按钮背景&#xff0c;层级2显示的Image…

exp导出excel oracle_如何从Oracle快速导出数据到Excel

【摘要】在生产系统使用过程中&#xff0c;常常会有从数据库中导出数据的需求。支持多种导出方式&#xff0c;例如使用spool、utl_file等内置方法导出&#xff0c;利用plsql developer、等第三方工具等。【正文】Oracle支持多种导出方式&#xff0c;包括自带的工具包和第三方工…

C#找出数组中重复次数最多的数值

给定一个int数组&#xff0c;里面存在重复的数值&#xff0c;如何找到重复次数最多的数值呢? 这是在某社区上有人提出的问题&#xff0c;我想到的解决方法是分组。 1、先对数组中的所有元素进行分组&#xff0c;那么&#xff0c;重复的数值肯定会被放到一组中&#xff1b; 2、…

什么比日期和时区更难? SQL / JDBC中的日期和时区!

在jOOQ邮件列表上&#xff0c;最近有一个有趣的讨论&#xff0c;关于jOOQ当前缺乏对TIMESTAMP WITH TIME ZONE数据类型的现成支持。 没有人说日期&#xff0c;时间和时区很容易&#xff01; 这里有一个有趣的部分&#xff0c;我建议阅读&#xff1a; 虚假的程序员相信时间 当…

Javascript – 正则表达式

目录 1. 正则表达式1.1 创建1.2 RegExp 对象属性1.3 RegExp 对象方法1.4 RegExp 分组2. 元字符和正则表达式规则1正则表达式 正则表达式本身就是一种语言&#xff0c;由普通字符和特殊的元字符&#xff08;metacharacters&#xff09;组成。它描述了字符串的匹配模式&#xff0…

spark-sql建表语句限制_第三篇|Spark SQL编程指南

在《第二篇|Spark Core编程指南》一文中&#xff0c;对Spark的核心模块进行了讲解。本文将讨论Spark的另外一个重要模块--Spark SQL&#xff0c;Spark SQL是在Shark的基础之上构建的&#xff0c;于2014年5月发布。从名称上可以看出&#xff0c;该模块是Spark提供的关系型操作AP…