赞
踩
目标
掌握给图形添加辅助功能(如:标注、x,y轴名称、标题等)
知道图形的保存
知道如何多次plot绘制图形
为了更好地理解所有基础绘图功能,我们通过天气温度变化的绘图来融合所有的基础API使用
需求:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度
效果:
```python import matplotlib.pyplot as plt import random
x = range(60) y_shanghai = [random.uniform(15, 18) for i in x]
plt.figure(figsize=(20, 8), dpi=80)
plt.plot(x, y_shanghai)
plt.show() ```
x:要显示的刻度值
y:要显示的刻度值
```python
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
plt.xticks(x[::5], x_ticks_label[::5]) plt.yticks(y_ticks[::5]) ```
如果没有解决过中文问题的话,会显示这个样子:
解决方案一:
下载中文字体(黑体,看准系统版本)
步骤一:下载 SimHei 字体(或者其他的支持中文显示的字体也行)
步骤二:安装字体
linux下:拷贝字体到 usr/share/fonts 下:
python sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf
windows和mac下:双击安装
步骤三:删除~/.matplotlib中的缓存文件
python cd ~/.matplotlib rm -r *
python vi ~/.matplotlib/matplotlibrc
将文件内容修改为:
python font.family : sans-serif font.sans-serif : SimHei axes.unicode_minus : False
解决方案二:
在Python脚本中动态设置matplotlibrc,这样也可以避免由于更改配置文件而造成的麻烦,具体代码如下:
```python from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"] ```
有时候,字体更改后,会导致坐标轴中的部分字符无法正常显示,此时需要更改axes.unicode_minus参数:
```python
mpl.rcParams["axes.unicode_minus"] = False ```
为了更加清楚地观察图形对应的值
python plt.grid(True, linestyle='--', alpha=0.5)
添加x轴、y轴描述信息及标题
通过fontsize参数可以修改图像中字体的大小
python plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点0分到12点之间的温度变化图示", fontsize=20)
```python
plt.savefig("test.png") ```
完整代码:
```python import matplotlib.pyplot as plt import random from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
x = range(60) y_shanghai = [random.uniform(15, 18) for i in x]
plt.figure(figsize=(20, 8), dpi=100)
plt.plot(x, y_shanghai)
x_ticks_label = ["11点{}分".format(i) for i in x] y_ticks = range(40)
plt.xticks(x[::5], x_ticks_label[::5]) plt.yticks(y_ticks[::5])
plt.grid(True, linestyle="--", alpha=0.5)
plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点--12点某城市温度变化图", fontsize=20)
plt.savefig("./test.png")
plt.show() ```
需求:再添加一个城市的温度变化
收集到北京当天温度变化情况,温度在1度到3度。怎么去添加另一个在同一坐标系当中的不同图形,其实很简单只需要再次plot即可,但是需要区分线条,如下显示
```python
y_beijing = [random.uniform(1, 3) for i in x]
plt.plot(x, y_shanghai)
plt.plot(x, y_beijing, color='r', linestyle='--') ```
我们仔细观察,用到了两个新的地方,一个是对于不同的折线展示效果,一个是添加图例。
|颜色字符|风格字符| |---|---| |r 红色|- 实线| |g 绿色|- - 虚线| |b 蓝色|-. 点划线| |w 白色|: 点虚线| |c 青色|' ' 留空、空格| |m 洋红|| |y 黄色|| |k 黑色|
```python
plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")
plt.legend(loc="best") ```
|Location String|Location Code| |---|---| |'best'|0| |'upper right'|1| |'upper left'|2| |'lower left'|3| |'lower right'|4| |'right'|5| |'center left'|6| |'center right'|7| |'lower center'|8| |'upper center'|9| |'center'|10|
完整代码:
```python
x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] y_beijing = [random.uniform(1,3) for i in x]
plt.figure(figsize=(20, 8), dpi=100)
plt.plot(x, y_shanghai, label="上海") plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
x_ticks_label = ["11点{}分".format(i) for i in x] y_ticks = range(40)
plt.xticks(x[::5], x_ticks_label[::5]) plt.yticks(y_ticks[::5])
plt.grid(True, linestyle="--", alpha=0.5)
plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点--12点某城市温度变化图", fontsize=20)
plt.savefig("./test.png")
plt.legend(loc=0)
plt.show() ```
练习多次plot流程(从上面复制代码,到自己电脑,确保每人环境可以正常运行),
同时明确每个过程执行实现的具体效果
如果我们想要将上海和北京的天气图显示在同一个图的不同坐标系当中,效果如下:
可以通过subplots函数实现(旧的版本中有subplot,使用起来不方便),推荐subplots函数
```python Parameters:
nrows, ncols : 设置有几行几列坐标系 int, optional, default: 1, Number of rows/columns of the subplot grid.
Returns:
fig : 图对象 axes : 返回相应数量的坐标系
设置标题等方法不同: set_xticks set_yticks set_xlabel set_ylabel ```
关于axes子坐标系的更多方法:参考https://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes
```python
x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] y_beijing = [random.uniform(1, 5) for i in x]
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
axes[0].plot(x, y_shanghai, label="上海") axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")
x_ticks_label = ["11点{}分".format(i) for i in x] y_ticks = range(40)
axes[0].set_xticks(x[::5]) axes[0].set_yticks(y_ticks[::5]) axes[0].set_xticklabels(x_ticks_label[::5]) axes[1].set_xticks(x[::5]) axes[1].set_yticks(y_ticks[::5]) axes[1].set_xticklabels(x_ticks_label[::5])
axes[0].grid(True, linestyle="--", alpha=0.5) axes[1].grid(True, linestyle="--", alpha=0.5)
axes[0].set_xlabel("时间") axes[0].set_ylabel("温度") axes[0].set_title("中午11点--12点某城市温度变化图", fontsize=20) axes[1].set_xlabel("时间") axes[1].set_ylabel("温度") axes[1].set_title("中午11点--12点某城市温度变化图", fontsize=20)
plt.savefig("./test.png")
axes[0].legend(loc=0) axes[1].legend(loc=0)
plt.show() ```
呈现公司产品(不同区域)每天活跃用户数
呈现app每天下载数量
呈现产品新功能上线后,用户点击次数随时间的变化
拓展:画各种数学函数图像
注意:plt.plot()除了可以画折线图,也可以用于画各种数学函数图像
代码:
```python import numpy as np
x = np.linspace(-10, 10, 1000) y = np.sin(x)
plt.figure(figsize=(20, 8), dpi=100)
plt.plot(x, y)
plt.grid()
plt.show() ```
添加x,y轴刻度【知道】
plt.xticks()
注意:在传递进去的第一个参数必须是数字,不能是字符串,如果是字符串吗,需要进行替换操作
添加网格显示【知道】
plt.grid(linestyle="--", alpha=0.5)
添加描述信息【知道】
plt.xlabel()
plt.title()
图像保存【知道】
plt.savefig("路径")
多次plot【了解】
直接进行添加就OK
显示图例【知道】
plt.legend(loc="best")
注意:一定要在plt.plot()里面设置一个label,如果不设置,没法显示
多个坐标系显示【了解】
plt.subplots(nrows=, ncols=)
折线图的应用【知道】
1.应用于观察数据的变化
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。