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

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

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()

程序

matplotlib组织架构图代码 matplotlib模块_matplotlib组织架构图代码_03

 生成图片:

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中能展示出来

matplotlib组织架构图代码 matplotlib模块_数据_04

饼图绘制 

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

# 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() #

matplotlib组织架构图代码 matplotlib模块_matplotlib组织架构图代码_07

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

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

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

中文字体显示和绘图方框

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

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

# 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轴,有数字标识的正方体形式,此时没有设置字体,不能显示中文,并且终端报警告,没有字体

matplotlib组织架构图代码 matplotlib模块_ide_10

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

matplotlib组织架构图代码 matplotlib模块_ide_11

修改字体,就报错了,

matplotlib组织架构图代码 matplotlib模块_matplotlib组织架构图代码_12

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

 

matplotlib组织架构图代码 matplotlib模块_数据_13

 

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

matplotlib组织架构图代码 matplotlib模块_matplotlib组织架构图代码_14

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

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

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

程序

matplotlib组织架构图代码 matplotlib模块_ide_17

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

 rcParams

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

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()

程序

 直接给所有的加字体了

matplotlib组织架构图代码 matplotlib模块_ide_20

 

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

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

matplotlib组织架构图代码 matplotlib模块_饼图_21

 

还是字体的

rc的方法

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

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()

程序

matplotlib组织架构图代码 matplotlib模块_ide_24

 

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

 

总结

 

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

 

使用案例

 

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

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()

程序

matplotlib组织架构图代码 matplotlib模块_matplotlib组织架构图代码_27

一些中文字体英文名字

 

宋体

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

 

 旋转饼图和突出显示

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

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

matplotlib组织架构图代码 matplotlib模块_饼图_30

 

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

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

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

 绘制环形饼图

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

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()

程序 

matplotlib组织架构图代码 matplotlib模块_ide_33

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

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

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

柱形图

 1、基本柱形图

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

# -*- 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()

程序

matplotlib组织架构图代码 matplotlib模块_matplotlib组织架构图代码_36

柱形图

2、设置柱形图颜色

 

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

# -*- 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改变为单一颜色

matplotlib组织架构图代码 matplotlib模块_饼图_39

 加上颜色参数也可以

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

# -*- 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()

程序

matplotlib组织架构图代码 matplotlib模块_饼图_42

 3、添加横坐标的标签

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

# -*- 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组织架构图代码 matplotlib模块_matplotlib组织架构图代码_45

 

 4、堆叠柱状图

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

# -*- 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()

程序

matplotlib组织架构图代码 matplotlib模块_matplotlib组织架构图代码_48

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

 

matplotlib组织架构图代码 matplotlib模块_matplotlib组织架构图代码_49

 

 

 5、并列柱形图

 还是适用上图的情况

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

# -*- 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()

程序

matplotlib组织架构图代码 matplotlib模块_matplotlib组织架构图代码_52

 

 

 6、条形柱形图

matplotlib组织架构图代码 matplotlib模块_数据

matplotlib组织架构图代码 matplotlib模块_饼图_02

# -*- 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()

程序

matplotlib组织架构图代码 matplotlib模块_matplotlib组织架构图代码_55

 

 

 

 

 

 

 

 

 

中文字体:https://www.jb51.net/article/134546.htm

官网图例子:https://matplotlib.org/gallery/index.html

cpu图:https://www.it610.com/article/1304777370737086464.htm

动态cpu:http://www.zzvips.com/article/145005.html

菜鸟教程:https://www.runoob.com/matplotlib/matplotlib-pie.html

# -*- 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()