前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据分析中的可视化-常见图形

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

作者头像
用户1332428
发布2018-07-26 16:36:47
1.3K0
发布2018-07-26 16:36:47
举报
文章被收录于专栏:人工智能LeadAI人工智能LeadAI

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

附上例子:

代码语言:javascript
复制
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')

示例代码:

代码语言:javascript
复制
 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都具有许多根据其自身数据组织特点来创建标准绘图的高级绘图方法。
代码语言:javascript
复制
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’就可以生成密度图。
  • 散布图: 散布图是观察两个一维数据序列之间关系的有效手段。散布图也被成为散布图矩阵,它还支持在对角线上放置各个序列的直方图或者密度图。

附上代码:

代码语言:javascript
复制
 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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能LeadAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档