一、数据可视化概述

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

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

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

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

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

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

[Matplotlib官网](https://matplotlib.org/)

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 折线图的绘制

```pythonfrom matplotlib import pyplot as pltx = range(1,8) # x轴的位置y = [17, 17, 18, 15, 11, 11, 13]# 传入x和y, 通过plot画折线图plt.plot(x,y) plt.show()```

6.2 折线的颜色和形状设置

```pythonfrom matplotlib import pyplot as pltx = 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 折点样式

```pythonfrom matplotlib import pyplot as pltx = 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_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 pltimport randomx = 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轴的刻度

```pythonfrom matplotlib import pyplot as pltx = 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 pltimport matplotlibimport randomx = 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:WindowsFonts”可以自己下载字体文件(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_managermy_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 centerplt.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 pltfrom matplotlib import font_managerimport numpy as npy = [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 pltfrom matplotlib import font_managera = ['流浪地球','疯狂的外星人','飞驰人生','大黄蜂','熊出没·原始时代','新喜剧之王']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 pltfrom matplotlib import font_managermy_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()```

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

```pythonimport matplotlib.pyplot as pltimport numpy as npindex = 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()```

九. 饼状图

```pythonimport matplotlib.pyplot as pltimport matplotlibfrom matplotlib import font_managermy_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**进行了一个很好的总结.

matlab画多组数据折线图_Python数据分析之初识可视化相关推荐

  1. matlab画多组数据折线图_使用Origin绘制不相关多组数据折线图的方法

    原标题:使用Origin绘制不相关多组数据折线图的方法 由于不知道这样的标题是否能表达清楚我的意思,我再详细描述一下这几天遇到的问题:首先,想画一个折线图,但又不是普通的y=f(x)这样的图,而是由多 ...

  2. origin如何绘制多条折线_使用Origin绘制不相关多组数据折线图的方法

    由于不知道这样的标题是否能表达清楚我的意思,我再详细描述一下这几天遇到的问题:首先,想画一个折线图,但又不是普通的y=f(x)这样的图,而是由多组数据组成.这几组数据中,有着不同的x和y坐标值--这似 ...

  3. python显示数据长度_Python数据分析之初识可视化

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

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

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

  5. C#中实现文本读取数据并画出数据折线图

    1.题目 从文本文件中读取数据,数据格式为:空格分隔:每一行为一组数据,依次读取出来,之后将数据存于数组中:继而将其显示至图形中 2.完整代码 using System; using System.C ...

  6. 画【Python折线图】的一百个学习报告(三、自动生成单一数据折线图)

    画[Python折线图]的一百个学习报告(三.自动生成单一数据折线图) 目录 画[Python折线图]的一百个学习报告(三.自动生成单一数据折线图) 前言 学习环境 探究目标 分析过程 实践过程 成果 ...

  7. python根据时间序列画折线图_Python:matplotlib 和 Seaborn 之折线图 (三十七)

    折线图 折线图是一种很常见的图形,用于描绘一个数字变量相对于第二个变量的值的变化趋势.在散点图中,所有数据点都会绘制出来,而在折线图中,每个唯一 x 值或 x 值的分箱仅绘制一个点(就像直方图一样). ...

  8. MATLAB | 绘图复刻(二) | 折线图+误差棒+柱状图+散点抖动+灰色背景+图片叠加

    看到gzh R语言ggplot2科研绘图发布了一篇绘图复刻类文章,复刻了: Nature(IF=49.962)文章(Gut microbiota modulates weight gain in mi ...

  9. origin Pro 9.0画多条三维折线图(此处以两条为例)

    origin Pro 9.0画多条三维折线图(此处以两条为例) 首先,建立两个New workbook,将需要的绘制的图分别放在book1 book2-如下图 选中book1 中的三维数据,操作如下图 ...

最新文章

  1. 开启注册丨EMNLP 2021论文预讲会,邀你一起共赏自然语言处理学术盛宴(日程全公开)...
  2. 关于Quartz.NET作业调度框架的一点小小的封装,实现伪AOP写LOG功能
  3. 浅析企业网站从何开始了解百度蜘蛛?
  4. IDEA2021快捷键windows
  5. python翻译成matlab_matlab语言转译成python
  6. ORACLE删除当前用户下所有的表的方法
  7. 宣战抖音!腾讯与头条之战的新局面与猜想
  8. C++学习 ---- 系列文章
  9. 深度学习——初识TensorFlow
  10. CentOS 6.2目录服务之LDAP(一)
  11. 经济学的思维方式二 效率 交换与比较优势
  12. 我使用的网址--Hadoop
  13. 智慧树知到python程序设计基础第三章答案_知到智慧树Python程序设计基础章节答案...
  14. 中国农业银行计算机专业笔试题,中国农业银行笔试题库
  15. 去除idea中代码的波浪线(黄色警告线)
  16. CSS基础——简单的文字样式
  17. openlayers 地图源
  18. 计算机网络超文本是什么意思,什么是超文本链接,和超文本有什么区别?
  19. 卸载Google Drive 硬盘-必须退出程序才能卸载
  20. 基于Android Studio开发的笔记APP

热门文章

  1. oracle本地安装注意事项
  2. 开发环境入门 linux基础 (部分)while for 函数 计划任务
  3. linq to entity 错误 1 错误 75: 类型 视图名称 的键部分 “主键的列名1”无效。该键的所有部分都必须不可以为 null。(转)...
  4. java解析XML大全(转)
  5. ubuntu下使用vi退出终端出现乱码的解决方案
  6. NET牛人应该知道些什么
  7. 基础 - 字符读取函数scanf、getchar、gets、cin(清空缓存区解决单字符回车问题)
  8. 【报告分享】二次元衍生创作行业报告.pdf(附下载链接)
  9. 微矿Qlib:业内首个AI量化投资开源平台
  10. 【回顾】手机淘宝推荐系统实战