一、题目
计算出每组数据的均值和标注差,用matplotlib画出如下风格。横轴是每组的序号,即1,2,… 10,曲线的圆点对应均值,颜色范围为标注差,显示垂直和水平网格线。
二、题目分析
首先分析这道题目的需求:需要通过给定的数据绘制出图像,并且均值还要以小圆点标出,还要有垂直和水平 的网格线,还要有颜色范围的标准差,还要有图像左上角的标签。
具体实现时先将储存数据的二维列表转换为numpy的数组,之后用一个std列表和一个avg列表分别储存每组数据的标准差和平均值。然后观察到折现是通过下标和平均值构成的,于是在plt.plot里传入的是从1到10的x和avg,颜色设置为灰色,尽量和题目匹配,小圆点颜色设置为黑色,实线宽度为3,标签记为Mean Value,此时绘制出的图像并没有颜色范围。我们在通过一个y1列表记做颜色的上标,具体值就是avg加上二分之一的std,y2的值记做avg减去二分之一,之后通过fill_between将这个范围绘制到图像中,将颜色设置为蓝色,标签记做Standard Deviation。此时输出的时候发现没有标签,是因为没有调用plt.legend(loc=2),加上之后输出就得到了正确的结果。
三、代码
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
list=[[1,2,3,4,5,6],[2,4,6,8,10,12],[1,3,5,7,9,11],[1.1,2.2,3.3,4.4,5.5,6.6],[3,6,9,12,15,18],[4,8,12,16,20,24
],[5,10,15,20,25,30],[1.5,2.5,3.5,4.5,5.5,6.5],[1,4,7,10,13,16],[2,5,8,11,14,17]]
a=np.array(list)
std=[]
avg=[]
x=[1,2,3,4,5,6,7,8,9,10]
for i in range(0,len(list)):std.append(np.std(a[i]))avg.append(np.mean(a[i]))
fig=plt.figure()
plt.xticks(x,x)
plt.plot(x,avg,marker="o",color='#858687',markeredgecolor='black',linewidth=3,label="Mean Value")
for i in range(len(avg)):plt.text(x[i],avg[i],avg[i],fontsize=10)
y1=[]
y2=[]
for i in range(len(x)):y1.append(avg[i]+std[i]/2)y2.append(avg[i] - std[i] / 2)
plt.fill_between(x,y1,y2,color='#d2e3f0',label="Standard deviation")
plt.grid()
plt.legend(loc=2)
plt.show()
四、实验结果
Matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。Matplotlib可用于Python脚本,Python和IPython Shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。
Matplotlib尝试使容易的事情变得容易,使困难的事情变得可能。您只需几行代码就可以生成图表,直方图,功率谱,条形图,误差图,散点图等。有关示例,请参见 示例图和缩略图库。
为了简单绘图,该pyplot模块提供了类似于MATLAB的界面,尤其是与IPython结合使用时。对于高级用户,您可以通过面向对象的界面或MATLAB用户熟悉的一组功能来完全控制线型,字体属性,轴属性等。