一、数据可视化概述

数据可视化是在整个数据分析非常重要的一个辅助工具,可以清晰的理解数据,从而调整我们的分析方法。

- 能将数据进行可视化,更直观的呈现

- 使数据更加客观、更具说服力

例如下面两个图为数字展示和图形展示:

二、python中的数据可视化(Matplotlib)

数据可视化与python语言也有相应的结合,这就是今天我们要说的Matplotlib.

Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。 Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。

Matplotlib试图让简单的事情变得更简b单,让无法实现的事情变得可能实现。 只需几行代码即可生成绘图,直方图,折线图,条形图,错误图,散点图等。

为了简单绘图,pyplot模块提供了类似于MATLAB的界面,特别是与IPython结合使用时。 对于高级用户,您可以通过面向对象的界面或MATLAB用户熟悉的一组函数完全控制线条样式,字体属性,轴属性等。

在使用Matplotlib之前,我们需要有一些准备的步骤,因为Matplotlib包不在python原生包含范围之内

1. Python环境是使用anaconda安装的并创建了虚拟环境。

> 注意:Windows下切换环境,不需要加source。

2. 如果是直接在官网下载并安装的Python,可以直接`pip install Matplotlib`

三. 常见图形种类及意义

* 折线图:以折线的上升或下降来表示统计数量的增减变化的统计图

**特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)**

* 散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

**特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)**

* 柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中。

**特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)**

* 饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类。

**特点:分类数据的占比情况(占比)**

四. Matplotlib画图的简单实现

```python?

# 导入模块

import matplotlib.pyplot as plt

# 在jupyter中执行的时候显示图片

%matplotlib inline

# 传入x和y, 通过plot画图

plt.plot([1, 0, 9], [4, 5, 6])

# 在执行程序的时候展示图形

plt.show()

```

五. 对Matplotlib图像结构的认识

通常情况下,我们可以将一张Matplotlib图像分成三层结构:

1. 第一层是底层的容器层,主要包括Canvas、Figure、Axes;

2. 第二层是辅助显示层,主要包括axis、spines、grid、legend、title等;

3. 第三层为图像层,即通过plot、scatter等方法绘制的图像。

六. 折线图

6.1 折线图的绘制

```python

from matplotlib import pyplot as plt

x = range(1,8) # x轴的位置

y = [17, 17, 18, 15, 11, 11, 13]

# 传入x和y, 通过plot画折线图

plt.plot(x,y)

plt.show()

```

6.2 折线的颜色和形状设置

```python

from matplotlib import pyplot as plt

x = range(1,8) # x轴的位置

y = [17, 17, 18, 15, 11, 11, 13]

# 传入x和y, 通过plot画折线图

plt.plot(x, y, color='red',alpha=0.5,linestyle='--',linewidth=3)

plt.show()

'''基础属性设置

color='red' : 折线的颜色

alpha=0.5 : 折线的透明度(0-1)

linestyle='--' : 折线的样式

linewidth=3 : 折线的宽度

'''

'''线的样式

- 实线(solid)

-- 短线(dashed)

-. 短点相间线(dashdot)

: 虚点线(dotted)

'''

```

6.3 折点样式

```python

from matplotlib import pyplot as plt

x = range(1,8) # x轴的位置

y = [17, 17, 18, 15, 11, 11, 13]

# 传入x和y, 通过plot画折线图

plt.plot(x, y, marker='o',color = 'red',markersize='20',markeredgecolor='g',markeredgewidth = 5)

plt.show()

```

**折点形状选择:**

| character | description |

| --------- | --------------------- |

| '-' | solid line style |

| '--' | dashed line style |

| '-.' | dash-dot line style |

| ':' | dotted line style |

| '.' | point marker |

| ',' | pixel marker |

| 'o' | circle marker |

| 'v' | triangle_down marker |

| '^' | triangle_up marker |

| '<' | triangle_left marker |

| '>' | triangle_right marker |

| '1' | tri_down marker |

| '2' | tri_up marker |

| '3' | tri_left marker |

| '4' | tri_right marker |

| 's' | square marker |

| 'p' | pentagon marker |

| '*' | star marker |

| 'h' | hexagon1 marker |

| 'H' | hexagon2 marker |

| '+' | plus marker |

| 'x' | x marker |

| 'D' | diamond marker |

| 'd' | thin_diamond marker |

| '\|' | vline marker |

| '_' | hline marker |

6.4 设置的图片的大小和保存

```python

from matplotlib import pyplot as plt

import random

x = range(2,26,2) # x轴的位置

y = [random.randint(15, 30) for i in x]

# 设置图片的大小

'''

figsize:指定figure的宽和高,单位为英寸;

dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 ? ? ?1英寸等于2.5cm,A4纸是 21*30cm的纸张?

'''

# 根据画布对象

plt.figure(figsize=(20,8),dpi=80)

plt.plot(x,y) # 传入x和y, 通过plot画图

# plt.show()

# 保存(注意: 要放在绘制的下面,并且plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。)

plt.savefig('./t1.png')

# 图片的格式也可以保存为svg这种矢量图格式,这种矢量图放在网页中放大后不会有锯齿

# plt.savefig('./t1.svg')

```

6.5 绘制x轴和y轴的刻度

```python

from matplotlib import pyplot as plt

x = range(2,26,2) # x轴的位置

y = [random.randint(15, 30) for i in x]

plt.figure(figsize=(20,8),dpi=80)

# 设置x轴的刻度

# plt.xticks(x)

# plt.xticks(range(1,25))

# 设置y轴的刻度

# plt.yticks(y)

# plt.yticks(range(min(y),max(y)+1))

# 构造x轴刻度标签

x_ticks_label = ["{}:00".format(i) for i in x]

#rotation = 45 让字旋转45度

plt.xticks(x,x_ticks_label,rotation = 45)

# 设置y轴的刻度标签

y_ticks_label = ["{}℃".format(i) for i in range(min(y),max(y)+1)]

plt.yticks(range(min(y),max(y)+1),y_ticks_label)

plt.plot(x,y)

plt.show()

```

6.6 设置显示中文

```python

# matplotlib只显示英文,无法显示中文,需要修改matplotlib的默认字体

# 通过matplotlib下的font_manager可以解决

# 两个小时内的每分钟跳动变化

from matplotlib import pyplot as plt

import matplotlib

import random

x = range(0,120)

y = [random.randint(10,30) for i in range(120)]

plt.figure(figsize=(20,8),dpi=80)

plt.plot(x,y)

# 加坐标轴信息

'''另外一种写法

查看Linux、Mac下支持的字体

终端执行: fc-list

查看支持的中文(冒号前面有空格) fc-list :lang=zh

查看Windows下的字体:“C:\Windows\Fonts\”

可以自己下载字体文件(xxx.ttf),然后双击安装即可

# my_font = font_manager.FontProperties(fname='/System/Library/Fonts/PingFang.ttc',size=18)

# plt.ylabel("天气",fontproperties=my_font)

'''

#rotation将字体旋转45度

plt.xlabel('时间',rotation=45)

from matplotlib import font_manager

my_font = font_manager.FontProperties(fname='/System/Library/Fonts/PingFang.ttc',size=18)

plt.ylabel("次数",fontproperties=my_font)

# 设置标题

plt.title('每分钟跳动次数',fontproperties=my_font,color='red')

plt.show()

```

6.7 一图多线

```python

# 假设大家在30岁的时候,根据自己的实际情况,统计出来你和你同事各自从11岁到30岁每年交的男/女朋友的数量如列表y1和y2,请在一个图中绘制出该数据的折线图,从而分析每年交朋友的数量走势。

y1 = [1,0,1,1,2,4,3,4,4,5,6,5,4,3,3,1,1,1,1,1]

y2 = [1,0,3,1,2,2,3,4,3,2,1,2,1,1,1,1,1,1,1,1]

x = range(11,31)

# 设置图形

plt.figure(figsize=(20,8),dpi=80)

plt.plot(x,y1,color='red',label='自己')

plt.plot(x,y2,color='blue',label='同事')

# 设置x轴刻度

xtick_labels = ['{}岁'.format(i) for i in x]

my_font = font_manager.FontProperties(fname='/System/Library/Fonts/PingFang.ttc',size=18)

plt.xticks(x,xtick_labels,fontproperties=my_font,rotation=45)

# 绘制网格(网格也是可以设置线的样式)

#alpha=0.4 设置透明度

plt.grid(alpha=0.4)

# 添加图例(注意:只有在这里需要添加prop参数是显示中文,其他的都用fontproperties)

# 设置位置loc : upper left、 lower left、 center left、 upper center

plt.legend(prop=my_font,loc='upper right')

#展示

plt.show()

```

七. 绘制散点图

```python

'''题干

3月份每天最高气温

a = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]

'''

from matplotlib import pyplot as plt

from matplotlib import font_manager

import numpy as np

y = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]

x = range(1,32)

# 设置图形大小

plt.figure(figsize=(20,8),dpi=80)

# 使用scatter绘制散点图

size = np.random.randint(0, 100, 31) # 设置大小

plt.scatter(x,y,label= '3月份',alpha=0.5,s=size,c='red')

# 调整x轴的刻度

my_font = font_manager.FontProperties(fname='/System/Library/Fonts/PingFang.ttc',size=10)

_xticks_labels = ['3月{}日'.format(i) for i in x]

plt.xticks(x[::3],_xticks_labels[::3],fontproperties=my_font,rotation=45)

_yticks_labels = ['{}°C'.format(i) for i in range(min(y),max(y)+1)]

plt.yticks(range(min(y),max(y)+1),_yticks_labels)

plt.xlabel('日期',fontproperties=my_font)

plt.ylabel('温度',fontproperties=my_font)

# 图例

plt.legend(prop=my_font)

plt.show()

```

八. 绘制条形图

```python

'''

假设你获取到了2019年内地电影票房前20的电影(列表a)和电影票房数据(列表b),请展示该数据

a = ['流浪地球','疯狂的外星人','飞驰人生','大黄蜂','熊出没·原始时代','新喜剧之王']

b = ['38.13','19.85','14.89','11.36','6.47','5.93']

'''

from matplotlib import pyplot as plt

from matplotlib import font_manager

a = ['流浪地球','疯狂的外星人','飞驰人生','大黄蜂','熊出没·原始时代','新喜剧之王']

b = ['38.13','19.85','14.89','11.36','6.47','5.93']

# b =[38.13,19.85,14.89,11.36,6.47,5.93]

my_font = font_manager.FontProperties(fname='/System/Library/Fonts/PingFang.ttc',size=10)

plt.figure(figsize=(20,8),dpi=80)

# 绘制条形图

rects = plt.bar(a,[float(i) for i in b],width=0.3,color=['r','g','b','r','g','b'])

plt.xticks(range(len(a)),a,fontproperties=my_font)

plt.yticks(range(0,41,5),range(0,41,5))

# 在条形图上加标注(水平居中)

for rect in rects:

height = rect.get_height()

plt.text(rect.get_x() + rect.get_width() / 2, height+0.3, str(height),ha="center")

plt.show()

```

**横向条形图**

```python

# 横向柱状图

from matplotlib import pyplot as plt

from matplotlib import font_manager

my_font = font_manager.FontProperties(fname='/System/Library/Fonts/PingFang.ttc',size=10)

a = ['流浪地球','疯狂的外星人','飞驰人生','大黄蜂','熊出没·原始时代','新喜剧之王']

b = [38.13,19.85,14.89,11.36,6.47,5.93]

plt.figure(figsize=(20,8),dpi=80)

# 绘制条形图的方法

'''

height=0.3 条形的宽度

'''

# 绘制横向的条形图

# plt.bar(y,x,width = 0.4)

rects = plt.barh(range(len(a)),b,height=0.5,color='r')

plt.yticks(range(len(a)),a,fontproperties=my_font,rotation=45)

# 在条形图上加标注(水平居中)

for rect in rects:

# print(rect.get_x())

width = rect.get_width()

plt.text(width, rect.get_y()+0.5/2, str(width),va="center")

plt.show()

```

**并列和罗列条形图**

```python

import matplotlib.pyplot as plt

import numpy as np

index = np.arange(4)

BJ = [50,55,53,60]

Sh = [44,66,55,41]

# 并列

plt.bar(index,BJ,width=0.3)

plt.bar(index+0.3,Sh,width=0.3,color='green')

plt.xticks(index+0.3/2,index)

# 罗列

# plt.bar(index,Sh,bottom=BJ,width=0.3,color='green')

plt.show()

```

九. 饼状图

```python

import matplotlib.pyplot as plt

import matplotlib

from matplotlib import font_manager

my_font = font_manager.FontProperties(fname='/System/Library/Fonts/PingFang.ttc',size=10)

label_list = ["第一部分", "第二部分", "第三部分"] # 各部分标签

size = [55, 35, 10] # 各部分大小

color = ["red", "green", "blue"] # 各部分颜色

explode = [0, 0.05, 0] # 各部分突出值

"""

绘制饼图

x : (每一块)的比例,如果sum(x)>1,会将多出的部分进行均分;

explode: (每一块)离开中心距离

labels: (每一块)饼图外侧显示的说明文字;

labeldistance:设置标签文本距圆心位置,1.1表示1.1倍半径

autopct:控制饼图内百分比设置

shadow:设置是否有阴影

startangle:起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起;

pctdistance:类似于labeldistance,指定autopct的位置刻度,默认值为0.6;

返回值:

patches : matplotlib.patches.Wedge列表(扇形实例)

l_text:label matplotlib.text.Text列表(标签实例)

p_text:label matplotlib.text.Text列表(百分比标签实例)

"""

plt.figure(figsize=(20, 8), dpi=100)

patches, l_text, p_text = plt.pie(size,

explode=explode,

colors=color,

labels=label_list,

labeldistance=1.1,

autopct="%1.1f%%",

shadow=False,

startangle=90,

pctdistance=0.6)

for t in l_text:

print(dir(t))

t.set_fontproperties(my_font)

for t in p_text:

t.set_size(18)

for i in patches:

i.set_color('pink')

break

plt.show()

```

十.总结

使用**Matplotlib**进行数据可视化十分方便,从而使数据更加直观的展现.我们通过以上几个直观绘制常见图形会发现**根据不同需求选择出对的图形展示**,是我们核心使用**Matplotlib**进行数据可视化的重中之重.而核心的Api使用起来又十分便捷.下方图片整理了不同图层结构下的**Matplotlib**进行了一个很好的总结.

python显示数据长度_Python数据分析之初识可视化相关推荐

  1. python显示数据长度_python – 获取CSV的长度以显示进度

    我正在处理大量CSV文件,每个文件都包含大量行.我的目标是逐行获取数据并使用 Python将其写入数据库.但是,由于存在大量数据,我希望能够跟踪已写入的数据量.为此,我计算了排队的文件数量,并在每次文 ...

  2. python显示数据长度_Python使用s来检测数据的长度

    why we only need to take a size of 5 to get the lenght, content_type informations ? 因为很明显这就是协议设计的方式. ...

  3. matlab画多组数据折线图_Python数据分析之初识可视化

    一.数据可视化概述 数据可视化是在整个数据分析非常重要的一个辅助工具,可以清晰的理解数据,从而调整我们的分析方法. - 能将数据进行可视化,更直观的呈现 - 使数据更加客观.更具说服力 例如下面两个图 ...

  4. mpandroidchart 设置x轴数据_Python数据分析之初识可视化

    一.数据可视化概述 数据可视化是在整个数据分析非常重要的一个辅助工具,可以清晰的理解数据,从而调整我们的分析方法. - 能将数据进行可视化,更直观的呈现 - 使数据更加客观.更具说服力 例如下面两个图 ...

  5. python分析数据走势_Python数据分析及可视化实例之个股走势预测(26)

    1.项目背景: 仅仅用来练手,个股走势如果真预测准确了,都就改行当操盘手了,哈哈! 但话又说回来,如果把数据曲线特征提取出来,再进行对比异常判断,也是可以的. 数据源,请关注微信公众号:海豹战队,回复 ...

  6. python分析数据走势_python数据分析应用 - 近5年八类资产价格走势分析

    最近发现PYTHON与TABLEAU的组合简直就是我们数据分析爱好者的绝佳工具组合.最近对大类资产配置这个问题产生了较大的兴趣,笔者就使用python作为数据获取.数据处理的工具,同时采用tablea ...

  7. python分析数据图片_python数据分析常用图大集合

    以下默认所有的操作都先导入了numpy.pandas.matplotlib.seaborn import numpy as np import pandas as pd import matplotl ...

  8. R语言ggplot2可视化:ggplot2可视化密度图(显示数据密集区域)、ggplot2可视化密度图(对数坐标):log10比例的收入密度图突出了在常规密度图中很难看到的收入分布细节

    R语言ggplot2可视化:ggplot2可视化密度图(显示数据密集区域).ggplot2可视化密度图(对数坐标):log10比例的收入密度图突出了在常规密度图中很难看到的收入分布细节 目录

  9. python数据统计_Python数据分析--Iris数据集实战

    Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > 本次主要围绕Iris数据集进行一个简单的数据分析, 另外在数据的可视 ...

最新文章

  1. java 运算顺序 从左到右_java – 表达式与运算符优先级的从左到右的评估.为什么从左到右的评估似乎胜出了?...
  2. 《中国人工智能学会通讯》——10.10 结束语
  3. UITableView(UIScrollView)滑动到底部的判断
  4. python类高级用法_十.python面向对象高级用法
  5. 【杂谈】当前知识蒸馏与迁移学习有哪些可用的开源工具?
  6. 美妆AI要抢李佳琦的饭碗?
  7. 征战蓝桥 —— 2015年第六届 —— C/C++A组第10题——灾后重建
  8. ALAssetsLibrary-代码操作iOS相册资源
  9. JavaWeb学习之路
  10. [转]OpenGL基础技术讲座--发展历史
  11. 点击元素改变样式,再点击,又变回去,来回变
  12. JAVA偶数分解质数_优化后的寻找偶数是两个质数之和的JAVA代码
  13. JQuery EasyUI 1.5.1 美化主题大包
  14. 台达变频器485通讯接线图_台达PLC与变频器用485通讯怎样实现启动、停止和频率给定,程序怎样做。谢谢!...
  15. .net输入汉字转拼音
  16. 全新的小米,从更流畅,更安全,更智慧的MIUI 14开始
  17. 桌面计算机图标管理打不开怎么回事,电脑桌面计算机图标打不开怎么办
  18. Blender2.8基础四:手绘贴图篇
  19. WordPress采集wordpress挂机采集插件
  20. 老师教我们用计算机画画就是彩虹,汉语拼音的教案

热门文章

  1. 平均值,方差计算(sss)
  2. Windows 7 Ubuntu 14.04完美双系统安装及系统引导配置
  3. [云炬创业基础笔记]第六章商业模式测试7
  4. 科大星云诗社动态20210517
  5. 关于考研一些问题的思考2017-12-23
  6. 为什么开了数据不能上网_Doinb和LCK选手双排为什么不能开语音?Doinb深夜道出实情...
  7. 无监督分类:聚类分析(K均值)
  8. OpenGL编程指南4:双缓冲实现运行
  9. 快速安装第三方库的指令——解决第三方库安装超时问题
  10. 使用异步Servlet改进应用性能