python制作图_Python做图的方法

最近一直没有更新文章,在学习Machine learning。然后业余在kaggle那里瞎转,对Python常用的作图摸了个遍,本文将对这些作图方法做个简单介绍

一般我们作图主要是为了看数据分布、数据趋势、以及比较大小。常用的图包括:

line(折线图):展示趋势

scatter (散点图):展示分布(机械学习中经常使用)

bar (柱状图):感觉柱状图主要是多项目的趋势比较

pie (饼图):展示分布

box (箱型图):展示单个项目数据的分布细节

heatmap (热力图):主要是列联表表示数据相对大小

作图的工具有很多,例如Pandas、Seaborn、ggplot、Bokeh、Plotly、Pypal。而对于我来说,作图的工具主要就是两种matplotlib和seaborn两种。matplotlib可以在numpy数组里面使用,也可以处理pandas中的dataframe。

此外matplotlib还是python作图的基础包,大部分作图模块都是基于matplotlib来的,因此matplotlib的自定义属性最高。为了减少美化以及配色的麻烦,我一般时候喜欢作图的使用通过引用ggplot的style来解决美化问题:

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

plt.style.use('ggplot') ##使得作图自带色彩,这样不用费脑筋去考虑配色什么的;

%matplotlib inline

numpy array的作图

numpy数组主要是出现在python的数据分析里面,例如,在监督型学习的时候,需要做对分布的散点进行模式识别,并拟合。在拟合的过程中,需要用到梯度下降法,为了快速了解收敛的过程,需要对cost function进行监督。

在这里先不描述梯度下降法的作图方法,先简单介绍numpy数组的散点图以及拟合方法(注意poly1d不是拟合方法,而是一个多项式生成器,真正的拟合在polyfit那里)。通过linspace生成一组数据,并引入random:

x = np.linspace(1,10,80)

y = x + np.random.standard_normal(size=80)

y_s = np.ploy1d(np.plotfit(x,y,1))(x)

plt.scatter(x,y)

plt.plot(x, y_s)

plt.show()

这样就可以生成下面的这个图了:

一维拟合

当然,可以看到。这个图里面散点的点比较大,可以通过改变s参数更改散点的大小(如果将s变为一个函数,那么散点图就可以成为泡沫图了),线可以通过linewidth 加粗。在这里,我们将s调大,并将其调成半透明,将线加粗,加入轴说明和图表抬头(title的字号大小通过fontsize来改变):

x = np.linspace(1,10,80)

y = x + np.random.standard_normal(size=80)

plt.scatter(x,y, s = 20, alpha=0.2)

plt.plot(x, y_s, linewidth = 2)

plt.xlabel('area')

plt.ylabel('price')

plt.legend(('fit', 'origin'), loc = 'best', fontsize = 8)

plt.title('the price of the house with various area', {'fontsize':10})

plt.show()

更改后的一维拟合

Pandas的作图方法

dataframe里面一般涉及几组参数,一般无外乎是通过作图来发现参数组之间的规律或者关系。并且Pandas里面所有的作图可以都可以通过df.plot来实现,不同的图仅仅需要plot函数中的kind参数,将其改为ine、scatter、bar和pie等可以生成对应的图,详细需要看Visualization章节。在这里,我将以散点图为例做一个讲解:

x = np.linspace(0,10,101) + np.random.normal(1,0.5,101)

y = np.linspace(20,30,101) + np.random.normal(1,0.5,101)

z = np.linspace(40,50,101) + np.random.normal(1,0.5,101)

df = pd.DataFrame({'x':x, 'y':y, 'z':z, 'H' : 2*x ** 3 + 3*np.log10(y)+4*z})

df.head(5)

先生成一个数据表格:

df

例如,我想看x-H的散点图关系。可以将其中的kind参数设置为scatter,x和y的值取为对应列的名称,加入title就可以了:

df.plot(kind='scatter', x='x', y='H')

plt.title('x vs H')

plt.show()

x vs H

当然,如果我想同时看x,y,z对H的影响,似乎就要将上面的这个图重复三遍,比较麻烦。Pandas里面的scatter_matrix就可以解决这个问题,引用pandas.tools.plotting中的scatter_matrix函数:

from pandas.tools.plotting import scatter_matrix

scatter_matrix(df, figsize=(10,1 0), diagonal='kde')

plt.suptitle('the inflence of x,y,z to H')

plt.show()

xyz vs H

Heatmap

这是一种比较特殊的图,一般是对pivot_table的可视化展出,由于这种展示效果比较好,也比较直观,所以想在这里稍微提一下。先给出heatmap中的例子,稍微作了下改动,展示的是6*6随机数矩阵:

import numpy as np

import seaborn as sns

random_set = np.random.randint(0,10,(6,6))

sns.heatmap(random_set)

在一开始我提到了,这个东西比较多的可以用在pivot_table里面,举个例子,我要展示几个旗舰店(A店、B店、C店)的商品(a、b、c、d、e)的销量。手头上没有数据,生成个随机数组凑合着用吧:

mall_all = ['mall_A', 'mall_B', 'mall_C']

com_all = ['commodity_a', 'commodity_b','commodity_c', 'commodity_d', 'commodity_e']

mall = np.random.choice(mall_all,(1,100))[0]

com = np.random.choice(com_all, (1,100))[0]

ammout = np.random.randint(1,10,(100))

index = np.linspace(1,100, 100)

df = pd.DataFrame({'mall':mall, 'com':com, 'amount':ammout}, index=index, columns=['mall', 'com', 'amount'])

df.head()

生成出来的数据大概是这个样子的:

随机原始数据

对其进行数据透视,以Mall为列,以Commodity为行,总计售出商品数量:

pivot_df = pd.pivot_table(df, index='com', columns='mall', values=['amount'], aggfunc=np.sum)

pivot_df

数据透视后

通过heatmap将其进行可视化转化:

sns.heatmap(pivot_df)

plt.xlabel('Mall')

plt.ylabel('Commodity')

plt.title('Mall_Commodity')

plt.show()

数据透视的可视化

使用heatmap的几个重要的参数,vmin和vmax可以控制整图的最小和最大值,cmap为整体配色方案,annot参数用来控制是否显示原始数据,fmt用来控制展示数据格式,linewidths和linecolor用来控制分割线的粗细以及颜色,cbar用来确认是否显示图例。下面将调整一下最大和最小值,并且打开annot,更改整体配色方案,将分割线加粗并设置为白色看看:

sns.heatmap(pivot_df, vmax=80, annot=True, linecolor='white', linewidths=0.5, cmap='RdBu_r')

plt.xlabel('Mall')

plt.ylabel('Commodity')

plt.title('Mall_Commodity')

plt.show()

数据透视的可视化_改

小结

想想,作图也是我在python学习里面的一个巨坑,因为命令和参数比较多,但是用的比较少,偏偏作图包还比较多,一直搞不太懂各种的逻辑,所以一直忘记。这一次经过给自己一个详细的总结之后,应该会好很多。

在Python作图里面,还有一类图比较常见,就是地图。之前虽然我也有利用plotly玩过,但感觉还是没有进到里面的细节。我会再用一篇文章详细讲述一下,敬请期待。

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

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

相关文章

联邦学习--数据攻击(2)

参考论文:See through Gradients: Image Batch Recovery via GradInversion(CVPR 2021 ) 源代码: 核心思想:解决了Deep Leakage from Gradients(NeurIPS 2019)中batch大于1效果无效的情况。 缺点…

python简单网络爬虫_【Python】 简单网络爬虫实现

介绍网络爬虫(英语:网络爬虫),也称为网络蜘蛛(蜘蛛)是一个Web机器人用于自动浏览万维网。其目的通常是为了编译web索引。\u2014\u2014维基百科web爬虫程序可以节省他们访问的页面,以便搜索引擎可以为用户搜索生成索引。一般来说,有两个步骤:1。获取网页内容2。准备获得web内容和…

对抗攻击(1)

本文是根据李宏毅老师在B站上的视频整理而来,视频地址为: https://www.bilibili.com/video/BV1n3411y7xD?p65 1 无目标和有目标攻击的区别 无目标攻击:攻击后的标签不确定,只要是和原始标签差别越大越好。 有目标攻击&#xff…

python爬虫隐藏ip_Python3网络爬虫之使用User Agent和代理IP隐藏身份

本文介绍了Python3网络爬虫之使用User Agent和代理IP隐藏身份,分享给大家,具体如下:运行平台:WindowsPython版本:Python3.xIDE:Sublime text3一、为何要设置User Agent有一些网站不喜欢被爬虫程序访问&…

对抗攻击(2)

本文将介绍一些经典的对抗攻击算法,未完待续…

乌班图快速创建ftp

需求:乌班图22.04安装配置ftp,然后配置一个用户,用户名deviceftp密码aaaa,并且设置端口为60021,并且限制在/app/deviceftp目录下,不允许匿名登录 在Ubuntu 22.04上安装和配置FTP服务器的步骤如下&#xff…

自注意力机制Self-attention(1)

目录: 自注意力机制Self-attention(1) 自注意力机制Self-attention(2) 本文是对李宏毅老师的课程进行了整理。 视频地址为: https://www.bilibili.com/video/BV1Wv411h7kN?p23 1 问题引入 问&#xff1a…

id门禁卡复制到手机_手机NFC有哪些功能?怎么设置手机门禁卡?别浪费了手机的NFC功能...

NFC功能早前都运用一些手机旗舰机中,随着手机技术的发展,现在有许多的手机都有NFC的功能,那手机中的NFC只是个摆设吗?NFC不仅仅有不依靠数据网络、安全稳定的特点,其实还有许多你不知道的功能!比如可以用来…

自注意力机制Self-attention(2)

目录: 自注意力机制Self-attention(1) 自注意力机制Self-attention(2) 1 内容回顾 以b2b^2b2的计算过程为例来说明: query: q1Wqa1q^1 W^q a^1q1Wqa1, q2Wqa2q^2 W^q a^2q2Wqa2, q3Wqa3q^3 …

python 打印xml文档树_Python构建XML树结构的方法示例

本文实例讲述了Python构建XML树结构的方法。分享给大家供大家参考,具体如下:1.构建XML元素#encodingutf-8from xml.etree import ElementTree as ETimport sysrootET.Element(color) #用Element类构建标签root.text(black) #设置元素内容treeET.ElementT…

风格迁移模型测试效果

1 模型简介 Selfie2anime模型:动漫风格,训练集主要针对人物头像;对应论文为:U-gat-it: Unsupervised generative attentional networks with adaptive layer-instance normalization for image-to-image translation Hayao模型&a…

黑白棋级别预测

1 当前成果 上图是对于AI级别为40级以下的对局结果统计图,横坐标是对于AI级与当前模型预测级别的差值,纵坐标是玩家的胜率。由图中可以看出,玩家胜率符合预测。当AI级别比预测级别高时,玩家胜率越来越低,反之玩家胜率会…

python3源代码是什么_如何用inspect查找python3源代码?

我们在学习的时候喜欢去写代码,或者进行代码的测试,在源代码的查看的进行的不多。大概很多是写完就放在一边,如果不是下次需要使用,也不会知道写的是否正确,还有没有可以修改或者改进的地方。所以,对于源代…

python元编程_python元编程详解(3)

今天转载一片非常精彩的文章供大家欣赏:参考文章链接.python开发者门户一个很好的学习python的网站,大家有时间可以多看看。下面正式开始今天的内容:在理解元类之前,你需要先掌握Python中的类。Python中类的概念借鉴于Smalltalk&a…

风格迁移--U-GAT-IT模型(ICLR 2020)

1 论文简介 论文题目: U-gat-it: Unsupervised generative attentional networks with adaptive layer-instance normalization for image-to-image translation 论文代码:https://github.com/taki0112/UGATIT 论文数据集:https://github.co…

毕业大论文到底怎么写?

本文主要写给本科生的,研究生也可以作为参考。 1 题目 题目建议控制在25字以内,能突出显示自己的主要工作即可。 “问题方法”式。比如:恶意流量检测的矩阵分解算法研究,问题是恶意流量检测,方法为矩阵分解&#xf…

麻雀优化算法_多种智能优化算法应用案例分享-附代码

1.智能优化算法应用:基于灰狼算法的Otsu图像多阈值分割智能优化算法应用:基于灰狼算法的Otsu图像多阈值分割-附代码_Jack旭的博客-CSDN博客​blog.csdn.net2.智能优化算法应用:基于灰狼算法的二维Otsu图像阈值分割智能优化算法应用&#xff1…

Transform机制(1)

本文是对李宏毅老师的课程进行了整理。 视频地址为: https://www.bilibili.com/video/BV1Wv411h7kN?p35 1 引入 Transform的应用场景 2 基本原理 Transform机制由编码器(Encoder)和解码器(Decoder)构成。 编码器…

python神经网络调节参数_神经网络进阶-用python实现一个完整的神经网络框架并在CIFAR10数据集上调参...

上一个博客中讲解了用python实现一个简单的两层神经网络,我们是把所有的网络层都直接写在了类中。但是作为一个神经网络框架,网络的结构应该是可以由使用者自定义的,这样一来也就不用为每个网络结构都重写所有代码,我们把每一层模…

CGCKD2021大会报告整理(1)--宽度学习

本文先把这次听陈俊龙老师的报告截图发出来,后面再来整理宽度学习的基本原理。