iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python数据分析之绘图和可视化的示例分析
  • 822
分享到

Python数据分析之绘图和可视化的示例分析

2023-06-15 08:06:24 822人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

小编给大家分享一下python数据分析之绘图和可视化的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言matplotlib是一个用于创建出版质量图表

小编给大家分享一下python数据分析之绘图和可视化的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、前言

matplotlib是一个用于创建出版质量图表的桌面绘图包(主要是2D方面)。该项目是由John Hunter于2002年启动的,其目的是为Python构建一个MATLAB式的绘图接口。matplotlibIPython社区进行合作,简化了从IPython shell(包括现在的Jupyter notebook)进行交互式绘图。matplotlib支持各种操作系统上许多不同的GUI后端,而且还能将图片导出为各种常见的矢量(vector)和光栅(raster)图:pdf、SVG、JPG、PNG、BMP、GIF等。除了几张,本书中的大部分图都是用它生成的。

对于创建用于打印或网页的静态图形,我建议默认使用matplotlib和附加的库,比如pandasseaborn。对于交互式图形以便在WEB上发布,可以使用Plotly和Boken

学习本章代码案例的最简单方法是在Jupyter notebook进行交互式绘图。在Jupyter notebook中执行下面的语句:%matplotlib notebook

二、matplotlib api 入门

引入matplotlib,并创建简单的图形

import matplotlib.pyplot as pltimport numpy as npdata = np.arange(10)plt.plot(data)

虽然seaborn这样的库和pandas的内置绘图函数能够处理许多普通的绘图任务,但如果需要自定义一些高级功能的话就必须学习matplotlib API。matplotlib示例库文档是学习高级特性的最好资源。

matplotlib的图像都位于Figure对象中。你可以用plt.figure创建一个新的Figure,但不能通过空Figure绘图。必须用add_subplot创建一个或多个subplot才行:

fig = plt.figure()ax1 = fig.add_subplot(2, 2, 1)ax2 = fig.add_subplot(2, 2, 2)ax3 = fig.add_subplot(2, 2, 3)plt.plot(np.random.randn(50).cumsum(), 'k--')  # 在最后一个用过的subplot上进行绘制,隐藏创建figure和subplot的过程

提示:使用Jupyter notebook有一点不同,即每个小窗重新执行后,图形会被重置。因此,对于复杂的图形,,你必须将所有的绘图命令存在一个小窗里。

由fig.add_subplot所返回的对象是AxesSubplot对象,直接调用它们的实例方法就可以在其它空着的格子里面画图了

ax1.hist(np.random.randn(100), bins=20, color='k', alpha=0.3)ax2.scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30))

plt.subplots,它可以创建一个新的Figure,并返回一个含有已创建的subplot对象的NumPy数组fig, axes = plt.subplots(2, 3)。可以轻松地对axes数组进行索引,就好像是一个二维数组一样,例如axes[0,1]。还可以通过sharexsharey指定subplot应该具有相同的X轴或Y轴。在比较相同范围的数据时,这也是非常实用的,否则,matplotlib会自动缩放各图表的界限。

Python数据分析之绘图和可视化的示例分析

利用Figure的subplots_adjust(也是个顶级函数)方法可以轻而易举地修改间距:subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None),其中wspacehspace用于控制宽度和高度的百分比,可以用作subplot之间的间距。

plot函数中可以通过字符串来指定颜色和线型:ax.plot(x, y,'g--')
这种更为明确的方式也能得到同样的效果:ax.plot(x, y, linestyle='--', color='g')
常用的颜色可以使用颜色缩写,也可以指定颜色码(例如,#CECECE

IPythonJupyter中使用plot?可以查看文档说明。

线图可以使用标记强调数据点。因为matplotlib可以创建连续线图,在点之间进行插值,因此有时可能不太容易看出真实数据点的位置。标记也可以放到格式字符串中,但标记类型和线型必须放在颜色后面:

from numpy.random import randnplt.plot(randn(30).cumsum(), 'ko--')plot(randn(30).cumsum(), color='k', linestyle='dashed', marker='o')

在线型图中,非实际数据点默认是按线性方式插值的。可以通过drawstyle选项修改

data = np.random.randn(30).cumsum()plt.plot(data,'k--', label='Default')plt.plot(data,'k-', drawstyle='steps-post', label='steps-post')plt.legend(loc='best')

Python数据分析之绘图和可视化的示例分析

笔记:你必须调用plt.legend(或使用ax.legend,如果引用了轴的话)来创建图例,无论你绘图时是否传递label标签选项。

pyplot接口的设计目的就是交互式使用,含有诸如xlimxticksxticklabels之类的方法。它们分别控制图表的范围、刻度位置、刻度标签等。其使用方式有以下两种:

  • 调用时不带参数,则返回当前的参数值(例如,plt.xlim()返回当前的X轴绘图范围)。

  • 调用时带参数,则设置参数值(例如,plt.xlim([0,10])会将X轴的范围设置为0到10)。

所有这些方法都是对当前或最近创建的AxesSubplot起作用的。它们各自对应subplot对象上的两个方法,以xlim为例,就是ax.get_xlimax.set_xlim

设置标题、轴标签、刻度以及刻度标签

fig = plt.figure()ax = fig.add_subplot(1, 1, 1)ax.plot(np.random.randn(1000).cumsum())  # 创建随机漫步数据ticks = ax.set_xticks([0,250,500,750,1000])  # 改变x轴刻度labels = ax.set_xticklabels(['one','two','three','four','five'], rotation=30, fontsize='small')  # 设置轴标签ax.set_title('My first matplotlib plot')  # 设置题目ax.set_xlabel('Stages')  # 设置轴名称props ={    'title':'My first matplotlib plot',    'xlabel':'Stages'}ax.set(**props)  # 设置题目和轴名称

图例(legend)是另一种用于标识图表元素的重要工具。最简单的是在添加subplot的时候传入label参数。要从图例中去除一个或多个元素,不传入label或传入label='nolegend‘即可。

fig = plt.figure(); ax = fig.add_subplot(1,1,1)ax.plot(randn(1000).cumsum(),'k', label='one')ax.plot(randn(1000).cumsum(),'k--', label='two')ax.plot(randn(1000).cumsum(),'k.', label='three')ax.legend(loc='best')  # 必须调用legend方法才能显示图例

注解以及在Subplot上绘图

  • 注解和文字可以通过text、arrow和annotate函数进行添加。text可以将文本绘制在图表的指定坐标(x,y),还可以加上一些自定义格式:ax.text(x, y,'Hello world!', family='monospace', fontsize=10)

  • 注解中可以既含有文本也含有箭头。

  • 要在图表中添加一个图形,你需要创建一个块对象shp,然后通过ax.add_patch(shp)将其添加到subplot中:

fig = plt.figure()ax = fig.add_subplot(1,1,1)rect = plt.Rectangle((0.2,0.75),0.4,0.15, color='k', alpha=0.3)circ = plt.Circle((0.7,0.2),0.15, color='b', alpha=0.3)pGon = plt.Polygon([[0.15,0.15],[0.35,0.4],[0.2,0.6]],                   color='g', alpha=0.5)ax.add_patch(rect)ax.add_patch(circ)ax.add_patch(pgon)

将图表保存到文件

  • plt.savefig可以将当前图表保存到文件。该方法相当于Figure对象的实例方法savefig

参数:
dpi:控制“每英寸点数”分辨率;
bbox_inches:可以剪除当前图表周围的空白部分
plt.savefig('figpath.png', dpi=400, bbox_inches='tight')

  • savefig并非一定要写入磁盘,也可以写入任何文件型的对象,比如BytesIO

from io importBytesIObuffer =BytesIO()plt.savefig(buffer)plot_data = buffer.getvalue()

Python数据分析之绘图和可视化的示例分析

matplotlib自带一些配色方案,以及为生成出版质量的图片而设定的默认配置信息。几乎所有默认行为都能通过一组全局参数进行自定义,它们可以管理图像大小、subplot边距、配色方案、字体大小、网格类型等。一种Python编程方式配置系统的方法是使用rc方法。

  • 要将全局的图像默认大小设置为10×10,可以执行:plt.rc('figure', figsize=(10,10))

  • rc的第一个参数是希望自定义的对象,如'figure'、'axes'、'xtick'、'ytick'、'grid'、'legend'等。其后可以跟上一系列的关键字参数。一个简单的办法是将这些选项写成一个字典:

font_options ={'family':'monospace','weight':'bold','size':'small'}plt.rc('font',**font_options)

三、使用pandas和seaborn绘图

pandas中,我们有多列数据,还有行和列标签。pandas自身就有内置的方法,用于简化从DataFrameSeries绘制图形。另一个库seaborn简化了许多常见可视类型的创建。

提示:引入seaborn会修改matplotlib默认的颜色方案和绘图类型,以提高可读性和美观度。即使你不使用seaborn API,你可能也会引入seaborn,作为提高美观度和绘制常见matplotlib图形的简化方法。

Series和DataFrame都有一个用于生成各类图表的plot方法。默认情况下,它们所生成的是线型图:

s = pd.Series(np.random.randn(10).cumsum(), index=np.arange(0, 100, 10))s.plot()

Series对象的索引会被传给matplotlib,并用以绘制X轴。可以通过use_index=False禁用该功能。X轴的刻度和界限可以通过xticksxlim选项进行调节,Y轴就用yticksylim

Python数据分析之绘图和可视化的示例分析
Python数据分析之绘图和可视化的示例分析

2.pandas的大部分绘图方法都有一个可选的ax参数,它可以是一个matplotlibsubplot对象。这使你能够在网格布局中更为灵活地处理subplot的位置。DataFrameplot方法会在一个subplot中为各列绘制一条线,并自动创建图例

df = pd.DataFrame(np.random.randn(10, 4).cumsum(0), columns=['A', 'B', 'C', 'D'], index=np.arange(0, 100, 10))df.plot()

plot属性包含一批不同绘图类型的方法。例如,df.plot()等价于df.plot.line()

Python数据分析之绘图和可视化的示例分析

笔记:plot的其他关键字参数会被传给相应的matplotlib绘图函数,所以要更深入地自定义图表,就必须学习更多有关matplotlib API的知识。

plot.bar()和plot.barh()分别绘制水平和垂直的柱状图。这时,SeriesDataFrame的索引将会被用作X(bar)或Y(barh)刻度

fig, axes = plt.subplots(2, 1)data = pd.Series(np.random.rand(16), index=list('abcdefghijklmnop'))data.plot.bar(ax=axes[0], color='k', alpha=0.7)  # alpha设置透明度data.plot.barh(ax=axes[1], color='k', alpha=0.7)

对于DataFrame,柱状图会将每一行的值分为一组,并排显示

df = pd.DataFrame(np.random.rand(6, 4), index=['one', 'two', 'three', 'four', 'five', 'six'], columns=pd.Index(['A', 'B', 'C', 'D'], name='Genus'))df.plot.bar()

Python数据分析之绘图和可视化的示例分析

设置stacked=True即可为DataFrame生成堆积柱状图,这样每行的值就会被堆积在一起:df.plot.barh(stacked=True, alpha=0.5)

笔记:柱状图有一个非常不错的用法:利用value_counts图形化显示Series中各值的出现频率,比如s.value_counts().plot.bar()

做一张堆积柱状图以展示每天各种聚会规模的数据点的百分比。

In [75]: tips = pd.read_csv('pydata-book-2nd-edition/')In [76]: party_counts = pd.crosstab(tips['day'], tips['size'])In [77]: party_countsOut[77]: size  1   2   3   4  5  6day                      Fri   1  16   1   1  0  0Sat   2  53  18  13  1  0Sun   0  39  15  18  3  1Thur  1  48   4   5  1  3# Not many 1- and 6-person partiesIn [78]: party_counts = party_counts.loc[:, 2:5]In [79]: party_pcts = party_counts.div(party_counts.sum(1), axis=0)  # 进行规格化,使得各行的和为1In [81]: party_pcts.plot.bar()

对于在绘制一个图形之前,需要进行合计的数据,使用seaborn可以减少工作量。seaborn的绘制函数使用data参数,它可能是pandasDataFrame。其它的参数是关于列的名字。因为一天的每个值有多次观察,柱状图的值是tip_pct的平均值。绘制在柱状图上的黑线代表95%置信区间(可以通过可选参数配置)。

In [83]: import seaborn as snsIn [84]: %matplotlib inline  # 在jupyter中输入,避免无法显示图的问题In [85]: tips['tip_pct'] = tips['tip'] / (tips['total_bill'] - tips['tip'])In [86]: tips.head()Out[86]:    total_bill   tip smoker  day    time  size   tip_pct0       16.99  1.01     No  Sun  Dinner     2  0.0632041       10.34  1.66     No  Sun  Dinner     3  0.1912442       21.01  3.50     No  Sun  Dinner     3  0.1998863       23.68  3.31     No  Sun  Dinner     2  0.1624944       24.59  3.61     No  Sun  Dinner     4  0.172069In [86]: sns.barplot(x='tip_pct', y='day', data=tips, orient='h')In [87]: sns.barplot(x='tip_pct', y='day', hue='time', data=tips, orient='h')  # 根据time列进行颜色区分In [90]: sns.set()  # 设置图形外观

Python数据分析之绘图和可视化的示例分析

直方图(histogram)是一种可以对值频率进行离散化显示的柱状图。数据点被拆分到离散的、间隔均匀的面元中,绘制的是各面元中数据点的数量。

tips['tip_pct'].plot.hist(bins=50)  # bins表示柱的数量

密度图是通过计算“可能会产生观测数据的连续概率分布的估计”而产生的。一般的过程是将该分布近似为一组核(即诸如正态分布之类的较为简单的分布)。因此,密度图也被称作KDE(Kernel Density Estimate,核密度估计)图。使用plot.kde和标准混合正态分布估计即可生成一张密度图:tips['tip_pct'].plot.density()

seaborn的distplot方法绘制直方图和密度图更加简单,还可以同时画出直方图和连续密度估计图。作为例子,考虑一个双峰分布,由两个不同的标准正态分布组成:

In [96]: comp1 = np.random.nORMal(0, 1, size=200)In [97]: comp2 = np.random.normal(10, 2, size=200)In [98]: values = pd.Series(np.concatenate([comp1, comp2]))In [99]: sns.distplot(values, bins=100, color='k')

Python数据分析之绘图和可视化的示例分析

点图或散布图是观察两个一维数据序列之间的关系的有效手段。在下面这个例子中,我加载了来自statsmodels项目的Macrodata数据集,选择了几个变量,然后计算对数差:

In [100]: macro = pd.read_csv('examples/macrodata.csv')In [101]: data = macro[['cpi', 'm1', 'tbilrate', 'unemp']]In [102]: trans_data = np.log(data).diff().dropna()In [103]: trans_data[-5:]Out[103]:           cpi        m1  tbilrate     unemp198 -0.007904  0.045361 -0.396881  0.105361199 -0.021979  0.066753 -2.277267  0.139762200  0.002340  0.010286  0.606136  0.160343201  0.008419  0.037461 -0.200671  0.127339202  0.008894  0.012202 -0.405465  0.042560In [104]: sns.regplot('m1', 'unemp', data=trans_data)  # 做一个散布图,并加上一条线性回归的线In [107]: sns.pairplot(trans_data, diag_kind='kde', plot_kws={'alpha': 0.2})  # 生成散布图矩阵,pairplot支持在对角线上放置每个变量的直方图或密度估计

plot_kws参数可以传递配置选项到非对角线元素上的图形使用。

Python数据分析之绘图和可视化的示例分析

有多个分类变量的数据可视化的一种方法是使用小面网格。seaborn有一个有用的内置函数factorplot,可以简化制作多种分面图

sns.factorplot(x='day', y='tip_pct', hue='time', col='smoker', kind='bar', data=tips[tips.tip_pct < 1])sns.factorplot(x='day', y='tip_pct', row='time', col='smoker', kind='bar', data=tips[tips.tip_pct < 1])  # 通过给每个时间值添加一行来扩展分面网格

factorplot支持其它的绘图类型,如盒图(它可以显示中位数,四分位数,和异常值):

sns.factorplot(x='tip_pct', y='day', kind='box', data=tips[tips.tip_pct < 0.5])

Python数据分析之绘图和可视化的示例分析

以上是“Python数据分析之绘图和可视化的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网Python频道!

--结束END--

本文标题: Python数据分析之绘图和可视化的示例分析

本文链接: https://www.lsjlt.com/news/278947.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python数据分析之绘图和可视化的示例分析
    小编给大家分享一下Python数据分析之绘图和可视化的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言matplotlib是一个用于创建出版质量图表...
    99+
    2023-06-15
  • python数据分析绘图可视化实例分析
    本篇内容介绍了“python数据分析绘图可视化实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:数据分析初始阶段,通常都要进行可视...
    99+
    2023-07-02
  • python数据分析绘图可视化
    前言: 数据分析初始阶段,通常都要进行可视化处理。数据可视化旨在直观展示信息的分析结果和构思,令某些抽象数据具象化,这些抽象数据包括数据测量单位的性质或数量。本章用的程序库matpl...
    99+
    2024-04-02
  • Python数据可视化举例分析
    这篇文章主要介绍“Python数据可视化举例分析”,在日常操作中,相信很多人在Python数据可视化举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python数据可视化举例分析”的疑惑有所帮助!接下来...
    99+
    2023-06-16
  • Python数据处理及可视化的示例分析
    这篇文章主要介绍Python数据处理及可视化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、NumPy的初步使用表格是数据的一般表示形式,但对于机器来说是不可理解的,也就是无法辨识的数据,所以我们需要对表...
    99+
    2023-06-29
  • python可视化plotly图例设置的示例分析
    这篇文章主要介绍python可视化plotly图例设置的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、图例(legend)import plotly.io as pioimp...
    99+
    2023-06-29
  • Python数据分析之Matplotlib数据可视化
    目录1.前言2.Matplotlib概念3.Matplotlib.pyplot基本使用3.数据展示3.1如何选择展示方式3.2绘制折线图3.3绘制柱状图3.3.1普通柱状图3.3.2...
    99+
    2024-04-02
  • Golang在数据分析和可视化的应用示例
    go广泛用于数据分析和可视化。示例包括:基础设施监控:使用go和telegraf、prometheus构建监控应用程序。机器学习:利用go和tensorflow或pytorch构建和训练...
    99+
    2024-05-12
    可视化 数据分析 git golang 可视化数据
  • 数据分析案例-电影数据可视化分析
    数据介绍 数据为2011-2021电影数据 可视化分析 首先导入本次项目需要的包和数据 import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport ...
    99+
    2023-10-03
    python 数据分析
  • Python实现数据可视化案例分析
    目录1. 问题描述2. 实验环境3. 实验步骤及结果1. 问题描述 对右图进行修改: 请更换图形的风格请将 x 轴的数据改为-10 到 10请自行构造一个 y 值的函数将直方图上的数...
    99+
    2024-04-02
  • python可视化分析绘制散点图和边界气泡图
    目录一、绘制散点图二、绘制边界气泡图一、绘制散点图 实现功能: python绘制散点图,展现两个变量间的关系,当数据包含多组时,使用不同颜色和形状区分。 实现代码: import n...
    99+
    2024-04-02
  • Python疫情数据可视化分析
    目录前言功能函数读取文件更换列名,便于查看全球疫情趋势筛选出中国的数据利用groupby按照省统计确诊死亡治愈病例的总和确诊人数排名前15的国家这里用pyecharts库画图,绘制的...
    99+
    2024-04-02
  • python数据可视化绘制火山图示例
    目录导入模块1.读取测试数据2.查看数据3.筛选差异基因4.查看数据,发现多了type这一列5.统计个数6.绘火山图7.保存图片导入模块 import numpy as np imp...
    99+
    2024-04-02
  • PostgreSQL物化视图的示例分析
    这篇文章主要介绍PostgreSQL物化视图的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、创建视图CREATE MATERIALIZED VIEW&...
    99+
    2024-04-02
  • python数据分析及可视化(十五)数据分析可视化实战篇(抖音用户数据分析、二手房数据分析)
    python数据分析的实战篇,围绕实例的数据展开分析,通过数据操作案例来了解数据分析中的频繁用到的知识内容。 抖音用户数据分析 1.理解数据 数据字段含义 了解数据内容,确保数据来源是正常的,安全合法...
    99+
    2023-09-02
    python 数据分析 开发语言
  • Python高级数据分析之pandas和matplotlib绘图
    目录一、matplotlib 库二、Pandas绘图1.绘制简单的线型图1.1)简单的Series图表示例 .plot()1.2) 两个Series绘制的曲线可以叠加2.数据驱动的线...
    99+
    2024-04-02
  • react-native之ART绘图的示例分析
    小编给大家分享一下react-native之ART绘图的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!背景在移动应用的开...
    99+
    2024-04-02
  • [数据分析与可视化] Python绘制数据地图3-GeoPandas使用要点
    本文主要介绍GeoPandas的使用要点。GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口。GeoPandas扩展了Pandas的数据类型,并使用matplotl...
    99+
    2023-09-23
    python 数据分析 开发语言
  • Python数据分析之 Matplotlib 饼图绘制
    前言: 饼状图是用来呈现一个数据系列中各项的大小与各项占项总和的百分比,Matplotlib 提供了plt.pie()方法绘制柱状图,语法格式如下: plt.pie(x, explo...
    99+
    2024-04-02
  • Python数据分析之matplotlib绘图详解
    目录多子图散点图水平柱状图同位置柱状图多子图 figure是绘制对象(可以理解为一个空白的画布),一个figure对象可以包含多个Axes子图,一个Axes是一个绘图区域,不加设置时...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作