本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前提提要:传送门, 在上次的基础上,我们增加对生成图片的样式修改,使图片更加高质量。
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修改默认字体的文章,博主用的方法一,亲测有效。传送门
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()