matplotlib 数据可视化 - 图表属性
2018-11-26 本文已影响8人
东南有大树
import numpy as np
import matplotlib.pyplot as plt
为图表添加文本
- title() 添加标题
- xlabel() 为x轴添加标签
- ylabel() 为y轴添加标签
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可指定位置,它的值分别有:
- 0 最佳位置
- 1 右上角
- 2 左上角
- 3 右下角
- 4 左下角
- 5 右侧
- 6 左侧垂直居中
- 7 右侧垂直居中
- 8 下方水平居中
- 9 上访水平居中
- 10 正中间
保存代码
如果想把写了很长的代码保存下来,以方便下次使用,可以使用魔术命令 %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
解析:
-
MonthLocator()
指定月份的时间尺度 -
DayLocator()
指定日的时间尺度 -
DateFormatter()
指定时间格式 -
subplots()
创建一个图形和一组副图 -
set_major_locator(months)/set_minor_locator(days)
对x轴进行设置日期 -
set_major_formatter(timeFmt)
指定日期格式