【matplotlib绘图自学操作(1)】

matplotlib绘图自学操作(1)

这是一个重要的绘图库:进行数据可视化(仿照matlab做图标与数据可视化)
先上视频课程系列链接(哔哩哔哩)

折线图

axis:坐标轴
引例:假设一天中24小时,气温分别是:

[15,13,14,5,17,20,25,26,26,27,22,18,15]

请画图分析:

x=range(2,26,2)#去尾留头

全部代码:

from matplotlib import pyplot as plt#把matplotlib中的pyplot进行引用用plt代替
x=range(2,26,2)#去尾留头
y=[15,13,14.5,17,20,25,26,26,27,22,18,15]
plt.plot(x,y)#请注意:x与y必须一一对应
plt.show()#展示图像(括号别忘了)

图像

如何设置图像大小

最简单方法就截图
fig函数:

# coding=utf-8
from matplotlib import pyplot as plt

x = range(2,26,2)
y = [15,13,14.5,17,20,25,26,26,27,22,18,15]

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

#绘图
plt.plot(x,y)

#设置x轴的刻度
_xtick_labels = [i/2 for i in range(4,49)]
plt.xticks(range(25,50))
plt.yticks(range(min(y),max(y)+1))
#保存
# plt.savefig("./t1.png")
#展示图形
plt.show()

坐标轴绘图链接1

在这里插入图片描述

from matplotlib import pyplot as plt
import random
import matplotlib

x=range(0,120)
y=[random.randint(20,35) for i in range(120)]


plt.plot(x,y)
plt.show()

在这里插入图片描述

完善案例

# coding=utf-8
from matplotlib import pyplot as plt
import random
import matplotlib

x = range(0,120)
y = [random.randint(20,35) for i in range(120)]

plt.figure(figsize=(20,8),dpi=80)

plt.plot(x,y)

#调整x轴的刻度
_xtick_labels = ["10:{}".format(i) for i in range(60)]
_xtick_labels += ["11:{}".format(i) for i in range(60)]
#取步长,数字和字符串一一对应,数据的长度一样
plt.xticks(list(x)[::3],_xtick_labels[::3],rotation=45) #rotaion旋转的度数

#添加描述信息
plt.xlabel("time")
plt.ylabel("tempture(℃)")
plt.title("10-12tempture")

plt.show()

效果图

在这里插入图片描述

案例3(带网格)比较年龄走势

# coding=utf-8
from matplotlib import pyplot as plt
from matplotlib import font_manager



y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_2 = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]

x = range(11,31)

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

plt.plot(x,y_1,label="me",color="#F08080")
plt.plot(x,y_2,label="myneighbor",color="#DB7093",linestyle="--")

#设置x轴刻度
_xtick_labels = ["{}years old".format(i) for i in x]
plt.xticks(x,_xtick_labels)
# plt.yticks(range(0,9))

#绘制网格
plt.grid(alpha=0.4,linestyle=':')#0.4是网格线透明度

#添加图例
plt.legend(loc="upper left")#这个位置时确定在哪(best.)

#展示
plt.show()

在这里插入图片描述
看看有多种方法确定标识位置在这里插入图片描述
绘图自建样式链接
莫凡matplotlib绘图简版

分享一个代码块

import matplotlib.pyplot as plt
from matplotlib.font_manager import *
myfont = FontProperties(fname='C:\Windows\Fonts\simsun.ttc')

这是我个人的中文包路径,由于python3.7在matplotlib中不支持中文,所以你得找到中文字体路径,有些复杂,得先引用。simsun.ttc是宋体

import matplotlib.pyplot as plt
import numpy as np

p1={"编程能力":60,"沟通技能":70,"专业知识":65,"团体协作":75,"工具掌握":80} #创建第一个人的数据
p2={"编程能力":70,"沟通技能":60,"专业知识":75,"团体协作":65,"工具掌握":70} #创建第二个人的数据

# 分别提取两个人的信息和对应的标签
data1=np.array([i for i in p1.values()]).astype(int) #提取第一个人的信息
data2=np.array([i for i in p2.values()]).astype(int) #提取第二个人的信息

label=np.array([j for j in p1.keys()]) #提取标签
label=np.concatenate((label,[label[0]]))
angle = np.linspace(0, 2*np.pi, len(data1), endpoint=False) #data里有几个数据,就把整圆360°分成几份
# 闭合的目的是在绘图时能够生成闭合的环
angles = np.concatenate((angle, [angle[0]])) #增加第一个angle到所有angle里,以实现闭合
data1 = np.concatenate((data1, [data1[0]])) #增加第一个人的第一个data到第一个人所有的data里,以实现闭合
data2 = np.concatenate((data2, [data2[0]])) #增加第二个人的第一个data到第二个人所有的data里,以实现闭合

fig = plt.figure()
ax = fig.add_subplot(111, polar=True)  # 设置坐标轴为极坐标
# 绘制两个数据样本的闭合环
ax.plot(angles, data1,  linewidth=2, color='green', alpha=0.5)
ax.fill(angles, data1, facecolor='red', alpha=0.2)
ax.plot(angles, data2,  linewidth=2, color='blue', alpha=0.5)  #
ax.fill(angles, data2, facecolor='steelblue', alpha=0.5)
# 设置圆周每一维上显示的样本
ax.set_thetagrids(angles * 180/np.pi, label, fontproperties='SimHei', color='gray', fontsize=13)
# 设置在半径方向上要显示的文本和显示文本的角度
ax.set_rgrids(np.arange(0, 81, 20),angle=45)
ax.set_rlim(0, 100)
ax.set_title('matplotlib 雷达图', va='bottom', fontproperties='SimHei', color='gold', fontsize=15)
#help(ax.set_thetagrids)
plt.show()

在这里插入图片描述

极坐标图举例

import matplotlib.pyplot as plt
from matplotlib.font_manager import *
myfont = FontProperties(fname='C:\Windows\Fonts\simsun.ttc')



import numpy as np

N = 20
theta = np.linspace(0, 2 * np.pi, N, endpoint=False)  # 均分角度
radii = 10 * np.random.rand(N)  # 随机角度
width = np.pi / 4 * np.random.rand(N)  # 随机宽度

ax = plt.subplot(111, projection='polar')  # 极坐标图绘制
bars = ax.bar(theta, radii, width=width, bottom=0.0)  # 哪个角度画,长度,扇形角度,从距离圆心0的地方开始画

for r, bar in zip(radii, bars):
    bar.set_facecolor(plt.cm.viridis(r / 10.0))
    bar.set_alpha(0.5)  # 添加颜色

plt.title('polar')
plt.show()

更多详见链接

同时采用这个方法可能跟容易解决中文字体问题

import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False

例4:中国公司不同年份出货数量柱状图

import matplotlib.pyplot as plt
import matplotlib

"""
   多个数据样本进行对比时,要注意每个数据样本对应的颜色,对每个条形的注释文本设置和横纵坐标的设置

"""


# 设置中文字体和负号正常显示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

label_list = ['2014', '2015', '2016', '2017']  # 横坐标刻度显示值
num_list1 = [20, 30, 15, 35]  # 纵坐标值1
num_list2 = [15, 30, 40, 20]  # 纵坐标值2
x = range(len(num_list1))

# 绘制条形图
rects1 = plt.bar(x, height=num_list1, width=0.4, alpha=0.5, color='red', label='部门一')
rects2 = plt.bar([i+0.4 for i in x], height=num_list2, width=0.4, color='green', label='部门二')

# 设置y轴属性
plt.ylim(0, 50)
plt.ylabel('数量')

# 设置x轴属性
plt.xticks([index+0.2 for index in x], label_list)
plt.xlabel("年份")
plt.title('某某公司')
plt.legend()

# 显示文本
for rect in rects1:
    height = rect.get_height()
    plt.text(rect.get_x() + rect.get_width() / 2, height + 1, str(height), ha='center', va='bottom')
for rect in rects2:
    height = rect.get_height()
    plt.text(rect.get_x() + rect.get_width() / 2, height + 1, str(height), ha='center', va='bottom')

plt.show()








在这里插入图片描述

饼状图

import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

label_list = ["第一部分", "第二部分", "第三部分"]    # 各部分标签
size = [55, 35, 10]    # 各部分大小
color = ["steelblue", "green", "blue"]     # 各部分颜色
explode = [0.05, 0, 0]   # 各部分突出值
"""
绘制饼图
explode:设置各部分突出
label:设置各部分标签,
labeldistance:设置标签文本距圆心位置,1.1表示1.1倍半径
autopct:设置圆里面文本
shadow:设置是否有阴影
startangle:起始角度,默认从0开始逆时针转
pctdistance:设置圆内文本距圆心距离
返回值
l_text:圆内部文本,matplotlib.text.Text object
p_text:圆外部文本
"""
patches, l_text, p_text = plt.pie(size, explode=explode, colors=color, labels=label_list, 
                                  labeldistance=1.1, autopct="%1.1f%%", shadow=True, startangle=90, pctdistance=0.6)
plt.axis("equal")    # 设置横轴和纵轴大小相等,这样饼才是圆的
plt.legend()
plt.show()

在这里插入图片描述
第一部分结束,下次见。
疑问/帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值