文档章节

matplotlib 学习整理

Asktao
 Asktao
发布于 09/21 20:03
字数 1906
阅读 12
收藏 1

matplotlib 学习整理

一、安装、引用和概述

pip install matplotlib
from matplotlib import pyplot as plt    # 绘图工具
from matplotlib import font_manager     # 字体管理器,一般解决中文无法显示的情况

1.3 、图形:

折线图    plt.plot()
散点图    plt.scatter()
柱状图    plt.bar()
直方图    plt.hist()
饼图      plt.pie()

1.4、辅助层显示

# 设置axis刻度
plt.xticks()
plt.yticks()

# 添加网格显示
plt.grid(alpha=0.5)

# 添加描述信息
plt.xlabel()
plt.ylabel()
plt.title()

# 显示图例
plt.legend()

1.5、容器层

# 创建画布
plt.figure(figsize=(20,8),dpi=80)

axes绘图区/坐标系
figure,axes = plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)

二、折线图

from matplotlib import pyplot as plt
from matplotlib import font_manager


x = range(1,8) # x轴的位置
y = [17, 17, 18, 15, 11, 11, 13]

# 设置字体
# linux下字体路径:fname='/System/Library/Fonts/PingFang.ttc'
my_font = font_manager.FontProperties(fname='“C:/Windows/Fonts/SIMLI.TTF',size=18)

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

#绘制x轴和y轴的刻度
x_ticks_format=  ["{}:00".format(i) for i in x]    # x轴的刻度标签格式
y_ticks_label = ["{}℃".format(i) for i in range(min(y),max(y)+1)]

plt.xticks(x,x_ticks_format,rotation=45)    # rotation = 45 让字旋转45度
plt.yticks(range(min(min(y),min(y2)),max(max(y),max(y2))+1,3),y_ticks_label)

# 绘制x和y轴的标题,可以给指定标题增加中文字体,使其支持中文显示
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("次数",fontproperties=my_font)

# 绘制图表的标题
plt.title("每分钟跳动次数",color='red')

# 绘制网格(网格也是可以设置线的样式)
plt.grid(alpha=0.4)

# 添加图例(注意:只有在这里需要添加prop参数是显示中文,其他的都用fontproperties)
# 设置位置loc : upper left、 lower left、 center left、 upper center
plt.legend(prop=my_font,loc='upper right')

# 传入x和y, 通过plot画折线图
plt.plot(x, y, color='red',alpha=0.5,marker='*', linestyle='--',linewidth=3,label='我')
plt.plot(x, y2,fmt='r*:',label='同事')

# show()之后会自动释放内存,所以savefig方法可以生成图片文件,但文件没有图像。
plt.show()
plt.savefig('./matplotlib_plot_1.png')
'''plt.plot()基础属性设置:
x,               x轴的坐标集,列表类型
y,               y轴的坐标集,列表类型
color='red'      折线的颜色
alpha=0.5        折线的透明度
linestyle='--'   折线的样式
marker='*'       折点的样式
markersize=10    折点的大小
'''

'''linestyle的样式集
'-'    实线样式
'--'   虚线样式
'-.'   点划线样式
':'    虚线样式
'''

'''marker='*'的样式集
'.'     点标记
','     像素标记
'o'     圆标记
'v'     三角形向下标记
'^'     三角形向上标记
'<'     三角形左标记
'>'     三角形右标记
'1'     瘦三角形向下标记
'2'     瘦三角形向上标记
'3'     瘦三角形向左标记
'4'     瘦三角形向右标记
's'     正方形标记
'p'     五角形标记
'*'     星标记
'h'     六边形标记1
'H'     六边形标记2
'+'     加号标记
'x'     X标记
'D'     钻石标记
'd'     小版钻石标记
'|'     垂直线形 marker
'_'     水平线行 marker
'''

三、散点图

'''题干
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

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绘制散点图
plt.scatter(x,y,label= '3月份')

# 调整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)
plt.xlabel('日期',fontproperties=my_font)
plt.ylabel('温度',fontproperties=my_font)

# 图例
plt.legend(prop=my_font)

plt.show()

四、条形图

4.1竖向条形图

'''http://58921.com/alltime
假设你获取到了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(range(len(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()

4.2横向条形图

# 横向柱状图
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)
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.3/2, str(width),va="center")

plt.show()

4.3并列和罗列条形图

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

五、直方图

'''
现有250部电影的时长,希望统计出这些电影时长的分布状态(比如时长为100分钟到120分钟电影的数量,出
现的频率)等信息,你应该如何呈现这些数据?
'''
# 1)准备数据
time = [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]

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

# 2)创建画布
plt.figure(figsize=(20, 8), dpi=100)

# 3)绘制直方图
# 设置组距
distance = 2

# 计算组数
group_num = int((max(time) - min(time)) / distance)

# 绘制直方图
plt.hist(time, bins=group_num)

# 修改x轴刻度显示
plt.xticks(range(min(time), max(time))[::2])

# 添加网格显示
plt.grid(linestyle="--", alpha=0.5)

# 添加x, y轴描述信息
plt.xlabel("电影时长大小",fontproperties=my_font)
plt.ylabel("电影的数据量",fontproperties=my_font)


# 4)显示图像
plt.show()

六、饼图

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] # 各部分突出值
"""
绘制饼图
explode:设置各部分突出
label:设置各部分标签
labeldistance:设置标签文本距圆心位置,1.1表示1.1倍半径
autopct:设置圆里面文本
shadow:设置是否有阴影
startangle:起始角度,默认从0开始逆时针转
pctdistance:设置圆内文本距圆心距离
返回值:
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.legend(prop=my_font)
plt.show()

未完成,下次再整理,一图多表。

© 著作权归作者所有

Asktao
粉丝 27
博文 100
码字总数 116095
作品 0
丰台
程序员
私信 提问
Python学习(十一)——matplotlib与可视化

导入matplotlib模块: 1、绘制线 给出x的序列及y与x的关系; 输出: plt.plot(x,y,’r-‘,linewidth=2)中:r表示red红色(另:g-green、b-blue、m-magenta等),-表示实线 (另:其他不同的符...

akadiao
2017/08/12
0
0
怎么配置数据分析,机器学习的环境,有没有大佬给指点一下

电脑:windows10 x64系统 工具: vscode 语言:官方python 最近在学习数据分析和机器学习,好多模块比如numpy,pandas,scipy,matplotlib都没有装,搜了一下安装起来特别麻烦,之前一直在ubunt...

萤光皓月
08/10
99
3
Python数据分析matplotlib可视化之绘图

Matplotlib是一个基于python的2D画图库,能够用python脚本方便的画出折线图,直方图,功率谱图,散点图等常用图表,而且语法简单。 Python中通过matplotlib模块的pyplot子库来完成绘图。Mat...

急速奔跑中的蜗牛
05/30
0
0
Python 绘图,我只用 Matplotlib(一)

图片来自 unsplash 当我们的爬虫程序已经完成使命,帮我们抓取大量的数据。你内心也许会空落落的。或许你会疑惑,自己抓取这些数据有啥用?如果要拿去分析,那要怎么分析呢? 说到数据分析,...

猴哥Yuri
2017/11/03
0
0
数据分析师挣多少钱?“黑”了招聘网站告诉你!

  作者/ 魏凯   Udacity “数据分析师”纳米学位项目学员   从去年7月份开始学习 Udacity 的“数据分析师”纳米学位课程,到现在也算学了不少内容,接下来打算慢慢开始找工作了。既然想...

大数据头条
2017/12/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot配置文件读取pom文件信息

解决的问题 springboot(当然别的也可以)多环境切换需要该配置文件,打包时不够方便。 解决: 配置文件能读取pom文件中的配置,根据命令选择不同配置注入springboot的配置文件中 pom配置文件...

刘一草
5分钟前
2
0
蓝牙自定开锁时间--Python

from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex###强制输入明文增加到16字节的倍数,在末尾补'\0'def add_to_16(text): text = str(text, 'ISO-8859-1'......

丁典
5分钟前
1
0
好程序员web前端教程分享JS基础知识

  好程序员web前端教程分享JS基础知识,为大家分享一篇关于JS的基础知识。   1、执行环境:有时也叫环境,是JavaScript中最为重要的一个概念,执行环境定义了变量或函数有权访问的其他数...

好程序员官网
7分钟前
1
0
kali和win共享文件夹设置

卸载vmtools > whereis vmware-tools /etc/vmware-tools/ /usr/lib/vmware-tools/> cd /etc> sudo rm -r vmware-tools> cd /usr/lib> sudo rm -r vmware-tools 先添加源 leafpa......

yeahlife
9分钟前
1
0
killall 、kill 、pkill 命令区别

killall 命令Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name)。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程, 我们还需要在之前使...

突突突酱
16分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部