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

正文共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(atleadai)

原文发表时间:2018-05-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Small Code

【TensorFlow】理解 Estimators 和 Datasets

Google 在 2017 年 9 月 12 号的博文 Introduction to TensorFlow Datasets and Estimators 中...

1.3K8
来自专栏Code_iOS

OpenGL ES 2.0 (iOS)[06-1]:基础纹理

Texture 在 OpenGL 里面有很多种类,但在 ES 版本中就两种——Texture_2D + Texture_CubeMap;

1792
来自专栏诸葛青云的专栏

Python识别验证码!学会这步,百分之60的网站你基本都能识别了!

127是我们设定的阈值,像素值大于127被置成了0,小于127的被置成了255。处理后的图片变成了这样

980
来自专栏图形学与OpenGL

实验2 直线生成算法实现

理解基本图形元素光栅化的基本原理,掌握一种基本图形元素光栅化算法,利用OpenGL实现直线光栅化的DDA算法。

1132
来自专栏企鹅号快讯

C+实现神经网络之四—神经网络的预测和输入输出的解析

在上一篇的结尾提到了神经网络的预测函数predict(),说道predict调用了forward函数并进行了输出的解析,输出我们看起来比较方便的值。 神经网络的...

1936
来自专栏向治洪

自定义Interpolator

nterpolator这个东西很难进行翻译,直译过来的话是补间器的意思,它的主要作用是可以控制动画的变化速率,比如去实现一种非线性运动的动画效果。那么什么叫做非...

2097
来自专栏数据小魔方

R语言可视化——ggplot图表系统中的形状

今天跟大家分享ggplot图表系统中形状。 在ggplot函数系统中,形状是一类重要的映射属性,如同颜色一样,它可以被赋予给变量,当然也可以直接指定实际的形状类...

36810
来自专栏图形学与OpenGL

机械版CG 实验2 直线生成算法的实现

理解基本图形元素光栅化的基本原理,掌握一种基本图形元素光栅化算法,利用OpenGL实现直线光栅化的DDA算法。

1742
来自专栏CSDN技术头条

数据可视化的10个关键术语

Format 交互方式 Interactive visualisations allow you to modify, manipulate and explo...

1917
来自专栏落影的专栏

OpenGL光照学习以及OpenGL4环境

前言 最近稍有空闲,整理下之前学习光照的笔记,以及在配置OpenGL4环境过程中遇到的问题。 光照 1、模拟灯光 模拟灯光:通过GPU来计算场景中的几何图...

4007

扫码关注云+社区