数据分析中的可视化-常见图形

五月两场 | NVIDIA DLI 深度学习入门课程

5月19日/5月26日一天密集式学习  快速带你入门 阅读全文 >


正文共2365个字,9张图,预计阅读时间11分钟。


工具:matplotlib,pandas


import matplotlib.pyplot as plt
import pandas as pd
from pandas import Series, DataFrame


图的创建

(1)单个图的绘制


创建图对象:  fig = plt.figure() # 设置figsize参数可以确保图片保存到磁盘时具备一定的大小和纵横比.


创建轴对象: axis = fig.add_subplot()


plt.gcf()可以获得当前的Figure引用.但是更常用的是获取axis对象,然后调用绘图成员函数完成绘图:


axis.plot(data, linestyle='--', color='k')
matplotlib中的linestyle, color等设置与matlab基本相同.


(2)创建多图


可以用axis = fig.add_subplot(m,n,k)的方式定义增加的子图。但是更简单的方法是:
fig, axes = plt.subplots(m,n) # m行n列的多图矩阵;


这句命令可以创建一个新的figure,并且axes就是一个含有已创建的subplot对象的Numpy数组,可以用调用数组元素的方式对subplot进行索引。还可以指定subplots的其他参数,例如使得子图之间具有相同的x轴或者y轴(否则matplotlib会自动缩放各子图的坐标轴界限)


(3)调整子图的间距


利用subplots_adjust函数可以调整各个子图之间的间距和图像大小。它的定义如下:
subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)

附上例子:


1import matplotlib.pyplot as plt
2import numpy as np
3fig, axes = plt.subplots(2,2,sharex=True, sharey=True) # 子图为2行2列,设置子图具有相同的x轴和y轴
4for i in range(2):
5for j in range(2):
6axes[i,j].hist(np.random.randn(500),bins=50, color='k',alpha=0.5)
7plt.subplots_adjust(wspace=0, hspace=0) # 将子图之间的间距收缩到了0


设置操作axis内部函数
设置刻度set_xticks([ticks_list])或者set_yticks([ticks_list])
设置刻度的描述文字set_xticklabels([ticks_label_list])或者set_yticklabels([ticks_label_list])
设置标题set_title('title_string')
设置坐标轴文字set_xlabel('xlabel_string')或者set_ylabel('ylabel_string')
设置图例plt.legend(loc='best')


image.png


(4)设置刻度、标签和图例


这几个操作都需要调用axis对象的相关函数实现:


设置操作axis内部函数
设置刻度set_xticks([ticks_list])或者set_yticks([ticks_list])
设置刻度的描述文字set_xticklabels([ticks_label_list])或者set_yticklabels([ticks_label_list])
设置标题set_title('title_string')
设置坐标轴文字set_xlabel('xlabel_string')或者set_ylabel('ylabel_string')
设置图例plt.legend(loc='best')


(5)保存图像


用plt.savefig()可以保存图像。


plt.savefig('test.png', bbox_inches='tight')


示例代码:


 1import matplotlib.pyplot as plt
2import numpy as np
3import pandas as pd
4fig = plt.figure(1)
5ax = fig.add_subplot(1,1,1)
6data_one = np.random.randn(500).cumsum()
7data_two = np.random.randn(500).cumsum()
8data_three = np.random.randn(500).cumsum()
9time = pd.date_range('2007-01-28', periods=500, freq='D')
10ax.plot(time, data_one,'r--', label='red')
11ax.plot(time, data_two, 'b.', label='blue')
12ax.plot(time, data_three, 'k-', drawstyle='steps-post', label='steps-post')
13ticks = ax.set_xticks(['2007-01-28', '2007-10-01', '2008-03-01'])
14labels = ax.set_xticklabels(['zero', 'one','two'])
15ax.set_title('test of multi-linestyles and xticks')
16plt.legend(loc='best')


image.png


数据分析中的常用图形:
  • 线型图:
    除了matplotlib, pandas的Series和DataFrame都具有许多根据其自身数据组织特点来创建标准绘图的高级绘图方法。


1import matplotlib.pyplot as plt
2import numpy as np
3import pandas as pd
4from pandas import Series, DataFrame
5s=Series(np.random.randn(100), index=np.arange(0,100))
6s.plot()
7df=DataFrame(np.random.randn(10,4).cumsum(0), columns=['A','B','C','D'], index=np.arange(0,100,10))
8df.plot()


image.png


image.png


  • 柱形图:
    柱状图绘制的是x坐标对应的y取值,在plot代码中加入kind=‘bar’就可以得到垂直柱状图,‘barh’则是水平柱状图。



  • 直方图:
    直方图histogram是一种可以对值的频率进行离散化显示的柱状图。可以通过调用Series或者DataFrame的hist函数得到。数据点被分割到离散的,间隔均匀的面元中,绘制的是各个面元中数据点的数量。其中参数bins表示面元的单位,可以用normed设置是否进行归一化。



  • 密度图:
    密度图经常和直方图绘制在一起。它是通过计算可能会产生观测数据的连续概率分布的估计产生的。密度图也被称为KDE(kernel density estimate,核密度估计)。调用plot时在kind设置为‘kde’就可以生成密度图。



  • 散布图:
    散布图是观察两个一维数据序列之间关系的有效手段。散布图也被成为散布图矩阵,它还支持在对角线上放置各个序列的直方图或者密度图。


附上代码:


 1import pandas as pd
2from pandas import Series, DataFrame
3import matplotlib.pyplot as plt
4import numpy as np
5comp1 = np.random.normal(0,1,size=200)
6comp2 = np.random.normal(10,2,size=200)
7values = Series(np.concatenate([comp1, comp2]))
8data = Series(np.random.rand(16),index=list('abcdefghijklmnop'))
9combined = {'comp1':comp1, 'comp2':comp2}
10pd_combined = DataFrame(combined)
11fig = plt.figure()
12ax1 = fig.add_subplot(2,1,1)
13values.hist(bins=100, alpha=0.3, color='k', normed=True)
14values.plot(kind='kde',style='k--')
15ax2 = fig.add_subplot(2,1,2)
16plt.scatter(comp1,comp2)
17fig1, axes1 = plt.subplots(2,1)
18data.plot(kind='bar', ax=axes1[0], color='k', alpha=0.7)
19data.plot(kind='barh', ax=axes1[1], color='b', alpha=0.7)
20pd_combined = DataFrame(combined)
21pd.scatter_matrix(pd_combined, diagonal='kde')
22pd.scatter_matrix(pd_combined, diagonal='hist')


柱状图:

image.png


图中(上)是直方图和密度图, (下)是散点图:

image.png


散布图, 对角线是数据的密度图:

image.png


散布图, 对角线是直方图:

image.png


原文链接:https://www.jianshu.com/p/7aa4b7639515


查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org


请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值