1.绘制一天内温度的折线图

1.1 折线图基础绘制

一天之内的温度从凌晨2点开始,每隔2小时测量一次温度,12次温度数据为

y = [15, 13, 14, 5, 17, 20, 25, 26, 24, 22, 18, 15]

现在需要将温度作为纵坐标,时间作为横坐标,绘制折线图
首先需要生成横坐标,这里可以通过实现,实际就是从2开始,一直到24

x = range(2, 25, 2)

可以简单看一下里面的数据

for x in range(2, 25,2):print(x)


通过plot可以确认横坐标和纵坐标,show进行展示

# 绘图
plt.plot(x, y)#这里x和y的数量需要是相等的# 展示图形
plt.show()

输出的结果就是一张图

1.2 调整大小分辨率

展示的图片可以进行大小、分辨率的修改以及进行保存,通过figsize设置长宽,dpi设置分辨率

# 设置图片大小
plt.figure(figsize=(20, 8),dpi=80)

加上这一段后,再生成结果就会发现图片的大小发生了改变

1.3 图片保存

如果需要对这张图片进行保存,可以加一句

# 保存图片
plt.savefig('./1.1matplotlib基础绘图.png')  # 保存为svg矢量图可以避免放大后产生锯齿

执行后就会在当前文件夹里生成一张图片

1.4 修改坐标轴刻度

如果要修改x轴的刻度,可以通过将x的值作为刻度

# 设置x轴的刻度
plt.xticks(x)

这样跑出来的结果就是

修改y轴的刻度,可以加上

# 设置y轴的刻度
plt.yticks(range(min(y),max(y)+1))

这时就会发现y轴的刻度也发生了改变

不过目前坐标轴上只有数字,难以直观看出来具体时间和温度单位,所以需要将x轴上的数字改成时间,可以通过在xticks里增加参数来实现

x_change = ["{}:00".format(i) for i in range(2, 25, 2)]
plt.xticks(x, x_change)

xticks(x, x_change)的作用就是用x_change来替代原来的x,这时候绘制出来的折线图里,横坐标就更加贴近生活了

1.5 增加中文图表描述信息

如果需要对表格以及坐标轴增加注释,可以通过实现

plt.xlabel("时间")
plt.ylabel("温度(℃)")
plt.title("一天的温度变化情况")


但执行之后却会出现乱码的情况,这是因为matplotlib默认并不支持中文,所以需要提前获取这台电脑的中文字体,需要先导入对应包,并定义参数my_font

from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")

再修改上面添加的代码

plt.xlabel("时间", fontproperties=my_font)
plt.ylabel("温度(℃)", fontproperties=my_font)
plt.title("一天的温度变化情况", fontproperties=my_font)

这时候就可以正常绘制出带有中文的图表了

1.6 增加辅助网格线

如果觉得上面的图看的不够清楚,可以增加网格线进行辅助使用

# 增加辅助网格线
plt.grid()


完整代码如下

from matplotlib import pyplot as plt
from matplotlib import font_managerx = range(2, 25, 2)
y = [15, 13, 14, 5, 17, 20, 25, 26, 24, 22, 18, 15]my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")# 设置图片大小
plt.figure(figsize=(20, 8),dpi=80)# 绘图
plt.plot(x, y)
# 设置x轴的刻度
#plt.xticks(x)
x_change = ["{}:00".format(i) for i in range(2, 25, 2)]
plt.xticks(x, x_change)
# 设置y轴的刻度
plt.yticks(range(min(y),max(y)+1))plt.xlabel("时间", fontproperties=my_font)
plt.ylabel("温度(℃)", fontproperties=my_font)
plt.title("一天的温度变化情况", fontproperties=my_font)# 增加辅助网格线
plt.grid()# 保存图片
#plt.savefig('./1.1matplotlib基础绘图.png')  # 保存为svg矢量图可以避免放大后产生锯齿
# 展示图形
plt.show()

2.分别绘制两天温度的折线图

上面说的只是一条折线的绘图,matplotlib也可以实现两条折线的绘图,方式基本一样,只是需要增加部分代码

# 绘制图形,设置标签、颜色、线条样式
plt.plot(x, y1, label='第一天', color="#F08080")
plt.plot(x, y2, label='第二天', color="blue", linestyle="--")
# 添加图例
# plt.legend(prop=my_font, loc="upper left")
plt.legend(prop=my_font, loc="best")

最终实现的绘图结果还是符合预期的

完整代码如下

from matplotlib import pyplot as plt
from matplotlib import font_managerx = range(2, 25, 2)
y1 = [15, 13, 14, 5, 17, 20, 25, 26, 24, 22, 18, 15]
y2 = [11, 13, 17, 10, 7, 23, 28, 6, 14, 12, 18, 25]my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")# 设置图片大小
plt.figure(figsize=(20, 8),dpi=80)# 绘制图形,设置标签、颜色、线条样式
plt.plot(x, y1, label='第一天', color="#F08080")
plt.plot(x, y2, label='第二天', color="blue", linestyle="--")
# 设置x轴的刻度
#plt.xticks(x)
x_change = ["{}:00".format(i) for i in range(2, 25, 2)]
plt.xticks(x, x_change)
# 设置y轴的刻度
plt.yticks(range(min(y1),max(y2)+1))# 添加图例
# plt.legend(prop=my_font, loc="upper left")
plt.legend(prop=my_font, loc="best")plt.xlabel("时间", fontproperties=my_font)
plt.ylabel("温度(℃)", fontproperties=my_font)
plt.title("两天的温度变化情况", fontproperties=my_font)# 增加辅助网格线
#plt.grid()# 保存图片
#plt.savefig('./1.1matplotlib基础绘图.png')  # 保存为svg矢量图可以避免放大后产生锯齿
# 展示图形
plt.show()

3. 散点图

绘制散点图代码如下

from matplotlib import pyplot as plt
from matplotlib import font_managermy_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")  # 设置中文字体
y_3 = [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]
y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]
x_3 = range(1,32)
x_10 = range(51,82)
# 设置图形大小
plt.figure(figsize=(20, 8), dpi=80)
#使用scatter方法绘制散点图,和之前绘制折线图的唯一区别
plt.scatter(x_3,y_3,label="3月份")
plt.scatter(x_10,y_10,label="10月份")
#添加图例
plt.legend(loc="best",prop=my_font)
# 标题
plt.title('3月份与10月份气温差异图',fontproperties=my_font)
# 刻度
_x = list(x_3)+list(x_10)
_xticks3 = [f'3月{i}日' for i in x_3]
_xticks10 = [f'10月{i-50}日' for i in x_10]
_xticks = _xticks3+_xticks10
plt.xticks(_x[::3], _xticks[::3],fontproperties=my_font,rotation=45)
# 标签
plt.xlabel('日期',fontproperties=my_font)
plt.ylabel('温度',fontproperties=my_font)
plt.show()

效果如图

4. 条形图

4.1 纵向条形图

纵向条形图代码如下

from matplotlib import pyplot as plt
from matplotlib import font_managermy_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")
a = ["战狼2", "速度与激情8", "功夫瑜伽", "西游伏妖篇", "变形金刚5:\n最后的骑士", "摔跤吧!爸爸", "加勒比海盗5:\n死无对证", "金刚:骷髅岛", "极限特工:\n终极回归", "生化危机6:\n终章","乘风破浪", "神偷奶爸3", "智取威虎山", "大闹天竺", "金刚狼3:\n殊死一战", "蜘蛛侠:\n英雄归来", "悟空传", "银河护卫队2", "情圣", "新木乃伊", ]b = [56.01, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.61, 11.28, 11.12, 10.49, 10.3, 8.75, 7.55, 7.32, 6.99, 6.88,6.86, 6.58, 6.23]# 设置图形大小
plt.figure(figsize=(20, 15), dpi=80)
plt.bar(a, b, width=.3)
plt.xticks(a, fontproperties=my_font,rotation=45)
_yticks = [f'{i}亿' for i in b]
plt.yticks(b[::5],_yticks[::5], fontproperties=my_font)
plt.grid(alpha=0.4)
plt.title('影片票房', fontproperties=my_font)plt.show()

执行结果如图

这里需要注意,因为有些电影名太长,如果直接展示会超出图片范围,所以这里在逻辑上对名称进行了换行\n

a = ["战狼2", "速度与激情8", "功夫瑜伽", "西游伏妖篇", "变形金刚5:\n最后的骑士", "摔跤吧!爸爸", "加勒比海盗5:\n死无对证", "金刚:骷髅岛", "极限特工:\n终极回归", "生化危机6:\n终章","乘风破浪", "神偷奶爸3", "智取威虎山", "大闹天竺", "金刚狼3:\n殊死一战", "蜘蛛侠:\n英雄归来", "悟空传", "银河护卫队2", "情圣", "新木乃伊", ]

如果觉得这种换行的方式比较麻烦,那就可以考虑使用横向条形图

4.2 横向条形图

大致逻辑和纵向条形图差不多,只不过从bar改成了barh,横纵坐标轴互换,
完整代码如下

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
from matplotlib import font_managermy_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")
a = ["战狼2", "速度与激情8", "功夫瑜伽", "西游伏妖篇", "变形金刚5:最后的骑士", "摔跤吧!爸爸", "加勒比海盗5:死无对证", "金刚:骷髅岛", "极限特工:终极回归", "生化危机6:终章","乘风破浪", "神偷奶爸3", "智取威虎山", "大闹天竺", "金刚狼3:殊死一战", "蜘蛛侠:英雄归来", "悟空传", "银河护卫队2", "情圣", "新木乃伊", ]b = [56.01, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.61, 11.28, 11.12, 10.49, 10.3, 8.75, 7.55, 7.32, 6.99, 6.88,6.86, 6.58, 6.23]# 设置图形大小
plt.figure(figsize=(20, 15), dpi=80)
plt.barh(range(len(a)), b, height=.5,color='orange')_yticks = [f'{i}亿' for i in b]
plt.yticks(range(len(a)), a, fontproperties=my_font)
plt.xticks(b[::5], _yticks[::5], fontproperties=my_font)
plt.grid(alpha=0.5)
plt.title('影片票房', fontproperties=my_font)plt.show()

执行结果如下

4.3 多段条形图

如果需要每部电影在不同日期的票房,可以通过多段条形图来实现,
完整代码如下

# coding=utf-8
from matplotlib import pyplot as plt
from matplotlib import font_managermy_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]
#设置图形大小
plt.figure(figsize=(20,8),dpi=80)bar_width = 0.2
x_14 = list(range(len(a)))
x_15 =[i+bar_width for i in x_14]
x_16 =[i+bar_width for i in x_15]plt.bar(x_14,b_16,width=bar_width,label='9月14日')
plt.bar(x_15,b_15,width=bar_width,label='9月15日')
plt.bar(x_16,b_14,width=bar_width,label='9月16日')plt.legend(prop=my_font)  # 必须设置label
plt.xticks(x_15,a,fontproperties=my_font)plt.show()

执行效果如图

5. 直方图

和上面提到的绘图方法类似,主要不同点在于,绘制直方图主要使用的是hist而不是bar
完整代码如下

# coding=utf-8
from matplotlib import pyplot as plt
from matplotlib import font_managera = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124,101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111, 78, 132, 124, 113, 150, 110, 117, 86,95, 144, 105, 126, 130, 126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136, 123, 117, 119, 105, 137,123, 128, 125, 104, 109, 134, 125, 127, 105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114, 105, 115,132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134, 156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123, 107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133, 112, 114, 122, 109, 106, 123, 116, 131, 127,115, 118, 112, 135, 115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154, 136, 100, 118, 119, 133, 134,106, 129, 126, 110, 111, 109, 141, 120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126, 114, 140, 103,130, 141, 117, 106, 114, 121, 114, 133, 137, 92, 121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113, 134,106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110, 105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146,133, 101, 131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111, 111, 133, 150]# 计算组距
d = 3
num_bins = (max(a) - min(a)) // d
print(num_bins)
# 设置图形的大小
plt.figure(figsize=(20, 8), dpi=80)
# 绘制直方图
plt.hist(a, num_bins)# 设置x轴的刻度
plt.xticks(range(min(a), max(a) + d, d))
# 设置网格
plt.grid()plt.show()

python数据分析-matplotlib可视化相关推荐

  1. Python数据分析——Matplotlib数据可视化基础(二)

    Python数据分析--Matplotlib数据可视化基础(二) 思维导图: 图形的绘制 认识要绘制的图形 基本绘图流程 pyplot基础图表函数 pyplot饼图的绘制 pie函数 matplotl ...

  2. [转载] Python数据分析与可视化学习笔记(一)数据分析与可视化概述

    参考链接: Python | 数据分析的数学运算 数据分析与可视化(一) 1.1 数据分析1.1.1 数据.信息与数据分析1.1.2数据分析与数据挖掘的区别1.1.3数据分析的流程 1.2 数据可视化 ...

  3. 【Python数据分析与可视化】Pandas统计分析-实训

    [Python数据分析与可视化]Pandas统计分析-实训 文章目录 [Python数据分析与可视化]Pandas统计分析-实训 导包 读取数据 分析数据 1.查看数据的描述和统计信息: 2.修改列名 ...

  4. python数据分析可视化实例-Python数据分析与可视化从入门到精通

    (1)没有高深理论,每章都以实例为主,读者参考书中源码运行,就能得到与书中一样的结果.(2)专注于Python数据分析与可视化操作中实际用到的技术.相比大而全的书籍资料,本书能让读者尽快上手,开始项目 ...

  5. python可视化数据分析-Python数据分析与可视化从入门到精通

    (1)没有高深理论,每章都以实例为主,读者参考书中源码运行,就能得到与书中一样的结果.(2)专注于Python数据分析与可视化操作中实际用到的技术.相比大而全的书籍资料,本书能让读者尽快上手,开始项目 ...

  6. Python 数据分析——Matplotlib相关知识

    Python 数据分析--Matplotlib相关知识 第五章 Matplotlib相关知识 -- 样式 文章目录 Python 数据分析--Matplotlib相关知识 前言 一.matplotli ...

  7. Python数据分析-数据可视化(二)

    欢迎大家访问个人博客:https://jmxgodlz.xyz 文章目录 前言 Matplotlib 折线图格式调整 标签 线条颜色 线条形状 折点样式 线条透明度 前言 看到有些论文插图十分简洁美观 ...

  8. Python数据分析与可视化学习笔记(一)数据分析与可视化概述

    数据分析与可视化(一) 1.1 数据分析 1.1.1 数据.信息与数据分析 1.1.2数据分析与数据挖掘的区别 1.1.3数据分析的流程 1.2 数据可视化 1.3 数据分析与可视化常用工具 1.4 ...

  9. 极客时间·3小时Python 数据分析和可视化 学习笔记

    3小时Python 数据分析和可视化 分解问题 数据分析 Python实现 总结经验 01 课程目标 掌握分解问题的能力 学会用Python进行数据处理.分析.展示 总结经验 02 确定目标 ​ 问题 ...

最新文章

  1. 程序员初试和复试_程序员的软微mem经验贴
  2. VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
  3. python中怎么计数_浅谈python中统计计数的几种方法和Counter详解
  4. Eigen密集矩阵求解 2 - 求解最小二乘系统
  5. linux shell 嵌套expect 与服务器交互脚本
  6. 10.32/10.33 rsync通过服务同步 10.34 linux系统日志 screen工具
  7. 计数排序的应用----排序字符串
  8. C语言 if的条件相关
  9. 信息学奥赛一本通(1087:级数求和)
  10. Centos7 安装 maven
  11. iOS学习笔记(1)— UIView 渲染和内容管理
  12. django优化--ORM优缺点
  13. jQuery conflict with other Liberary
  14. response.addCookie(cookie);报错分析
  15. 对比度调整的各种方法(二)
  16. 3dsmax烘焙模型
  17. html 网页地图集制作ECHARTS,在页面使用echarts的地图(解决地图不完整)
  18. android实现多画面播放,Android实现炫酷播放效果
  19. 【经验】研究方向要专一,日常积累素材和案例
  20. 数据存储|信息安全技术在SSD中的应用分享

热门文章

  1. P3258 [JLOI2014] 松鼠的新家 题解
  2. 数字化×财务管理,企业财务如何高质量发展 ?
  3. java读写json格式的文件方法详解.txt,并批量存储进redis
  4. php入门教程ppt,PHP与MySQL入门学习指南.ppt
  5. 移动桌面位置,再也不怕C盘爆满!
  6. 网易云音乐与阿里音乐牵手!后版权时代,在线音乐拼什么?
  7. mybatis自动识别数据库关键字
  8. 关于pulseaudio的一些总结
  9. 【工具使用】Fireworks基本使用
  10. oracle oats 安装,找不到OffLine WLST課程