浏览量: 81 次浏览

Matlab库画图基础教程

2020年2月25日 0 作者 Nie Hen

在日常数据处理中 经常会用到做表,而在程序里面 在python里面画图画表最常用的就是使用matlab这个库 下面会介绍一些基础常用用法

数据可视化 使用plot()

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#随机生成1000个数据
data = pd.Series(np.random.randn(1000),index=np.arange(1000))

#为了方便观看效果, 我们累加这个数据
data.cumsum()

#pandas 数据可以直接观看其可视化形式
data.plot()

plt.show()

data本来就是一个数据,所以我们可以直接plot
plot可以指定很多的参数 http://pandas.pydata.org/pandas-docs/version/0.18.1/visualization.html

基础应用

使用import导入模块matplotlib.pyplot,并简写成plt 使用import导入模块numpy,并简写成np

import matplotlib.pyplot as plt
import numpy as np
使用np.linspace定义x:范围是(-1,1);个数是50. 仿真一维数据组(x ,y)表示曲线1.

x = np.linspace(-1, 1, 50)
y = 2*x + 1
#使用plt.figure定义一个图像窗口. 使用plt.plot画(x ,y)曲线. 使用plt.show显示图像.

plt.figure()
plt.plot(x, y)
plt.show()
可以设置线条等一些属性 

plt.figure(num=3, figsize=(8, 5),)  #使用plt.figure定义一个图像窗口:编号为3;大小为(8, 5). 

plt.plot(x, y2) 

plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')# 使用plt.plot画(x ,y1)曲线,曲线的颜色属性(color)为红色;曲线的宽度(linewidth)为1.0;曲线的类型(linestyle)为虚线.

设置坐标轴

设置坐标轴的范围,单位长度,替代文字等。

使用plt.xlim设置x坐标轴范围:(-1, 2);
使用plt.ylim设置y坐标轴范围:(-2, 3);
使用plt.xlabel设置x坐标轴名称:’I am x’;
使用plt.ylabel设置y坐标轴名称:’I am y’;

plt.xlim((-1, 2))
plt.ylim((-2, 3))
plt.xlabel(‘I am x’)
plt.ylabel(‘I am y’)
plt.show()

分别设置x轴和y轴的刻度 并更改刻度的名称
new_ticks = np.linspace(-1, 2, 5)
print(new_ticks)
plt.xticks(new_ticks)
plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])
plt.show()

使用plt.gca获取当前坐标轴信息.
使用.spines设置边框:右侧边框;
使用.set_color设置边框颜色:默认白色;
使用.spines设置边框:上边框;
使用.set_color设置边框颜色:默认白色;

ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.show()
调整坐标轴

ax.xaxis.set_ticks_position(‘bottom’)
#使用.xaxis.set_ticks_position设置x坐标刻度数字或名称的位置:bottom

ax.spines[‘bottom’].set_position((‘data’, 0))
#使用.spines设置边框:x轴;使用.set_position设置边框位置:y=0的位置;

同理 设置y轴的位置
ax.yaxis.set_ticks_position(‘left’)

ax.spines[‘left’].set_position((‘data’,0))
#使用.set_position设置边框位置:x=0的位置

注意 x轴的所有位置 top,bottom,both,default,none)
y轴的所有位置 outward,axes,data

legend图例

legend 图例就是为了帮我们展示出每个数据对应的图像名称.

plt.legend(loc=’upper right’) #设置 legend 的位置

plt.legend(handles=[l1, l2], labels=[‘up’, ‘down’], loc= 0)
#使用legend 更换label名称
#其中loc = best为自动分配最佳位置 ‘best’ : 0, 以下为loc中的其余参数

 # '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,

应用统计班级交作业情况做图

最终形式
enter description here


import os import matplotlib.pyplot as plt import matplotlib.font_manager from matplotlib.pyplot import MultipleLocator def statistical_data(path,ALL_data=False): raw_path = os.getcwd() + '\data'+'\\'+path #print(raw_path) father_floder = os.listdir(raw_path) #print(father_floder) sta_data = [] for path in father_floder: single_data = [] single_data.append(path) subdir_path = raw_path +'\\'+path single_data.append(len(os.listdir(subdir_path))) sta_data.append(single_data) #print(sta_data) make_Histogram(sta_data) def takeSecond(elem): return elem[1] def make_Histogram(raw_data): name_list = [] num_list = [] bar_color = [] xcolor = ['darkred','red','orangered','chocolate','yellow','olive','lime'] raw_data.sort(key=takeSecond,reverse=True) print(raw_data) raw_data = list(reversed(raw_data)) for i,data in enumerate(raw_data) : name_list.append((data[0].split('_')[1])) num_list.append(data[1]) bar_color.append(xcolor[data[1]]) print(name_list) print(num_list) plt.figure(figsize=(8, 15)) zhfont1 = matplotlib.font_manager.FontProperties(fname='D:\python_code\\1702english\msyh.ttf') plt.title('自动化1702第一周英语学习统计',fontsize='large',fontproperties=zhfont1) plt.ylabel('姓名',fontproperties=zhfont1) plt.xlabel('次数',fontproperties=zhfont1) plt.rc('xtick', labelsize=6) plt.rc('ytick', labelsize=12) y_name = range(1,46,5) plt.yticks(y_name,name_list,fontproperties=zhfont1) # y轴刻度 #plt.barh(range(len(num_list)), num_list,tick_label = name_list) plt.xticks(range(len(num_list)),range(7)) # x轴刻度 name_list1 =name_list[:10] plt.barh(range(len(name_list)), num_list,height=0.8,tick_label = name_list,align="center",color=bar_color) #plt.barh(range(len(num_list)), num_list,height=0.8,tick_label = name_list[10:],align="center",color='g') plt.grid(True,linestyle=':',color='r',alpha=0.6) plt.show() plt.savefig('1.jpg', dpi=500) if __name__ == "__main__": new_folder = "第一周" statistical_data(new_folder)