图形最初显示的样式往往并非十分好看,我们可以通过大量的设置为完善图形的显示。事实上,matplotlib样式设置功能非常强大,因此在这里我们也主要结合一些最为常见的功能来做介绍。
比如我们想改变线性图的样式:
plt.plot(frame[‘收盘价’], label=”close”, color=”red”, linewidth=2)
plt.legend()
plt.show()
这里的设置都比较见名知意,分别是标签、线条颜色和宽度,2表示两个像素,越大越粗。注意,一定要在show显示前加上legend方法,否则无法看到标签文本内容。
大家可能注意到了红色的曲线,文本标签默认位于右上角。这个标签通常在绘制多条线条时可以很好的区分哪条线条是哪一个数据。
如果要想改变,还是需要修改legend:
plt.legend(loc=9)
此时为上部居中显示。具体数字含义可以参考网上资料,或者自己也可以尝试观察下。
这里有一个常见问题,如果写成中文汉字标签,就会无法正确显示。个中原因主要是无法找到对应的中文字体。对于此类问题,操作略微麻烦些,不过只需复制过去即可:
# coding:utf-8
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
frame = pd.read_csv('C:\\temp\\股票数据.csv', encoding='GBK')
frame = frame.set_index('日期')
frame.index = pd.to_datetime(frame.index)
plt.plot(frame['收盘价'], label="收盘价", color="red", linewidth=2)
mpl.rcParams['font.sans-serif'] = ['SimHei']
plt.legend()
plt.show()
其中首先导入pylab库的mpl类型,然后通过它的rcParams函数设置中文字体,其中SimHei就是我们常见的黑体。
可以看出正确的显示了所需的中文及其正确的字体。
我们继续增加些常见的文字说明,
plt.xlabel(“Year”)
plt.ylabel(“Price”)
plt.title(“Close Price”)
这里分别是横轴、纵轴和顶部标题的各自设置方法。
从图中来看,都比较直观和增加图形的可读性。
同样,如果是中文汉字,也需要设置字体,并在输出汉字时使用该字体:
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=”c:\\windows\\fonts\\simsun.ttc”, size=14)
plt.xlabel(“年份”, fontproperties=font)
plt.ylabel(“股价”, fontproperties=font)
plt.title(“收盘价”, fontproperties=font)
其中,fname需要指定字体所在的位置,这里是宋体文件名称,也是默认的位置。
常见的文字信息一般就是这些,下面我们来看看图形的设置。
一般而言,默认的线条样式还是过于简单,我们来改一下:
plt.plot(frame[‘收盘价’], “.”)
plt.show()
这种改动位于数据列后面的一个参数,表示点的样式。
可以看出这里不再使用直线连接各个点,而是只绘制当前点。
点可以改变,甚至可以变成其他的模样。
plt.plot(frame[‘收盘价’], “+”)
这里表示加号点。
大家可以自行到网上去查找下更多的设置方法。
这个参数同时还可以设置颜色和点之间连线的类型:
plt.plot(frame[‘收盘价’], “+r:”)
plt.show()
这里是红色的虚线。
进一步结合更多属性设置,可以设置出更为复杂的效果:
plt.plot(frame[‘收盘价’], “.r”, markersize=30, markeredgecolor=’orange’, markeredgewidth=2)
这里的点的大小、边缘的颜色、和边的宽度都可以设定。
效果和美观当然需要大家根据数据和自己的理解做出组合和应用。
当然,不同的图形,样式设置也有一些差异,比如我们如果使用散点图来绘制这个图形,就可以单独来设置每个点的样式:
plt.scatter(frame[‘开盘价’], frame[‘收盘价’], c=’r’, s=10, alpha=0.6)
这里的c表示点的颜色,s表示点的大小,alpha为透明度,在点与点重叠时,增加点透明度可以更好的看清点点之间的重叠,1为默认的不透明。
这些都可以从结果看的出来。
进一步完善下:
plt.scatter(frame[‘开盘价’], frame[‘收盘价’], c=frame[‘成交量’], s=frame[‘换手率’], alpha=0.5)
plt.colorbar()
plt.show()
这里展示了散点图一种优势,即不仅可以通过二维坐标同时展示两组数据的对应关系,还能通过点的颜色和大小表达更多的数据内容。比如这里我们使用成交量分别映射成不同的颜色,为了能够看清建议此时加上colorbar。换手率通过点的大小来表示。
从图中可以看出,成交量最大的是黄色,颜色对应的数据为三千八百万左右,对应的开盘价和收盘价都在20左右,
这个和数据实际情况是一致的。
图中的最大的点表示最大的换手率,对应的开盘价和收盘价都在40左右
这个和数据实际情况是一致的。
除此以外,还可以直接利用系统定义好的一些样式主题,如:
plt.style.use(‘dark_background’)
plt.scatter(frame[‘开盘价’], frame[‘收盘价’])
plt.show()
这个黑色背景显得很深邃些。
要想知道系统有哪些可用的样式,可以使用下面的语句来查看:
绘图可以同时绘制多个图形,比如我们绘制两个不同的股票信息:
# coding:utf-8
import pandas as pd
import matplotlib.pyplot as plt
frame1 = pd.read_csv('C:\\temp\\股票数据.csv', encoding='GBK')
frame1 = frame1.set_index('日期')
frame1.index = pd.to_datetime(frame1.index)
frame2 = pd.read_csv('C:\\temp\\600339.xls')
frame2 = frame2.set_index('date')
frame2.index = pd.to_datetime(frame2.index)
plt.plot(frame1['最低价'])
plt.plot(frame2['close'])
plt.show()
一般绘图会自动采用不同的颜色在区分表示。这里由于数据时间起至不一样,因此两个线条长短不一。
为此,我们可以调整下两个轴显示数据的范围:
plt.xlim(datetime(2012, 1, 1), datetime(2019, 12, 31))
plt.ylim(0, 100)
记得导入datetime。
显示内容确实调整了x和y轴数据的范围。
当然,有时也可以分开显示,这可以以子图的方式来实现:
plt.subplot(2, 1, 1)
plt.plot(frame1[‘最低价’])
plt.subplot(2, 1, 2)
plt.plot(frame2[‘close’])
plt.show()
这里的subplot就是子图的意思,2表示纵向两个,1表示横向一个,
最后一个1和2表示对应哪一个。显然1在上面,2在下面。
数据为:http://njcie.com/python/股票数据.csv