Python数据可视化

Seaborn是一个很好用的python数据可视化包。汇总一下之前做数据可视化时的一些注意事项和技巧。

Seaborn为什么有的数据可视化给人感觉起来很好看很舒服,其实涉及到Seaborn的一些细节操作问题,这里收集了我所关注到的注意事项。文章结构如下:Seaborn依赖的数据结构MatplotlibHeatplotJointplotViolinplot组合图(plt.plot+sns.heatplot)(1) 组合图的框架(2) 子图配置——heatplot(3) 子图配置——ax.plot(4) 其他1. Seaborn依赖的数据结构在使用Seaborn之前,需要强调和注意的是Seaborn依赖的数据结构。pandas的dataframe可以很方便地兼容Seaborn的数据输入。下面简单介绍从csv文件导入dataframe数据以及一些相关的处理:import pandas as pddataframe = pd.read_csv(filedir, usecols=[colsname]) # read data from csv filedataframe.drop() dataframe.iloc[]这里需要说明的是,对于dataframe数据,习惯上提前给列命名,方便之后Seaborn的使用,当然也可以在Seaborn中重新命名。2. MatplotlibMatplotlib可以很好的兼容Seaborn,可以通过Matplotlib对图片尺寸进行修改、ticklable及title等编辑、保存图片以及多个Seaborn子图的排列方式和尺寸进行编辑,同时,也可以实现Seaborn和Matplotlib共同作图。(1) 图片尺寸# 方法一import matplotlib.pyplot as pltf, ax = plt.subplots(figsize=(11, 9))# 方法二import pylabpylab.rcParams['figure.figsize'] = (12.0,7.0) # 显示大小(2) 图片标注及字体大小import matplotlib.pyplot as pltplt.xticks(fontsize=13)plt.yticks(fontsize=13)plt.xlim([0,4000])plt.legend(['line1,'line2','line3'],fontsize=17)plt.xlabel('x',fontsize=17)plt.ylabel('y',fontsize=17)plt.title('title', fontsize=20)(3) 保存图片plt.savefig(filename+".png",format='png', bbox_inches='tight', transparent=True)3. Heatplotcmap = sns.diverging_palette(220, 10, as_cmap=True)rc = {'font.size': 15, 'xtick.labelsize': 15, 'ytick.labelsize': 15}sns.set(rc=rc)# Draw the heatmap with the mask and correct aspect ratioheatplt = sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0, square=True, linewidths=.5, cbar_kws={"shrink": .5}, annot=True, fmt=".2f")

Heatmap.png其中,cmap可以定制heatmap的颜色,seaborn的heatmap当中的fmt参数可以修改显示数字的位数,例如".2f"表示float类型保留小数点后两位。4. Jointplotsns.jointplot(x=x, y=y, kind="hex",color='r')

Jointplot.png5. Violinplotvio = sns.violinplot(data=Error, orient="v",linewidth=0.6)for i in range(4): plt.vlines(1.5+2*(i), -0.35, 0.35, colors = "c", linestyles = "dashed")

Violinplot6. 组合图很多时候在描述一个问题时需要对不同的图进行组合以达到表现的目的,例如将plt的曲线图和seaborn的heatplot组合起来,并且横轴相对应,标注要清楚可见。

组合图结构这个时候需要根据以下步骤有条不紊地对图进行设置。(1) 组合图的框架首先确认你的图片当中包含几块,例如如果包含两块,那么分别的尺寸以及比例是怎样的。fig = plt.figure(figsize=(xSize, ySize))gs = gridspec.GridSpec(2, 1, height_ratios=[3, 1])比如,如上代码是做了一个两行一列的结构,并且纵向比例是3:1,整个图片的大小是(xSize, ySize)。ax0 = plt.subplot(gs[0])ax1 = plt.subplot(gs[1])而subplot使用了gs为参数,确定了子图的句柄,可以通过对ax0或者ax1进行操作,以达到不同位置显示不同的图像的目的。(2) 子图配置——heatplot在子图当中,我们首先对heatplot进行操作,heatplt = sns.heatmap(data, linewidths=0, ax=ax1, cmap="YlGnBu", annot=False, yticklabels=['data'], xticklabels=xtick, cbar=False)注意点-1:因为考虑到需要将heatplot的横轴与plt的曲线图横轴对齐,所以关闭图例显示,当然也可以将图例与横轴平行放置,但是为了美观,这里我关掉了cbar的显示。注意点-2:对于横轴较为密集的情况下,例如是一个很长的时间段,需要对横轴进行间隔标注显示,这样给人看起来很清楚,不会因为密密麻麻挤在一起导致看不清的问题。所以使用如下的配置:import matplotlib.ticker as tickerax1.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))tick_spacing是可以修改的参数,顾名思义,是标注间隔的意思,这里需要注意,tick_spacing需要和给定的标注序列统一,举个例子,比如现在需要给横轴标注1到100,共100个数字,但是由于太过密集,需要用到tick_spacing参数进行稀疏标注,那么在给heatplot的xticklabels传递参数时,就必须根据tick_spacing对序列进行系数处理,亲测如下代码无误:(仅限配置heatplot)SliceStart = 0SliceEnd = len(data)tick_spacing = 10xtick=range(SliceStart - tick_spacing, SliceEnd, tick_spacing)需要注意的是必须减去tick_spacing,否则标注会错位。(3) 子图配置——ax.plot这里是曲线图部分,不做过多描述,有一点需要注意的就是,因为两个子图共用一个横坐标,所以第一行的图(也就是plot)的横坐标标注可以隐藏不显示,通过如下代码实现:plt.tick_params( axis='x', # changes apply to the x-axis which='both', # both major and minor ticks are affected bottom=False, # ticks along the bottom edge are off top=False, # ticks along the top edge are off labelbottom=False) # labels along the bottom edge are off(4) 其他为了确保两个图的横坐标对齐,每个子图配置结束后添加一行。plt.xlim([0, LenData])(5) 代码from matplotlib import gridspecimport numpy as npimport seaborn as snsimport matplotlib.pyplot as pltimport matplotlib.ticker as tickerimport pandas as pdimport numpyfrom pandas import Seriesdef drawHeat_plot(line, data, xSize, ySize, xtick, tick_spacing, cols='sin', filename='HeatPlot', title='Demo', yticklabel=['Value']): textFS = 80 titleFS = 100 LenData = len(line) rc = {'font.size': textFS, 'xtick.labelsize': textFS, 'ytick.labelsize': textFS, } sns.set(rc=rc) size = np.shape(data) fig = plt.figure(figsize=(xSize, ySize)) gs = gridspec.GridSpec(2, 1, height_ratios=[2, 1]) ax1 = plt.subplot(gs[1]) heatplt = sns.heatmap(data, linewidths=0, ax=ax1, cmap="YlGnBu", annot=False, xticklabels=xtick, cbar=False, yticklabels=yticklabel) plt.xticks(fontsize=textFS) plt.yticks(fontsize=textFS) ax1.set_ylabel('Value', fontsize=textFS) ax1.set_xlabel('Time step', fontsize=textFS) plt.xlim([0, LenData]) ax1.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing)) ax0 = plt.subplot(gs[0]) ax0.plot(line, linewidth=3) ax0.set_ylabel('Value', fontsize=textFS) plt.tick_params( axis='x', # changes apply to the x-axis which='both', # both major and minor ticks are affected bottom=False, # ticks along the bottom edge are off top=False, # ticks along the top edge are off labelbottom=False) # labels along the bottom edge are off ax0.set_title(title, fontsize=titleFS) ax0.grid(linestyle='--', linewidth='0.5', color='black') plt.legend([cols + ' Data'], fontsize=textFS) plt.xlim([0, LenData]) fig = heatplt.get_figure() fig.savefig(filename + ".png", format='png', bbox_inches='tight', transparent=True)Demo数据及参数:line = np.sin([3.14*i/20 for i in range(0,100)])data = np.sin([3.14*i/20 for i in range(0,100)])line = np.reshape(line,[100,])data = np.reshape(data,[1,100])xSize = 150ySize = 30SliceStart = 0SliceEnd = 100TickSpace = 10运行代码:drawHeat_plot(line, data, xSize, ySize, range(SliceStart - TickSpace, SliceEnd, TickSpace), tick_spacing=TickSpace, cols='sin', filename='HeatPlot', title='Demo')运行结果:

Demo总结:数据可视化是一门学问,如何在一张有限的图上清楚有效地展示图片想要说明的信息。一方面,根据想要突出数据的哪方面的信息,选择合适类型的图型;另一方面,给读图的人一种清楚明了的感觉,需要对可视化图的细节——例如排布、字体、字体大小、图例、颜色等等各个方面进行调节。这样,做出figure才既能表达作图者想要表达的信息,也能让读图者清楚清爽地领会数据呈现出来的信息。之后笔者接触到其他类型的可视化以及相关注意事项时会继续在这篇文章中书写。如有意见和建议请各位提出~

(0)

相关推荐

  • 【量化】seaborn在金融数据可视化中的应用

    <python与量化投资从基础到实战>学习笔记tips:如果没时间阅读,可收藏本文或者直接滑动到文末获取本项目代码下载链接 seaborn库是以matplotlib为基础,同时支持nump ...

  • python——画图之seaborn学习——折线图和柱形图的组合。

    2019-04-15 19:06:01  随风而逝* 码龄3年 关注 1.现在想把两列数据通过折线图和柱形图组合到一张图上来表示,类似下图: 2.具体代码如下: import seaborn as s ...

  • 六种数据分析的基本可视化

    Matplotlib实用指南 数据可视化是数据科学中非常重要的一部分.在探索和理解数据时非常有用.在某些情况下,可视化在传达信息方面比普通数字要好得多. 使用数据可视化技术可以轻松发现变量之间的关系, ...

  • Py之seaborn:seaborn库的简介、安装、使用方法之详细攻略

    Py之seaborn:seaborn库的简介.安装.使用方法之详细攻略 相关文章 Py之seaborn:seaborn库的简介.安装.使用方法之详细攻略 Py之seaborn:数据可视化seaborn ...

  • 画出这张官方神图,你的Matplotlib就毕业了!

    大家好,我是早起. 在昨天的文章人人都能看懂的Matplotlib绘图原理中,我们对Matplotlib的绘图机制进行了讲解,在弄清楚plt.xxxx和ax.xxxx中plt和ax区别之后,本文继续讲 ...

  • 数据分析入门系列教程-常用图表

    作者:周萝卜 来源:萝卜大杂烩 今天我们来学习下数据可视化,其实在前面的章节中,我们也接触到了一些数据可视化的知识,在分析数据集的时候,有效的可视化图表,可以帮助我们更好的了解数据. 常用的可视化图表 ...

  • 如何利用Seaborn绘制热力图?

    如何利用Seaborn绘制热力图? 这是本学期在大数据哲学与社会科学实验室做的第八次分享了. 第一次分享的是: 如何利用"wordcloud+jieba"制作中文词云? 第二次分享 ...

  • 深度盘点 | 史上最全python数据可视化库

    有多少同学和小编一样,学习python的主要目的,是为了实现数据可视化?

  • (2条消息) 数据可视化技术:python数据可视化工具库汇总(共21个)

    Python数据可视化库 在数据分析中最好展示数据的方式就是形象地绘制对应的图像,让人能够更好地理解数据.什么样的数据.什么样的场景用什么样的图表都是有一定的规定的.(这个以后写一篇博客来记录一下.当 ...

  • Python数据可视化的完整版操作指南(建议收藏)

    让我们看一下使用Python进行数据可视化的主要库以及可以使用它们完成的所有类型的图表.我们还将看到建议在每种情况下使用哪个库以及每个库的独特功能. 我们将从最基本的可视化开始,直接查看数据,然后继续 ...

  • Python数据可视化:数据分析中的6个常用图

    折线图: 折线图用于显示数据在一个连续的时间间隔或者时间跨度上的变化,它的特点是反映事物随时间或有序类别而变化的趋势.示例图如下: 折线图应用场景: 折线图适合X轴是一个连续递增或递减的,对于没有规律 ...

  • Python数据可视化:一张很漂亮的商业图

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于Lin王发林,作者:WangFalin Python数据分析: ...

  • Python数据可视化库有哪些?Python入门

    现如今,数据已经渗透到每一个行业和业务职能领域,成为重要的生产因素,正因如此数据分析岗位变得异常火爆.而Python作为数据分析的首选语言,它不仅有着独特的优势,还为数据分析提供了很多库,那么常见的P ...

  • 编程干货|这么多Python数据可视化库,你最喜欢哪个?

    而这个问题就正好涉及到了Python的数据可视化了. 很多同学学习Python的主要目的就是为了实现数据可视化. 而如何将我们的数据的特征更好的.更直观的展示出来,Python给出了很多解决方案. 今 ...

  • 盘点12个Python数据可视化库,通吃任何领域

    大家普遍第一次接触到的Python数据可视化库基本上都是Matplotlib.Python还有很多数据可视化库,本文盘点了12款常用的Python数据可视化库,挑选适合自己业务的那一款吧! 深入学习P ...

  • python|数据可视化之matplotlib画图

    前言相信大家在现阶段被大数据时代带来大量的数据和一些文章而不能清楚直观地了解其中真正关键的数据,所以小编给大家带来一种简单的数据可视化的解决方案-利用matplotlib函数来制作简单的直方图.运行环 ...

  • Python数据可视化库seaborn的使用总结

    seaborn是python中的一个非常强大的数据可视化库,它集成了matplotlib,下图为seaborn的官网,如果遇到疑惑的地方可以到官网查看.http://seaborn.pydata.or ...