Datawhale学习打卡-02(Matplotlib)
参考资料:第二回:艺术画笔见乾坤
第二回:艺术画笔见乾坤(上篇)
一、基本概念和用法
关于matplotlib的基本概念和用法,我整理了如下思维导图。
二、基本元素primitive
1. 2Dlines折线图
import matplotlib.pyplot as plt
x = range(0,5)
y = [2,5,7,8,10]
z = [2,6,12,7,5]
plt.plot(x,y)
plt.plot(x,z);
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
fig = plt.figure()
ax = fig.add_subplot(111)
line1 = Line2D(x, y)
line2 = Line2D(x, z)
ax.add_line(line1)
ax.add_line(line2,)
plt.setp(line2, color='r', linewidth=2);
ax.set_xlim(min(x), max(x))
ax.set_ylim(min(y), max(y))
ax.set_ylim(min(z), max(z),)
plt.show()
两种模式的基本用法如上,第一种是单行单列单图,第二种可以作用于多行多列多图,多图插入用法在subplot后的括号内,三位都是个位数时可以不加逗号。修改线型参数可用setp()方法。固定格式背下来就完事了。
linewidth线宽、linestyle线型、color颜色、marker点标记、其他参数
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
x = np.arange(10)
y = 2.5 * np.sin(x / 20 * np.pi)
yerr = np.linspace(0.05, 0.2, 10)
plt.errorbar(x, y + 3, yerr=yerr, label='both limits (default)');
![](https://img-blog.csdnimg.cn/577b9c1a89ed448fbdc503789794d4c7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA546J5qCR5Li06aOO5biF5b635Y2O,size_9,color_FFFFFF,t_70,g_se,x_16#pic_center)
如图绘制误差折线图,np.linspace方法用来生成固定间隔数集
x:需要绘制的line中点的在x轴上的取值
y:需要绘制的line中点的在y轴上的取值
yerr:指定y轴水平的误差
xerr:指定x轴水平的误差
fmt:指定折线图中某个点的颜色,形状,线条风格,例如‘co–’
ecolor:指定error bar的颜色
elinewidth:指定error bar的线条宽度
2. 直方图和条形图
直方图hist
x: 数据集,最终的直方图将对数据集进行统计
bins: 统计的区间分布
xlim: 设置X轴分布范围
range: tuple, 显示的区间,range在没有给出bins时生效
density: bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density
histtype: 可选{‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似
align: 可选{‘left’, ‘mid’, ‘right’}之一,默认为’mid’,控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认
log: bool,默认False,即y坐标轴是否选择指数刻度
stacked: bool,默认为False,是否为堆积状图
import matplotlib.pyplot as plt
import numpy as np
x=np.random.randint(0,100,100) #生成[0-100)之间的100个数据,即 数据集
bins=np.arange(0,101,10) #设置连续的边界值,即直方图的分布区间[0,10),[10,20)...
plt.hist(x,bins,color='fuchsia',alpha=0.5)#alpha设置透明度,0为完全透明
plt.xlabel('scores')
plt.ylabel('count')
plt.xlim(0,100)#设置x轴分布范围
plt.show()
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import re
x=np.random.randint(0,100,100) #生成[0-100)之间的100个数据,即 数据集
bins=np.arange(0,101,10) #设置连续的边界值,即直方图的分布区间[0,10),[10,20)...
df = pd.DataFrame(columns = ['data'])
df.loc[:,'data'] = x
df['fenzu'] = pd.cut(df['data'], bins=bins, right = False,include_lowest=True)
df_cnt = df['fenzu'].value_counts().reset_index()
df_cnt.loc[:,'mini'] = df_cnt['index'].astype(str).map(lambda x:re.findall('\[(.*)\,',x)[0]).astype(int)
df_cnt.loc[:,'maxi'] = df_cnt['index'].astype(str).map(lambda x:re.findall('\,(.*)\)',x)[0]).astype(int)
df_cnt.loc[:,'width'] = df_cnt['maxi']- df_cnt['mini']
df_cnt.sort_values('mini',ascending = True,inplace = True)
df_cnt.reset_index(inplace = True,drop = True)
#用Rectangle把hist绘制出来
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
for i in df_cnt.index:
rect = plt.Rectangle((df_cnt.loc[i,'mini'],0),df_cnt.loc[i,'width'],df_cnt.loc[i,'fenzu'])
ax1.add_patch(rect)
ax1.set_xlim(0, 100)
ax1.set_ylim(0, 16)
plt.show()x
这个没看懂,pandas和re模块需要再了解一下,后续再跟进。
此处略过,后续上传下篇时再记录心得。