Datawhale学习打卡-02(Matplotlib)

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模块需要再了解一下,后续再跟进。

此处略过,后续上传下篇时再记录心得。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值