简单绘图,折线图,并保存为图片

import matplotlib.pyplot as plt

x=[1,2,3,4,5]

y=[10,5,15,10,20]

plt.plot(x,y,'ro-',color='blue')

plt.savefig('testblueline.jpg')

plt.show()

程序

生成图片:

import matplotlib.pyplot as plt
x=[1,2,3,4,5] #x轴数据
y=[10,5,15,10,20] #y轴数据。x轴和y轴一一对应就形成平面直角坐标系的坐标
plt.plot(x,y,'ro-',color='blue') #第一个参数是x轴,第二个是y轴,第四个指定折线图颜色。
plt.savefig('testblueline.jpg') #将绘图保存为图片
plt.show() #在pycharm中能展示出来

饼图绘制

# coding=utf-8
import matplotlib.pyplot as plt election_data = {'Biden': 290, 'Trump': 214, 'Others': 538 - 290 - 214}
candidate = [key for key in election_data]
votes = [value for value in election_data.values()]
plt.figure(figsize=(10, 10), dpi=100)
plt.pie(votes, labels=candidate, autopct="%1.2f%%", colors=['c', 'm', 'y'],
textprops={'fontsize': 24}, labeldistance=1.05)
plt.legend(fontsize=16)
plt.title("2020年A国大选票数占比", fontsize=24)
plt.savefig('bingtu.jpg')
plt.show()

程序

# coding=utf-8
import matplotlib.pyplot as plt election_data = {'Biden': 290, 'Trump': 214, 'Others': 538 - 290 - 214} #数据字段
candidate = [key for key in election_data] #字典的键是候选人,也是饼图的三个扇区
votes = [value for value in election_data.values()] #字典的值是投票人数,
plt.figure(figsize=(10, 10), dpi=100) #
plt.pie(votes, labels=candidate, autopct="%1.2f%%", colors=['c', 'm', 'y'],
textprops={'fontsize': 24}, labeldistance=1.05) #把数值列表也就是投票数放第一个参数,labels是名称也就是候选人列表,
#autopct参数,写1.2表示饼图数值百分比保留两位小数,如果不加,这里显示出6位小数。如果填1.0或者1,那么没有小数
#colors参数列表,代表饼图扇区的颜色,与标签即候选人是对应的,第一个颜色列表元素,对应第一个候选人列表元素。字母是颜色开头字母,
#我将c变成b,扇区就变蓝色,写成r,扇区就变成红色。
#textprops参数里放标签和数值也就是候选人和投票百分比的文字大小。
#labeldistance是标签到圆心的距离,1.05正好不压住饼图,小于1,标签(候选人)进入了饼图内,远大于1那么标签离饼图太远。等于1会压盖一点饼图
plt.legend(fontsize=16) #legend 图例,说明的意思。这里可以控制右上角图例的大小。这里候选人就是图例,每个候选人就是图例中的一个,饼图根据它来划分的,然后根据投票数值占比,来划分饼图百分比
plt.title("2020年A国大选票数占比", fontsize=24)#这里控制饼图的标题,标题字体大小
# plt.savefig('bingtu.jpg')
plt.show() #

pie(): matplotlib中绘制饼图的函数。第一个参数传入用于绘制饼图的数据列表,其他参数都是关键字参数。labels参数用于设置每个扇形的标签,说明每个扇形的数据归属。autopct参数用于设置饼图中的百分比,一般保留两位小数,传入"%1.2f%%"即可。colors参数用于设置每个扇形的颜色,与数据列表一一对应,传入一个与数据列表长度相等的列表。textprops参数用于设置标签和百分比的字体、大小等,传入一个字典。labeldistance参数用于设置标签与饼图的距离,默认值为1.1。

饼图将一个圆饼按照各分类的占比划分成多个扇形,整个圆饼代表数据的总量,每个扇形表示该分类占总体的比例大小,所有扇形相加的和等于100%。饼图适用于表示不同分类在总体中的占比情况,通过弧度大小来比较不同分类的占比大小,尤其在需要突出显示其中某一个部分的占比时。

上面的饼图绘制了2020年A国大选的票数占比情况,可以一目了然地看到候选人的得票占比情况。如果需要突出显示某位候选人的得票占比,可以对饼图进行分离展示。

中文字体显示和绘图方框

添加字体变量,其它方法上引用变量

# coding=utf-8
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties # 步骤一
...
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14) # 步骤二
plt.xlabel("x轴", fontproperties=font) # 步骤三
plt.ylabel("y轴", fontproperties=font)
plt.title("标题", fontproperties=font)
plt.show()

程序

创建图形,有x,y轴,有数字标识的正方体形式,此时没有设置字体,不能显示中文,并且终端报警告,没有字体

x,y轴加字体属性,这样图片中 就显示中文了

修改字体,就报错了,

虽然simsun.ttc文件在本地也找不到,但是就是能用

这个目录下有很多字体,不知道咋用

在方法上直接加参数宋体,黑体。fontproperties

import matplotlib.pyplot as plt
# ...
plt.xlabel("x轴")
plt.ylabel("y轴", fontproperties="SimSun") # 步骤一 (宋体)
plt.title("标题", fontproperties="SimHei") # (黑体)
plt.show()

程序

灵活,另一个优点:不污染全局字体设置

rcParams

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)
#...
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.title("标题")
plt.show()

程序

 直接给所有的加字体了

简洁的用法。缺点:污染全局字体设置。(所以需要第二步骤)

 一行那里改不存在的字体不可以显示,这里的2行那里有没有,图片貌似都没变化

还是字体的

rc的方法

import matplotlib.pyplot as plt
font = {'family' : 'SimHei',
'weight' : 'bold',
'size' : '16'}
plt.rc('font', **font) # 步骤一(设置字体的更多属性)
plt.rc('axes', unicode_minus=False) # 步骤二(解决坐标轴负数的负号显示问题)
#...
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.title("标题")
plt.show()

程序

灵活的用法。缺点:影响全局字体(所以需要第二步骤)

总结

方式二用时才设置,且不会污染全局字体设置,更灵活
方式三、方式四不需要对字体路径硬编码,而且一次设置,多次使用,更方便。

使用案例

import numpy as np
import matplotlib.pyplot as plt
font = {'family' : 'DFKai-SB',
'weight' : 'bold',
'size' : '16'}
plt.rc('font', **font) # pass in the font dict as kwargs
plt.rc('axes',unicode_minus=False)
x = np.linspace(0, 10, 1000)
y = np.sin(x)
z = np.cos(x**2)
plt.figure(figsize=(8,4))
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z,"b--",label="$cos(x^2)$")
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.title("标题")
plt.ylim(-1.2,1.2)
plt.legend()
plt.show()

程序

一些中文字体英文名字

宋体 SimSun
黑体 SimHei
微软雅黑 Microsoft YaHei
微软正黑体 Microsoft JhengHei
新宋体 NSimSun
新细明体 PMingLiU
细明体 MingLiU
标楷体 DFKai-SB
仿宋 FangSong
楷体 KaiTi
隶书 LiSu
幼圆 YouYuan
华文细黑 STXihei
华文楷体 STKaiti
华文宋体 STSong
华文中宋 STZhongsong
华文仿宋 STFangsong
方正舒体 FZShuTi
方正姚体 FZYaoti
华文彩云 STCaiyun
华文琥珀 STHupo
华文隶书 STLiti
华文行楷 STXingkai
华文新魏 STXinwei

旋转饼图和突出显示

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
election_data = {'Biden': 290, 'Trump': 214, 'Others': 538 - 290 - 214}
candidate = [key for key in election_data]
votes = [value for value in election_data.values()]
plt.figure(figsize=(10, 10), dpi=100)
explode = (0.1, 0, 0)
plt.pie(votes, labels=candidate, autopct="%1.2f%%", colors=['c', 'm', 'y'], textprops={'fontsize': 24},
labeldistance=1.05, explode=explode, startangle=90, shadow=True)
plt.legend(loc='upper right', fontsize=16)
plt.title("2020年A国大选票数占比", fontsize=24)
plt.axis('equal')
plt.show()

程序

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #设置字体
election_data = {'Biden': 290, 'Trump': 214, 'Others': 538 - 290 - 214} #定义字典数据源
candidate = [key for key in election_data] #定义标签
votes = [value for value in election_data.values()] #定义数值
plt.figure(figsize=(10, 10), dpi=100) #新建画图窗口,窗口长和高。dpi 为设置图形每英寸的点数
explode = (0.1, 0, 0)#设置各部分突出
plt.pie(votes, labels=candidate, autopct="%1.2f%%", colors=['c', 'm', 'y'], textprops={'fontsize': 24},
labeldistance=1.05, explode=explode, startangle=90, shadow=True)
plt.legend(loc='upper right', fontsize=16) #plt.legend()函数主要的作用就是给图加上图例,plt.legend([x,y,z])里面的参数使用的是list的的形式将图表的的名称喂给这和函数
plt.title("2020年A国大选票数占比", fontsize=24)
# plt.axis('equal')
plt.show()
#plt.axis()用法详解:https://www.cnblogs.com/shuaishuaidefeizhu/p/14034415.html
#plt.figure(1)是新建一个名叫 Figure1的画图窗口,
# plt.plot(x,c)是在画图窗口里具体绘制横轴为x 纵轴为c的曲线
#参考设置图形大小和dpi https://www.cnblogs.com/lijunjie9502/p/10327151.html

在绘制饼图的pie()函数中,explode参数用于设置每个扇形到圆心的距离,传入一个与数据列表长度相等的列表,默认每个扇形到圆心的距离都是0,将想要分离展示的扇形距离设置成一个适合的值,如0.1,即可将该部分突出展示。为了展示效果更好,可以使用startangle参数对饼图进行旋转(如将分离的扇形旋转到左侧),给startangle参数传入一个角度,将饼图逆时针旋转对应的角度,startangle参数表示的是饼图的起始角度,默认为正右方向,即传统的x轴正方形,此方向表示0度,设置起始角度后可以实现旋转的效果。对扇形进行分离展示后,将shadow参数设置为True,给饼图添加阴影,使饼图更立体,饼图切分的效果会更好。

在对饼图进行分离后,饼图的布局会发生变化,为了控制饼图占用的区域是一个正方形,且避免饼图变成椭圆形,使用axis('equal')函数,传入'equal'参数。

在上一张饼图的基础上,经过设置后,将获胜者Biden的得票率突出显示,可以更突出地展示获胜者的得票占比。

绘制环形饼图

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
election_data = {'Biden': 290, 'Trump': 214, 'Others': 538 - 290 - 214}
candidate = [key for key in election_data]
votes = [value for value in election_data.values()]
plt.figure(figsize=(10, 10), dpi=100)
explode = (0, 0, 0)
plt.pie(votes, labels=candidate, explode=explode, autopct="%1.2f%%", colors=['c', 'm', 'y'],
textprops={'fontsize': 24}, labeldistance=1.05, pctdistance=0.85, startangle=90)
plt.pie([1], radius=0.7, colors='w')
plt.legend(loc='upper right', fontsize=16)
plt.title("2020年A国大选票数占比", fontsize=24)
plt.axis('equal')
plt.show()

程序

要绘制环形的饼图,在绘制出饼图后,再次调用pie()函数绘制一个更小的纯白饼图即可,先后顺序不能相反。

在绘制纯白的饼图时,传入只有一个数据的列表,一条数据会占满整个饼图,占比100%,颜色设置为colors='w'。radius参数默认为1,如果第一张饼图的radius参数是1,设置白色饼图的radius参数小于1,得到的白色饼图就会小于第一张饼图。此外不需要设置其他参数,白色饼图不需要显示百分比,不需要显示标签等。

绘制完成小的白色饼图,环形效果就实现了,还需要调整第一张饼图的百分比的显示位置。在pie()函数中,pctdistance参数用于设置百分比显示离圆心的距离,默认值是0.6,设置环形效果时,可以将pctdistance参数增大,使百分比显示在环形的中间。同时,因为环形饼图是通过遮挡实现的,阴影展示不完全,看起来比较别扭,所以不设置shadow参数,去掉阴影。

柱形图

1、基本柱形图

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt num_list = [1.5, 0.6, 7.8, 6]
plt.bar(range(len(num_list)), num_list)
plt.show()

程序

柱形图

2、设置柱形图颜色

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt num_list = [1.5, 0.6, 7.8, 6]
plt.bar(range(len(num_list)), num_list, fc='r')
plt.show()

程序

加上参数fc改变为单一颜色

加上颜色参数也可以

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt num_list = [1.5, 0.6, 7.8, 6]
plt.bar(range(len(num_list)), num_list, color='rgb')
plt.show()

程序

3、添加横坐标的标签

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt name_list = ['Monday', 'Tuesday', 'Friday', 'Sunday']
num_list = [1.5, 0.6, 7.8, 6]
plt.bar(range(len(num_list)), num_list, color='rgb', tick_label=name_list)
plt.show()

程序

4、堆叠柱状图

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt name_list = ['Monday', 'Tuesday', 'Friday', 'Sunday']
num_list = [1.5, 0.6, 7.8, 6]
num_list1 = [1, 2, 3, 1]
plt.bar(range(len(num_list)), num_list, label='boy', fc='y')
plt.bar(range(len(num_list)), num_list1, bottom=num_list, label='girl', tick_label=name_list, fc='r')
plt.legend()
plt.show()

程序

适用于如下课程表类似的结构。根据时间或者某个序列,对一种或多类对象的数值,显示每个序列中这几类的数值和占比情况

5、并列柱形图

还是适用上图的情况

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt name_list = ['Monday' ,'Tuesday' ,'Friday' ,'Sunday']
num_list = [1.5 ,0.6 ,7.8 ,6]
num_list1 = [1 ,2 ,3 ,1]
x =list(range(len(num_list)))
total_width, n = 0.8, 2
width = total_width / n plt.bar(x, num_list, width=width, label='boy', fc='y')
for i in range(len(x)):
x[i] = x[i] + width
plt.bar(x, num_list1, width=width, label='girl', tick_label=name_list, fc='r')
plt.legend()
plt.show()

程序

6、条形柱形图

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt name_list = ['Monday', 'Tuesday', 'Friday', 'Sunday']
num_list = [1.5, 0.6, 7.8, 6]
plt.barh(range(len(num_list)), num_list, tick_label=name_list)
plt.show()

程序

 
 
 
 
 
 
 
中文字体:https://www.jb51.net/article/134546.htm
https://www.cnblogs.com/bainianminguo/p/10952586.html
饼图:https://blog.csdn.net/weixin_43790276/article/details/109684441
cpu图:https://www.it610.com/article/1304777370737086464.htm
动态cpu:http://www.zzvips.com/article/145005.html
展示图片在html页面:https://www.cnblogs.com/amize/p/15060978.html
绘图知识点:https://www.cnblogs.com/zhizhan/p/5615947.html
菜鸟教程:https://www.runoob.com/matplotlib/matplotlib-pie.html
matplotlib柱形图:https://blog.csdn.net/qq_29721419/article/details/71638912
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt

name_list = ['Monday', 'Tuesday', 'Friday', 'Sunday']
num_list = [1.5, 0.6, 7.8, 6]
plt.bar(range(len(num_list)), num_list, color='rgb', tick_label=name_list)
plt.show()

matplotlib模块详解的更多相关文章

  1. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  2. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  3. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

  4. python中threading模块详解(一)

    python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...

  5. python time 模块详解

    Python中time模块详解 发表于2011年5月5日 12:58 a.m.    位于分类我爱Python 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括: ...

  6. python time模块详解

    python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明  一.简介 ...

  7. 小白的Python之路 day5 time,datatime模块详解

    一.模块的分类 可以分成三大类: 1.标准库 2.开源模块 3.自定义模块 二.标准库模块详解 1.time与datetime 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时 ...

  8. 小白的Python之路 day5 random模块和string模块详解

    random模块详解 一.概述 首先我们看到这个单词是随机的意思,他在python中的主要用于一些随机数,或者需要写一些随机数的代码,下面我们就来整理他的一些用法 二.常用方法 1. random.r ...

  9. Python中time模块详解

    Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...

随机推荐

  1. asList和subList的缺陷

    概述 在开发中我们经常使用asList去把一个数组转换为List.也存在通过subList.subMap.来对List.Map.Set来进行类似使用subString方法来对String对象进行分割处 ...

  2. Rainbond通过插件整合SkyWalking,实现APM即插即用

    作者:张震 一. 简介 SkyWalking 是一个开源可观察性平台,用于收集.分析.聚合和可视化来自服务和云原生基础设施的数据.支持分布式追踪.性能指标分析.应用和服务依赖分析等:它是一种现代 AP ...

  3. Java二次开发海康SDK-对接门禁机

    写在最前 SDK版本:CH-HCNetSDKV6.1.6.45_build20210302_win64 参考文档:海康SDK使用手册_V6.1 对接测试设备型号:DS-K1T671M 设备序列号:E5 ...

  4. Java架构师和开发者实用工具推荐

    目前,Java已经受到全球数百万开发者的肯定和追捧,成为最具代表性的编程语言之一.前段时间刚刚发布的Java8完美诠释了高效和创新的特性,也为很多开发者和企业铺平了道路.不过,作为一位优秀的Java架 ...

  5. CF1455G Forbidden Value

    本题教训我们: 如果遇到在返回值域范围的dp时,可以考虑线段树合并操作. 考虑最开始写作一个\(if:0;end\) 那么所有的\(if\)可以记作一个树状结构,\(set\)为子节点 先把所有\(s ...

  6. ZROI 2019 暑期游记

    ZROI 游记 在自闭中度过了17天 挖了无数坑,填了一点坑 所以还是有好多坑啊zblzbl 挖坑总集: 时间分治 差分约束 Prufer序列 容斥 树上数据结构 例题C (和后面的例题) 点分 最大 ...

  7. pip 与 conda

    pip 与 conda 简介 pip 是接触 python 后最早认识的包管理工具.通过使用 pip 能够自动下载和解决不同 python 模块的依赖问题,使 python 的配置过程变得简单. 与 ...

  8. .net与java建立WebService再互相调用

    A: .net建立WebService,在java中调用. 1.在vs中新建web 简单修改一下Service.cs的[WebMethod]代码: using System; using System ...

  9. 出现NoClassDefFoundError,始终无法引入jar的解决

    在拉取代码后,项目的部分版本与本地存在的不一定一致,所以IDEA会自动下载并引入,但是在启动时可能存在java.lang.NoClassDefFoundError这个报错 比如引入marshallin ...

  10. 日常Java 2021/9/26 (二柱升级版)

    package m; import java.util.Scanner;import java.util.Random; public class di_er { static int number= ...