网站性能检测评分
注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。
python中mat
Matplotlib简介——python可视化篇 互联网视频课程
Matplotlib是一个Python 2D绘图库,可以在各种平台上以各种硬拷贝格式和交互式环境生成出版质量数据。Matplotlib可用于Python脚本,Python和IPythonshell,jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。
介绍
Matplotlib是一个Python 2D绘图库,可以在各种平台上以各种硬拷贝格式和交互式环境生成出版质量数据。Matplotlib可用于Python脚本,Python和IPython shell,jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。
可以用几行代码生成绘图,直方图,功率谱,条形图,错误图,散点图等。有关示例,请参阅官方文档示例图和缩略图库。
对于简单的绘图,pyplot模块提供了一个类似于MATLAB的界面,特别是当与IPython结合使用时。对于高级用户,您可以通过面向对象的界面或MATLAB用户熟悉的一组函数完全控制线型,字体属性,轴属性等。
历史
注意
以下介绍性文本是由Matplotlib的原作者John D. Hunter(1968-2012)于2008年撰写的。
Matplotlib是一个用Python制作数组的2D图的库。虽然它起源于模拟MATLAB图形命令,但它独立于MATLAB,可用于Pythonic,面向对象的方式。尽管Matplotlib主要是用纯Python编写的,但是它大量使用NumPy和其他扩展代码,即使对于大型数组也能提供良好的性能。
Matplotlib的设计理念是:只需几个命令就可以创建简单的图形,或者只有一个!如果要查看数据的直方图,则不需要实例化对象,调用方法,设置属性等; 它应该只是工作。
多年来,我曾经使用MATLAB专门用于数据分析和可视化。MATLAB擅长使好看的情节容易。当我开始使用EEG数据时,发现我需要编写应用程序来与我的数据进行交互,并在MATLAB中开发了一个EEG分析应用程序。随着应用程序越来越复杂,与数据库,http服务器交互,操纵复杂的数据结构,我开始对作为一种编程语言的MATLAB的限制施加压力,并决定从Python重新开始。Python不仅仅弥补了MATLAB作为一种编程语言的所有缺陷,但是我很难找到一个2D绘图软件包(对于3D VTK来说,超过了我所有的需求)。
当我去寻找一个Python绘图软件包时,我有几个要求:
情节应该看起来很棒 - 出版质量。对我来说,一个重要的要求是文本看起来不错(antialiased等)
附带TeX文档的Postscript输出
可嵌入图形用户界面进行应用程序开发
代码应该很容易,我可以理解并扩展它
制作情节应该很容易
没有找到适合我的软件包,我做了任何一个自我尊重的Python程序员都会做的事情:卷起袖子跳进来。没有任何计算机图形的实际经验,我决定模仿MATLAB的绘图功能,因为那是MATLAB做得很好。这有很多人拥有很多MATLAB经验的额外优势,因此他们可以快速地在python中进行蒸汽绘图。从开发者的角度来看,拥有一个固定的用户界面(pylab界面)非常有用,因为代码库的内核可以重新设计而不会影响用户代码。
Matplotlib代码在概念上分为三个部分: pylab接口是提供的功能集合 matplotlib.pylab,允许用户创建与MATLAB图形生成代码非常相似的代码(Pyplot教程)。该Matplotlib前端或Matplotlib API是一套做繁重的课程,创建和管理的数字,文字,线条,曲线等(艺术家教程)。这是一个对输出一无所知的抽象接口。的后端是依赖于设备的绘图设备,又名渲染器,即转换前端表示以硬拷贝或显示装置(什么是后端?)。示例后端:PS创建PostScript硬拷贝,SVG创建Scalable Vector Graphics 硬拷贝,Agg使用 Matplotlib附带的高质量Anti-Grain Geometry库创建PNG输出,GTK将Matplotlib嵌入到 Gtk + 应用程序中,GTKAgg使用Anti-Grain渲染器创建一个图形并将其嵌入到Gtk +应用程序中,以此类推PDF,WxWidgets,Tkinter等。
Matplotlib在许多不同的环境中被许多人使用。有些人希望自动生成PostScript文件以发送给打印机或发布者。其他人在Web应用程序服务器上部署Matplotlib,以生成包含在动态生成的网页中的PNG输出。一些使用Matplotlib交互从Windows上的Tkinter的Python shell。我的主要用途是将Matplotlib嵌入在Windows,Linux和Macintosh OS X上运行的Gtk + EEG应用程序中。
Matplotlib教程(直方图)——python可视化篇 营销视频课程
源代码:
#导出matplotlib.pyplot,matplotlib.mlab 重命名为 plt,mlab
#导出numpy包重命名为np
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
np.random.seed(19680801)
# 示例数据
mu = 100 # 分布均值
sigma = 15 # 分布标准偏差
x = mu + sigma * np.random.randn(437)
num_bins = 50
fig, ax = plt.subplots()
# 数据的直方图
n, bins, patches = ax.hist(x, num_bins, normed=1)
# 添加一个“最适合”行
y = mlab.normpdf(bins, mu, sigma)
ax.plot(bins, y, '--')
ax.set_xlabel('Smarts')
ax.set_ylabel('Probability density')
ax.set_title(r'Histogram of IQ: $mu=100$, $sigma=15$')
# 调整间距,以防止ylabel剪辑
fig.tight_layout()
plt.show()
Python数据可视化利器Matplotlib,绘图入门篇,非线性坐标轴 互联网视频课程
pyplot不仅支持显示常规的线性坐标轴,还支持如对数坐标轴这样的非线性坐标轴。
一说线性坐标轴,有的同学可能会懵,其实不难理解,线性坐标轴就是坐标轴上的刻度值均为等差数列。
对于一般的数据,线性坐标轴完成可以满足我们的需求,但是当数据范围跨度非常大时,线性坐标轴无法准确的展示数据之间的关系,这时候就需要非线性坐标轴了。
非线性坐标轴比例尺主要有三种,分别为log、symlog、logit。其中,log比例尺用于正数区间的数据图像显示;symlog比例尺用于整个实数区间的数据图像显示,并且支持在0刻度附近指定区间范围内使用线性刻度绘图以展示细节特性;logit比例尺用于(0,1)区间内的数据图像显示。
根据数据特性选择好对应的比例尺以后,我们就可以使用plt.xscale()和plt.yscale()命令改变X轴和Y轴的比例尺了。
下面我们就用一组数据为例,将它分别显示在四种比例尺的坐标轴下,让大家直观的感受一下非线性坐标轴。
Python数据可视化Matplotlib,如何隐藏坐标轴刻度线? 推广视频课程
在之前的Python数据可视化利器Matplotlib,绘图区外观设置一文中,我们曾经介绍过一个方法——axes.set_axis_off(),该方法可以直接将坐标轴隐藏,但是此方法不光隐藏了刻度线连坐标轴也隐藏了,而且无法针对X轴或Y轴进行单独设置。
今天我们要学习的方法,专门用来隐藏刻度线。
NullLocator
NullLocator,看名称就能知道,它是matplotlib.ticker模块中用于刻度线定位的类。
在实际应用中,该类主要用于隐藏刻度线。
无论是X轴、Y轴、主刻度线、次刻度线,都可以通过该类自由搭配刻度线的隐藏。
使用方法演示
隐藏下图Y轴刻度线
代码及相关说明
效果图
头条号:matplotlib小讲堂,一个专注于Python数据可视化库matplotlib技术分享的专业账号。
有这5小段代码在手,轻松实现数据可视化(Python+Matplotlib) 营销视频课程
大数据文摘作品
编译:傅一洋、吴双、龙牧雪
本文要讲的是Matplotlib,一个强大的Python可视化库。一共5小段代码,轻松实现散点图、折线图、直方图、柱状图、箱线图,每段代码只有10行,也是再简单不过了吧!
数据可视化是数据科学家工作的一项主要任务。在项目早期阶段,通常会进行探索性数据分析(EDA)以获取对数据的理解和洞察,尤其对于大型高维的数据集,数据可视化着实有助于使数据关系更清晰易懂。
同时在项目结束时,以清晰、简洁和引人注目的方式展示最终结果也是非常重要的,因为受众往往是非技术性客户,只有这样,他们才更容易去理解。
Matplotlib是个很流行的Python库,可以轻松实现数据可视化。但是,每次执行新项目的绘图时,设置数据、参数、图形的过程都非常的繁琐。 在本文中,我们将着眼于5种数据可视化方法,用Python的Matplotlib库实现一些快速而简单的功能。
首先,请大家看看这张大的地图,它能指引你根据不同情况,选择正确的可视化方法:
根据情况选择适当的数据可视化技术
散点图
散点图非常适合展现两个变量间关系,因为,图中可以直接看出数据的原始分布。还可以通过设置不同的颜色,轻松地查看不同组数据间的关系,如下图所示。那如果想要可视化三个变量之间的关系呢?没问题!只需再添加一个参数(如点的大小)来表示第三个变量就可以了,如下面第二个图所示。
以颜色分组的散点图
加入新维度:圆圈大小
现在来写代码。首先导入Matplotlib库的pyplot子库,并命名为plt。使用 plt.subplots()命令创建一个新的图。将x轴和y轴数据传递给相应数组x_data和y_data,然后将数组和其他参数传递给ax.scatter()以绘制散点图。我们还可以设置点的大小、颜色和alpha透明度,甚至将y轴设置成对数坐标。最后再为该图设置好必要的标题和轴标签。这个函数轻松地实现了端到端的绘图!
import matplotlib.pyplot as pltimport numpy as npdef scatterplot(x_data, y_data, x_label="", y_label="", title="", color = "r", yscale_log=False):# Create the plot object _, ax = plt.subplots() # Plot the data, set the size (s), color and transparency (alpha) # of the points ax.scatter(x_data, y_data, s = 10, color = color, alpha = 0.75) if yscale_log == True: ax.set_yscale('log') # Label the axes and provide a title ax.set_title(title) ax.set_xlabel(x_label) ax.set_ylabel(y_label)
折线图
如果一个变量随着另一个变量的变化而大幅度变化(具有很高的协方差),为了清楚地看出变量间的关系,最好使用折线图。例如,根据下图,我们能清楚地看出,不同专业获得学士学位的人群中,女性所占的百分比随时间变化产生很大变化。
此时,若用散点图绘制,数据点容易成簇,显得非常混乱,很难看出数据本身的意义。而折线图就再合适不过了,因为它基本上反映出两个变量(女性占比和时间)协方差的大体情况。同样,也可使用不同颜色来对多组数据分组。
女性获得学士学位的百分比(美国)
代码与散点图类似,只是一些微小的参数改动。
def lineplot(x_data, y_data, x_label="", y_label="", title=""):# Create the plot object _, ax = plt.subplots() # Plot the best fit line, set the linewidth (lw), color and # transparency (alpha) of the line ax.plot(x_data, y_data, lw = 2, color = '#539caf', alpha = 1) # Label the axes and provide a title ax.set_title(title) ax.set_xlabel(x_label) ax.set_ylabel(y_label)
直方图
直方图适合查看(或发现)数据分布。下图为不同IQ人群所占比例的直方图。从中可以清楚地看出中心期望值和中位数,看出它遵循正态分布。使用直方图(而不是散点图)可以清楚地显示出不同组数据频率之间的相对差异。而且,分组(使数据离散化)有助于看出“更宏观的分布”,若使用未被离散化的数据点,可能会产生大量数据噪声,从而很难看出数据的真实分布。
正态分布的IQ
下面是用Matplotlib库创建直方图的代码。这里有两个参数需要注意。第一个参数是n_bins参数,用于控制直方图的离散度。一方面,更多的分组数能提供更详细的信息,但可能会引入数据噪声使结果偏离宏观分布;另一方面,更少的分组数能提供更宏观的数据“鸟瞰”,在不需要太多细节的情况下能更全面地了解数据整体情况。第二个参数是累积参数cumulative,是一个布尔值,通过它控制直方图是否累积,也就是选择使用概率密度函数(PDF)还是累积密度函数(CDF)。
def histogram(data, n_bins, cumulative=False, x_label = "", y_label = "", title = ""):_, ax = plt.subplots() ax.hist(data, n_bins = n_bins, cumulative = cumulative, color = '#539caf') ax.set_ylabel(y_label) ax.set_xlabel(x_label) ax.set_title(title)
如果要比较数据中两个变量的分布情况该怎么办呢?有些人可能会认为,必须要制作两个独立的直方图将它们并排放在一起进行比较。但实际上,有更好的方法:用不同透明度实现直方图的叠加。比如下图,将均匀分布透明度设置为0.5,以便看清后面的正态分布。这样,用户就可以在同一张图上查看两个变量的分布了。
叠加直方图
在实现叠加直方图的代码中需要设置以下几个参数:
设置水平范围,以适应两种可变分布;根据这个范围和期望的分组数量,计算并设置组距;设置其中一个变量具有更高透明度,以便在一张图上显示两个分布。
# Overlay 2 histograms to compare themdef overlaid_histogram(data1, data2, n_bins = 0, data1_name="", data1_color="#539caf", data2_name="", data2_color="#7663b0", x_label="", y_label="", title=""):# Set the bounds for the bins so that the two distributions are fairly compared max_nbins = 10 data_range = [min(min(data1), min(data2)), max(max(data1), max(data2))] binwidth = (data_range[1] - data_range[0]) / max_nbins if n_bins == 0 bins = np.arange(data_range[0], data_range[1] + binwidth, binwidth) else: bins = n_bins # Create the plot _, ax = plt.subplots() ax.hist(data1, bins = bins, color = data1_color, alpha = 1, label = data1_name) ax.hist(data2, bins = bins, color = data2_color, alpha = 0.75, label = data2_name) ax.set_ylabel(y_label) ax.set_xlabel(x_label) ax.set_title(title) ax.legend(loc = 'best')
柱状图
柱状图适用于对类别较少(<10个)的分类数据进行可视化。但在类别太多时,图中的柱体就会容易堆在一起,显得非常乱,对数据的理解造成困难。柱状图适合于分类数据的原因,一是能根据柱体的高度(即长短)轻松地看出类别之间的差异,二是很容易将不同类别加以区分,甚至赋予不同颜色。以下介绍三种类型的柱状图:常规柱状图,分组柱状图和堆积柱状图。参考代码来看详细的说明。
常规柱状图,如下图所示。代码中,barplot()函数的x_data参数表示x轴坐标,y_data代表y轴(柱体的高度)坐标,yerr表示在每个柱体顶部中央显示的标准偏差线。
分组柱状图,如下图所示。它允许对多个分类变量进行对比。如图所示,两组关系其一是分数与组(组G1,G2,...等)的关系,其二是用颜色区分的性别之间的关系。代码中,y_data_list是一个列表,其中又包含多个子列表,每个子列表代表一个组。对每个列表赋予x坐标,循环遍历其中的每个子列表,设置成不同颜色,绘制出分组柱状图。
堆积柱状图,适合可视化含有子分类的分类数据。下面这张图是用堆积柱状图展示的日常服务器负载情况统计。使用不同颜色进行堆叠,对不同服务器之间进行比较,从而能查看并了解每天中哪台服务器的工作效率最高,负载具体为多少。代码与柱状图样式相同,同样为循环遍历每个组,只是这次是在旧柱体基础上堆叠,而不是在其旁边绘制新柱体。
以下是三种堆积柱状图的代码:
def barplot(x_data, y_data, error_data, x_label="", y_label="", title=""):_, ax = plt.subplots() # Draw bars, position them in the center of the tick mark on the x-axis ax.bar(x_data, y_data, color = '#539caf', align = 'center') # Draw error bars to show standard deviation, set ls to 'none' # to remove line between points ax.errorbar(x_data, y_data, yerr = error_data, color = '#297083', ls = 'none', lw = 2, capthick = 2) ax.set_ylabel(y_label) ax.set_xlabel(x_label) ax.set_title(title)
def stackedbarplot(x_data, y_data_list, colors, y_data_names="", x_label="", y_label="", title=""):_, ax = plt.subplots() # Draw bars, one category at a time for i in range(0, len(y_data_list)): if i == 0: ax.bar(x_data, y_data_list[i], color = colors[i], align = 'center', label = y_data_names[i]) else: # For each category after the first, the bottom of the # bar will be the top of the last category ax.bar(x_data, y_data_list[i], color = colors[i], bottom = y_data_list[i - 1], align = 'center', label = y_data_names[i]) ax.set_ylabel(y_label) ax.set_xlabel(x_label) ax.set_title(title) ax.legend(loc = 'upper right')
def groupedbarplot(x_data, y_data_list, colors, y_data_names="", x_label="", y_label="", title=""):_, ax = plt.subplots() # Total width for all bars at one x location total_width = 0.8 # Width of each inpidual bar ind_width = total_width / len(y_data_list) # This centers each cluster of bars about the x tick mark alteration = np.arange(-(total_width/2), total_width/2, ind_width) # Draw bars, one category at a time for i in range(0, len(y_data_list)): # Move the bar to the right on the x-axis so it doesn't # overlap with previously drawn ones ax.bar(x_data + alteration[i], y_data_list[i], color = colors[i], label = y_data_names[i], width = ind_width) ax.set_ylabel(y_label) ax.set_xlabel(x_label) ax.set_title(title) ax.legend(loc = 'upper right')
箱线图
前文介绍的直方图非常适合于对变量分布的可视化。但是,如果想要将更多的变量信息可视化呢?比如要清楚地看出标准差,或者一些情况下,中位数与平均值存在很大差异,因此是存在很多异常值呢还是数据分布本身就向一端偏移呢?
这里,箱线图就可以表示出上述的所有信息。箱体的底部和顶部分别为第一和第三四分位数(即数据的25%和75%),箱体内的横线为第二四分位数(即中位数)。箱体上下的延伸线(即T型虚线)表示数据的上下限。
由于箱形图是为每个组或变量绘制的,因此设置起来非常容易。x_data是组或变量的列表,x_data中的每个值对应于y_data中的一列值(一个列向量)。用Matplotlib库的函数boxplot()为y_data的每列值(每个列向量)生成一个箱形,然后设定箱线图中的各个参数就可以了。
def boxplot(x_data, y_data, base_color="#539caf", median_color="#297083", x_label="", y_label="", title=""):_, ax = plt.subplots() # Draw boxplots, specifying desired style ax.boxplot(y_data # patch_artist must be True to control box fill , patch_artist = True # Properties of median line , medianprops = {'color': median_color} # Properties of box , boxprops = {'color': base_color, 'facecolor': base_color} # Properties of whiskers , whiskerprops = {'color': base_color} # Properties of whisker caps , capprops = {'color': base_color}) # By default, the tick label starts at 1 and increments by 1 for # each box drawn. This sets the labels to the ones we want ax.set_xticklabels(x_data) ax.set_ylabel(y_label) ax.set_xlabel(x_label) ax.set_title(title)
这就是可供你使用的Matplotlib库的5个快速简单的数据可视化方法了!将功能和方法包装成函数,总是会使代码的编写和阅读都变的更简单!希望这篇文章能对你有所帮助,希望你能从中学到知识!如果喜欢就点个赞吧!
有这5小段代码在手,轻松实现数据可视化(Python+Matplotlib) 营销视频课程
大数据文摘作品
编译:傅一洋、吴双、龙牧雪
本文要讲的是Matplotlib,一个强大的Python可视化库。一共5小段代码,轻松实现散点图、折线图、直方图、柱状图、箱线图,每段代码只有10行,也是再简单不过了吧!
数据可视化是数据科学家工作的一项主要任务。在项目早期阶段,通常会进行探索性数据分析(EDA)以获取对数据的理解和洞察,尤其对于大型高维的数据集,数据可视化着实有助于使数据关系更清晰易懂。
同时在项目结束时,以清晰、简洁和引人注目的方式展示最终结果也是非常重要的,因为受众往往是非技术性客户,只有这样,他们才更容易去理解。
Matplotlib是个很流行的Python库,可以轻松实现数据可视化。但是,每次执行新项目的绘图时,设置数据、参数、图形的过程都非常的繁琐。 在本文中,我们将着眼于5种数据可视化方法,用Python的Matplotlib库实现一些快速而简单的功能。
首先,请大家看看这张大的地图,它能指引你根据不同情况,选择正确的可视化方法:
根据情况选择适当的数据可视化技术
散点图
散点图非常适合展现两个变量间关系,因为,图中可以直接看出数据的原始分布。还可以通过设置不同的颜色,轻松地查看不同组数据间的关系,如下图所示。那如果想要可视化三个变量之间的关系呢?没问题!只需再添加一个参数(如点的大小)来表示第三个变量就可以了,如下面第二个图所示。
以颜色分组的散点图
加入新维度:圆圈大小
现在来写代码。首先导入Matplotlib库的pyplot子库,并命名为plt。使用 plt.subplots()命令创建一个新的图。将x轴和y轴数据传递给相应数组x_data和y_data,然后将数组和其他参数传递给ax.scatter()以绘制散点图。我们还可以设置点的大小、颜色和alpha透明度,甚至将y轴设置成对数坐标。最后再为该图设置好必要的标题和轴标签。这个函数轻松地实现了端到端的绘图!
import matplotlib.pyplot as pltimport numpy as npdef scatterplot(x_data, y_data, x_label="", y_label="", title="", color = "r", yscale_log=False):# Create the plot object _, ax = plt.subplots() # Plot the data, set the size (s), color and transparency (alpha) # of the points ax.scatter(x_data, y_data, s = 10, color = color, alpha = 0.75) if yscale_log == True: ax.set_yscale('log') # Label the axes and provide a title ax.set_title(title) ax.set_xlabel(x_label) ax.set_ylabel(y_label)
折线图
如果一个变量随着另一个变量的变化而大幅度变化(具有很高的协方差),为了清楚地看出变量间的关系,最好使用折线图。例如,根据下图,我们能清楚地看出,不同专业获得学士学位的人群中,女性所占的百分比随时间变化产生很大变化。
此时,若用散点图绘制,数据点容易成簇,显得非常混乱,很难看出数据本身的意义。而折线图就再合适不过了,因为它基本上反映出两个变量(女性占比和时间)协方差的大体情况。同样,也可使用不同颜色来对多组数据分组。
女性获得学士学位的百分比(美国)
代码与散点图类似,只是一些微小的参数改动。
def lineplot(x_data, y_data, x_label="", y_label="", title=""):# Create the plot object _, ax = plt.subplots() # Plot the best fit line, set the linewidth (lw), color and # transparency (alpha) of the line ax.plot(x_data, y_data, lw = 2, color = '#539caf', alpha = 1) # Label the axes and provide a title ax.set_title(title) ax.set_xlabel(x_label) ax.set_ylabel(y_label)
直方图
直方图适合查看(或发现)数据分布。下图为不同IQ人群所占比例的直方图。从中可以清楚地看出中心期望值和中位数,看出它遵循正态分布。使用直方图(而不是散点图)可以清楚地显示出不同组数据频率之间的相对差异。而且,分组(使数据离散化)有助于看出“更宏观的分布”,若使用未被离散化的数据点,可能会产生大量数据噪声,从而很难看出数据的真实分布。
正态分布的IQ
下面是用Matplotlib库创建直方图的代码。这里有两个参数需要注意。第一个参数是n_bins参数,用于控制直方图的离散度。一方面,更多的分组数能提供更详细的信息,但可能会引入数据噪声使结果偏离宏观分布;另一方面,更少的分组数能提供更宏观的数据“鸟瞰”,在不需要太多细节的情况下能更全面地了解数据整体情况。第二个参数是累积参数cumulative,是一个布尔值,通过它控制直方图是否累积,也就是选择使用概率密度函数(PDF)还是累积密度函数(CDF)。
def histogram(data, n_bins, cumulative=False, x_label = "", y_label = "", title = ""):_, ax = plt.subplots() ax.hist(data, n_bins = n_bins, cumulative = cumulative, color = '#539caf') ax.set_ylabel(y_label) ax.set_xlabel(x_label) ax.set_title(title)
如果要比较数据中两个变量的分布情况该怎么办呢?有些人可能会认为,必须要制作两个独立的直方图将它们并排放在一起进行比较。但实际上,有更好的方法:用不同透明度实现直方图的叠加。比如下图,将均匀分布透明度设置为0.5,以便看清后面的正态分布。这样,用户就可以在同一张图上查看两个变量的分布了。
叠加直方图
在实现叠加直方图的代码中需要设置以下几个参数:
设置水平范围,以适应两种可变分布;根据这个范围和期望的分组数量,计算并设置组距;设置其中一个变量具有更高透明度,以便在一张图上显示两个分布。
# Overlay 2 histograms to compare themdef overlaid_histogram(data1, data2, n_bins = 0, data1_name="", data1_color="#539caf", data2_name="", data2_color="#7663b0", x_label="", y_label="", title=""):# Set the bounds for the bins so that the two distributions are fairly compared max_nbins = 10 data_range = [min(min(data1), min(data2)), max(max(data1), max(data2))] binwidth = (data_range[1] - data_range[0]) / max_nbins if n_bins == 0 bins = np.arange(data_range[0], data_range[1] + binwidth, binwidth) else: bins = n_bins # Create the plot _, ax = plt.subplots() ax.hist(data1, bins = bins, color = data1_color, alpha = 1, label = data1_name) ax.hist(data2, bins = bins, color = data2_color, alpha = 0.75, label = data2_name) ax.set_ylabel(y_label) ax.set_xlabel(x_label) ax.set_title(title) ax.legend(loc = 'best')
柱状图
柱状图适用于对类别较少(<10个)的分类数据进行可视化。但在类别太多时,图中的柱体就会容易堆在一起,显得非常乱,对数据的理解造成困难。柱状图适合于分类数据的原因,一是能根据柱体的高度(即长短)轻松地看出类别之间的差异,二是很容易将不同类别加以区分,甚至赋予不同颜色。以下介绍三种类型的柱状图:常规柱状图,分组柱状图和堆积柱状图。参考代码来看详细的说明。
常规柱状图,如下图所示。代码中,barplot()函数的x_data参数表示x轴坐标,y_data代表y轴(柱体的高度)坐标,yerr表示在每个柱体顶部中央显示的标准偏差线。
分组柱状图,如下图所示。它允许对多个分类变量进行对比。如图所示,两组关系其一是分数与组(组G1,G2,...等)的关系,其二是用颜色区分的性别之间的关系。代码中,y_data_list是一个列表,其中又包含多个子列表,每个子列表代表一个组。对每个列表赋予x坐标,循环遍历其中的每个子列表,设置成不同颜色,绘制出分组柱状图。
堆积柱状图,适合可视化含有子分类的分类数据。下面这张图是用堆积柱状图展示的日常服务器负载情况统计。使用不同颜色进行堆叠,对不同服务器之间进行比较,从而能查看并了解每天中哪台服务器的工作效率最高,负载具体为多少。代码与柱状图样式相同,同样为循环遍历每个组,只是这次是在旧柱体基础上堆叠,而不是在其旁边绘制新柱体。
以下是三种堆积柱状图的代码:
def barplot(x_data, y_data, error_data, x_label="", y_label="", title=""):_, ax = plt.subplots() # Draw bars, position them in the center of the tick mark on the x-axis ax.bar(x_data, y_data, color = '#539caf', align = 'center') # Draw error bars to show standard deviation, set ls to 'none' # to remove line between points ax.errorbar(x_data, y_data, yerr = error_data, color = '#297083', ls = 'none', lw = 2, capthick = 2) ax.set_ylabel(y_label) ax.set_xlabel(x_label) ax.set_title(title)
def stackedbarplot(x_data, y_data_list, colors, y_data_names="", x_label="", y_label="", title=""):_, ax = plt.subplots() # Draw bars, one category at a time for i in range(0, len(y_data_list)): if i == 0: ax.bar(x_data, y_data_list[i], color = colors[i], align = 'center', label = y_data_names[i]) else: # For each category after the first, the bottom of the # bar will be the top of the last category ax.bar(x_data, y_data_list[i], color = colors[i], bottom = y_data_list[i - 1], align = 'center', label = y_data_names[i]) ax.set_ylabel(y_label) ax.set_xlabel(x_label) ax.set_title(title) ax.legend(loc = 'upper right')
def groupedbarplot(x_data, y_data_list, colors, y_data_names="", x_label="", y_label="", title=""):_, ax = plt.subplots() # Total width for all bars at one x location total_width = 0.8 # Width of each inpidual bar ind_width = total_width / len(y_data_list) # This centers each cluster of bars about the x tick mark alteration = np.arange(-(total_width/2), total_width/2, ind_width) # Draw bars, one category at a time for i in range(0, len(y_data_list)): # Move the bar to the right on the x-axis so it doesn't # overlap with previously drawn ones ax.bar(x_data + alteration[i], y_data_list[i], color = colors[i], label = y_data_names[i], width = ind_width) ax.set_ylabel(y_label) ax.set_xlabel(x_label) ax.set_title(title) ax.legend(loc = 'upper right')
箱线图
前文介绍的直方图非常适合于对变量分布的可视化。但是,如果想要将更多的变量信息可视化呢?比如要清楚地看出标准差,或者一些情况下,中位数与平均值存在很大差异,因此是存在很多异常值呢还是数据分布本身就向一端偏移呢?
这里,箱线图就可以表示出上述的所有信息。箱体的底部和顶部分别为第一和第三四分位数(即数据的25%和75%),箱体内的横线为第二四分位数(即中位数)。箱体上下的延伸线(即T型虚线)表示数据的上下限。
由于箱形图是为每个组或变量绘制的,因此设置起来非常容易。x_data是组或变量的列表,x_data中的每个值对应于y_data中的一列值(一个列向量)。用Matplotlib库的函数boxplot()为y_data的每列值(每个列向量)生成一个箱形,然后设定箱线图中的各个参数就可以了。
def boxplot(x_data, y_data, base_color="#539caf", median_color="#297083", x_label="", y_label="", title=""):_, ax = plt.subplots() # Draw boxplots, specifying desired style ax.boxplot(y_data # patch_artist must be True to control box fill , patch_artist = True # Properties of median line , medianprops = {'color': median_color} # Properties of box , boxprops = {'color': base_color, 'facecolor': base_color} # Properties of whiskers , whiskerprops = {'color': base_color} # Properties of whisker caps , capprops = {'color': base_color}) # By default, the tick label starts at 1 and increments by 1 for # each box drawn. This sets the labels to the ones we want ax.set_xticklabels(x_data) ax.set_ylabel(y_label) ax.set_xlabel(x_label) ax.set_title(title)
这就是可供你使用的Matplotlib库的5个快速简单的数据可视化方法了!将功能和方法包装成函数,总是会使代码的编写和阅读都变的更简单!希望这篇文章能对你有所帮助,希望你能从中学到知识!如果喜欢就点个赞吧!