Matplotlib

matplotlib 数据可视化 - 图表属性

2018-11-26  本文已影响8人  东南有大树
import numpy as np
import matplotlib.pyplot as plt

为图表添加文本

plt.axis([0,5,0,20])
plt.title('标题')
plt.xlabel('横轴')
plt.ylabel('纵轴')
plt.plot([1,2,3,4],[1,4,9,16],'ro')  # 'ro'表示红色的圆点
plt.show()
output_2_0.png

修改文本属性:字体与颜色

plt.axis([0,5,0,20])
plt.title('标题',fontsize=20)  # fontsize指定字体大小,另外 fontname 可指定字体
plt.xlabel('横轴')
plt.ylabel('纵轴')
plt.plot([1,2,3,4],[1,4,9,16],'ro')  # 'ro'表示红色的圆点
plt.show()
output_4_0.png

在图表的任意位置添加文本

text()函数可在图表的任意位置添加文本,前两个参数指定位置,最后一个参数为文本

plt.axis([0,5,0,20])
plt.title('标题',fontsize=20)
plt.xlabel('横轴')
plt.ylabel('纵轴')

plt.text(1,1.5,'文本一')
plt.text(2,4.5,'文本二')
plt.text(3,9.5,'文本三')
plt.text(4,16.5,'文本四')

plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.show()
output_6_0.png

在文本中显示表达式

matplotlib 整合了 LaTeX 表达式,支持在图表中插入数学表达式。使用上,需要将表达式置于两个$之间

通常,只需要在包含 LaTeX 表达式的字符串前添加 r字符,表明它后面是原始文本,不能对其进行转义操作。

plt.axis([0,5,0,20])
plt.title('标题',fontsize=20)
plt.xlabel('横轴')
plt.ylabel('纵轴')
plt.text(1,1.5,'文本一')
plt.text(2,4.5,'文本二')
plt.text(3,9.5,'文本三')
plt.text(4,16.5,'文本四')

plt.text(1.1,12,'$y=x^2$',fontsize=20,bbox={'facecolor':'yellow','alpha':0.2})

plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.show()
output_8_0.png

添加网格

使用函数grid()

plt.axis([0,5,0,20])
plt.title('标题',fontsize=20)
plt.xlabel('横轴')
plt.ylabel('纵轴')
plt.text(1,1.5,'文本一')
plt.text(2,4.5,'文本二')
plt.text(3,9.5,'文本三')
plt.text(4,16.5,'文本四')
plt.text(1.1,12,'$y=x^2$',fontsize=20,bbox={'facecolor':'yellow','alpha':0.2})

plt.grid(True)

plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.show()
output_10_0.png

添加图例

legend()函数可为图表添加图例

plt.axis([0,5,0,20])
plt.title('标题',fontsize=20)
plt.xlabel('横轴')
plt.ylabel('纵轴')
plt.text(1,1.5,'文本一')
plt.text(2,4.5,'文本二')
plt.text(3,9.5,'文本三')
plt.text(4,16.5,'文本四')
plt.text(1.1,12,'$y=x^2$',fontsize=20,bbox={'facecolor':'yellow','alpha':0.2})
plt.grid(True)

plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.plot([1,2,3,4],[1+2,4+2,9+2,16+2],'b*')
plt.plot([1,2,3,4],[1+5,4+5,9+5,16+5],'y^')

plt.legend(['图例一', '图例二', '图例三'], loc=0)  # 一定要在plot()之后

plt.show()
output_12_0.png

legend()函数中,第一个参数可图例的名称,第二个参数loc可指定位置,它的值分别有:

保存代码

如果想把写了很长的代码保存下来,以方便下次使用,可以使用魔术命令 %save,后面跟上文件名和代码对应的命令提示符号码。

示例:

%save my_code 46
File `my_code.py` exists. Overwrite (y/[N])?  y
46 is neither a string nor a macro.

这样,会在当前工作目录下生成一个叫my_code.py的文件,里面的代码就是第46个单元里写的代码。

如果想将保存的代码恢复到编辑器中来,可使用魔术命令%load

示例:

%load my_code.py
# %load my_code.py
plt.axis([0,5,0,20])
plt.title('标题',fontsize=20)
plt.xlabel('横轴')
plt.ylabel('纵轴')
plt.text(1,1.5,'文本一')
plt.text(2,4.5,'文本二')
plt.text(3,9.5,'文本三')
plt.text(4,16.5,'文本四')
plt.text(1.1,12,'$y=x^2$',fontsize=20,bbox={'facecolor':'yellow','alpha':0.2})
plt.grid(True)

plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.plot([1,2,3,4],[1+2,4+2,9+2,16+2],'b*')
plt.plot([1,2,3,4],[1+5,4+5,9+5,16+5],'y^')

plt.legend(['图例一', '图例二', '图例三'], loc=0)  # 一定要在plot()之后

plt.show()
output_17_0.png

另外,%run可在会话中运行py文件,这省略不作详解。

将会话转换成HTML文件

这个功能不需要写代码控制,直接点击 文件 》 下载 》 HTML 即可

将图表直接保存为图片

使用savefig()函数

plt.axis([0,5,0,20])
plt.title('标题',fontsize=20)
plt.xlabel('横轴')
plt.ylabel('纵轴')
plt.text(1,1.5,'文本一')
plt.text(2,4.5,'文本二')
plt.text(3,9.5,'文本三')
plt.text(4,16.5,'文本四')
plt.text(1.1,12,'$y=x^2$',fontsize=20,bbox={'facecolor':'yellow','alpha':0.2})
plt.grid(True)
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.plot([1,2,3,4],[1+2,4+2,9+2,16+2],'b*')
plt.plot([1,2,3,4],[1+5,4+5,9+5,16+5],'y^')
plt.legend(['图例一', '图例二', '图例三'], loc=0) 
plt.show()

plt.savefig('my_png.png')  # 指定图片名称与格式,将会保存到当前工作目录下
output_21_0.png
<Figure size 432x288 with 0 Axes>

谈谈日期值

先来看一个糟糕的日期值显示问题:

import datetime
import numpy as np
import matplotlib.pyplot as plt 

start_date = datetime.datetime.now().date()
date_list = [start_date - datetime.timedelta(days = i) for i in range(5)]
value_list = [i for i in range(5)]
plt.plot(date_list,value_list)
plt.show()
output_23_0.png

哦!我想可能是我需要换一副度数更高的眼镜了!

……

matplotlib.datas模块专门用于管理日期类型的数据,这里可以只显示年月,来简化数据,并且还要定义好时间的尺度。

示例:

import datetime
import numpy as np
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates  # 导入时间管理模块

months = mdates.MonthLocator()
days = mdates.DayLocator()
timeFmt = mdates.DateFormatter('%Y-%m')
start_date = datetime.datetime.now().date()
date_list = [start_date - datetime.timedelta(days = i*30) for i in range(5)]
value_list = [i for i in range(5)]
fig, ax = plt.subplots()
plt.plot(date_list,value_list)
ax.xaxis.set_major_locator(months)
ax.xaxis.set_major_formatter(timeFmt)
ax.xaxis.set_minor_locator(days)
plt.show()
output_25_0.png

解析:

上一篇下一篇

猜你喜欢

热点阅读