Python matplotlib绘制折线图及实例

matplotlib是受MATLAB的启发构建的。matplotlib.pyplot模块中有一套完全仿照MATLAB的函数形式的绘图接口,这套函数接口方便MATLAB用户过度到matplotlib包。
本篇文章是博主在B站学习总结,写了一天,讲述matplotlib绘图技巧,干货加实例,并附代码、运行图,希望对大家有所帮助。

引例:
每天温度数据如下,[15, 12.2, 14, 14, 34, 43, 23, 34, 11.5, 22, 23, 12],利用pyplot绘制折线图。

代码如下:

from matplotlib import pyplot as plt

x = range(2, 26, 2)
y = [15, 12.2, 14, 14, 34, 43, 23, 34, 11.5, 22, 23, 12]

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

展示如下:
在这里插入图片描述

可以看到,上图十分简洁,大致达到了初学者希望绘制图片的期望。但是,我们希望能够增加对这幅图的描述信息,并且让图片更美观。

1. 设置图片大小(高清无码大图)并保存到本地

from matplotlib import pyplot as plt

#设置图片大小
#figsize=(长度,高度), dpi=每单位的像素点
fig = plt.figure(figsize=(20,8), dpi=80)

x = range(2, 26, 2)
y = [15, 12.2, 14, 14, 34, 43, 23, 34, 11.5, 22, 23, 12]

#绘图
plt.plot(x, y)

#保存本地-设置.png防止放大失真
plt.savefig("./t1.png")

#展示图形
plt.show()

2. 描述信息,如x轴和y轴表示含义,以及图表标题含义。

from matplotlib import pyplot as plt
import random

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

fig = plt.figure(figsize=(16,6),dpi=80)

##调整x轴刻度并添加汉字解释
_xticks_lable = ["10点{}分".format(i) for i in range(60)]
_xticks_lable += ["11点{}分".format(i) for i in range(60)]
#取步长,数据与字符串一一对应
plt.xticks(list(x)[::3], _xticks_lable[::3], rotation=45)#字符串旋转45度
plt.yticks(y)

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

在这里插入图片描述
运行之后,如图,发现x坐标轴没有显示汉字,而是方框。这是由于matplotlib默认字体没有汉字,需要我们自己修改默认设置才可以。
这里博主推荐一篇matplotlib修改默认字体的文章,博主用的方法一,亲测有效。

https://blog.csdn.net/mp9105/article/details/90213711

修改之后的代码(添加了x轴,y轴的描述信息,标题)如下:

from matplotlib import pyplot as plt
from matplotlib import font_manager#设置字体
import random

# 使用my_font存出一个加载的中文字体
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')

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

fig = plt.figure(figsize=(16,6),dpi=80)

##调整x轴刻度并添加汉字解释
_xticks_lable = ["10点{}分".format(i) for i in range(60)]
_xticks_lable += ["11点{}分".format(i) for i in range(60)]
#取步长,数据与字符串一一对应
plt.xticks(list(x)[::3], _xticks_lable[::3], rotation=45, fontproperties=my_font)#字符串旋转45度

#添加描述信息
plt.xlabel("时间 单位(min)", fontproperties=my_font)
plt.ylabel("温度 单位(C)", fontproperties=my_font)
plt.title("10点到12点每分钟气温变化", fontproperties=my_font)

##绘制网格,横竖线根据x,y坐标轴数目
plt.grid(alpha=0.5)#alpha设置网格透明度

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

3. 线条的样式(比如颜色、透明度、图例等)

##绘制两条折线并添加图例
from matplotlib import pyplot as plt
from matplotlib import font_manager

# 使用my_font存出一个加载的中文字体
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')

x = range(11, 31)
y1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]

##设置x轴
x_labels=["{}岁".format(i) for i in range(11,31)]
plt.xticks(list(x), x_labels,rotation=45, fontproperties=my_font)

##详细信息
plt.xlabel("年龄", fontproperties=my_font)
plt.title("数目随年龄变化曲线", fontproperties=my_font)

##绘制网格,横竖线根据x,y坐标轴数目
plt.grid(alpha=0.5, linestyle=":")#alpha设置网格透明度,linestyle设置线条样式点状

#绘制图形,设置线条样式
plt.plot(x, y1, label="小明", color="red", linestyle="--")
plt.plot(x, y2, label="小红", linewidth=3, alpha=0.5)

#添加图例,不能使用fontproperties
plt.legend(loc="best",prop=my_font)#loc调整显示位置,prop设置字体

plt.show()

4. 标记出特殊的点(比如最高点和最低点在哪里)
假设最高点为(23,6),添加代码语句如下:

#添加最高点
plt.text(23,6, "max", color="r")#前面表示图中实际坐标,中间是标注的内容,最后是颜色信息

5. 给图片添加一个水印(防止盗用)

#加图水印
from __future__ import print_function
import numpy as np
import matplotlib.cbook as cbook
import matplotlib.image as image
import matplotlib.pyplot as plt

# Fixing random state for reproducibility
np.random.seed(1996)

datafile = cbook.get_sample_data('logo.png', asfileobj=False)
print('loading %s' % datafile)
im = image.imread(datafile)
im[:, :, -1] = 0.5  # set the alpha channel

fig, ax = plt.subplots()

ax.plot(np.random.rand(20), '-o', ms=20, lw=2, alpha=0.7, mfc='orange')
ax.grid()
fig.figimage(im, 5, 5, zorder=3)

plt.show()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zz_Lambda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值