画图-pandas与seaborn:箱线图/面积图/柱状、条形/直方图、密度图/ 散点图/六边蜂箱图/饼图

sns:直方图和密度图、散点图和散点矩阵

df/s.plot()参数

df = pd.read_csv()
Series.boxplot()
df.plot(
	【数据/图类型】:
	x='col1',y='col2'指定xy,也可以不用
	kind='',		无kind则默认折线图
	logy, 			y轴上是否转化为log
	yerr,xerr,		标记误差

	【图例/标签等】:
	ax,				绘制的图的子图位置
	figsize,		图像大小
	labels,			用作图例的标签
	legend,			添加一个subplot的图例,默认True

	【样式】:
	color,
	style,			颜色、标记、线形
	alpha,			填充不透明度
	colormap=		str类性,直接写名称

	【轴/刻度】:
	use_index,		是否将对象的索引用作X轴刻度标签,默认是
	rot,			旋转刻度标签
	xticks/yticks,	刻度值
	xlim/ylim,		范围
	x_compat=True	对于时间序列,由原来简单标记变为显示出‘2019-02’的形式
	grid,			是否显示轴网格线(默认打开)

	【子图】:
	subplots,				是否将各列绘制到单独的subplot中,默认False
	sharex/sharey,			是否共用一个X轴,包括刻度和范围,与subplots共用
	layout=()				与subplots同用,变为几行几列

	sort_columns,			以字母表顺序绘制各列,默认使用当前列顺序
	secondary_y=True		是否在原有坐标下建立次坐标轴,True,False
	)
kind可选类别:
'box':箱线		'line':折线		'bar':柱形图	'barh':条形
'kde':密度图	'area':面积图	'pie':饼图		'hist':直方图
'density':密度图				'scatter':散点  'hexbin':
如果未指定xy,DataFrame将对象的索引用作X轴刻度标签,为每列绘制一条线,自动创建图例;

1箱线与面积图

df = pd.DataFrame(np.random.randint(1,10,(50,2)), columns=['A','B'])
df['C'] = np.random.choice(['red', 'blue'], size=50)
df.head()
	A	B	C
0	8	6	blue
1	1	7	blue
2	1	3	red
3	8	4	red
4	6	9	blue
colors={'boxes': 'DarkGreen', 'whiskers': 'DarkOrange', 'medians': 'DarkBlue', 'caps': 'Gray'}:各位置颜色
df.plot.box(color=colors, sym='r+', vert=True, positions=[]) 
# 每列绘制一个箱线,sym是异常值样式, vert=True表示默认的竖向, positions可确定位置

在这里插入图片描述

df.boxplot():每列绘制一个箱线
df.boxplot(by=[分类序列1, 分类序列2]):每个序列根据分类(组合)绘制一个子图,几个列就有几个子图

df.boxplot(by=['C'])

在这里插入图片描述

df.groupby(['C']).boxplot():根据类别绘图,有几类就有几个子图(和上面相反)

在这里插入图片描述

2面积图

df.plot.area(stacked=True):默认是堆积的面积图

df[['A','B']].plot.area(stacked=True, color=plt.cm.Pastel1([0,1]))

在这里插入图片描述

3柱状图和条形图

df.plot.bar/barh(color=[], stacked=True):堆积列数据到一个X类别下,否则一个X类别下多条柱形
s.plot.bar/barh()

df.index = pd.date_range('2021-02-04',periods=50,freq='D')
df.head()
			A	B	C
2021-02-04	8	6	blue
2021-02-05	1	7	blue
2021-02-06	1	3	red
2021-02-07	8	4	red
2021-02-08	6	9	blue

df1 = df.iloc[:10,:2]
fig,axes=plt.subplots(1,2, figsize=(6,4))
df1.plot.barh(ax=axes[0],color=plt.cm.Pastel1([0,1]), legend=False)
axes[0].set_yticks(list(range(len(df1))))
axes[0].set_yticklabels(df1.index.strftime('%m-%d'))
axes[0].set_ylabel(u'2021年',rotation='horizontal',y=0)

df1.plot.bar(stacked=True,ax=axes[1],color=plt.cm.Pastel1([0,1]), legend=False)
axes[1].set_xticks(list(range(len(df1))))
axes[1].set_xticklabels(df1.index.strftime('%m-%d'))
axes[1].set_xlabel(u'2021年', loc='right')
plt.legend(bbox_to_anchor=(1,0.8))

在这里插入图片描述

4直方图和密度图

【直方图】:
s/df.plot.hist(bins=10, stack=False, orientation='horizontal', cumulative=False):
 直方图        分段数量     是否堆积       方向                        是否累计

df.hist():为每列单独画一个图,上面的是画在一个图里
s.hist(by=分组序列):传入长度=s的分组序列,结果将分组成几个子图

【密度图】:
s/df.plot.kde()
s.plot.density():密度曲线图
sns.distplot(数据序列,bins=10,color='k'):直方图+密度图
import seaborn as sns

fig,axes = plt.subplots(2,2, figsize=(6,5))
df[['A','B']].plot.hist(stacked=True, color=plt.cm.Pastel1([0,1]), ax=axes[0,0], title=u'df堆积频率直方图')
axes[0,0].grid(axis='y', linewidth=0.3)

df['A'].plot.hist(orientation='horizontal', cumulative=True, color=plt.cm.Pastel1([0]), ax=axes[0,1], title=u'累计频率直方图',legend=False)

df[['A','B']].plot.kde(color=plt.cm.Pastel1([0,1]), ax=axes[1,0], title=u'df密度图kde')
axes[1,0].legend(loc='upper right')

sns.histplot(df['A'], bins=10, ax=axes[1,1])
axes[1,1].set_title(u'sns密度+直方图')
axes[1,1].legend(['A'],bbox_to_anchor=(1,0.8))

plt.subplots_adjust(hspace=0.38,wspace=0.35)

在这里插入图片描述

df.hist(column='A',by='C')

在这里插入图片描述

5散点图及矩阵

【散点图】:
df.plot.scatter(x='A',y='B',label='g1', c='C', cmap='autumn',s=df['C']*20)
c和cmap不同同时存在,设置c则表示根据数值大小颜色有深浅。
绘制两个/多个散点图:
ax = df.plot.scatter(颜色样式标签等)
df.plot.scatter(颜色样式标签等, ax=ax)
df.plot.scatter(颜色样式标签等, ax=ax)
...

sns.regplot('x数据','y数据',data='df'):散点图+线性回归的线,也可以没有data来源,只写两个序列

【散点矩阵】:
from pandas.plotting import scatter_matrix
scatter_matrix(df, diagonal='kde'):指定对角线图的类型
sns.pairplot(df,diag_kind='kde',plot_kws={'color':'','alpha':}):散点图矩阵,diag_kind指定对角线图形类别,plot_kws为非对角图的配置
-------------------------------------------------------------------
【散点图】:
df = pd.DataFrame(np.random.randn(1000, 3), columns=['a', 'b', 'c'])
fig,ax=plt.subplots(1,1)
df.plot.scatter(x='a',y='b',s=abs(df['b'])*20,ax=ax,color='#66CCFF',label='b')
plt.legend()
df.plot.scatter(x='a',y='c', s=abs(df['c'])*20,ax=ax,label='c',color='#FF99CC')
plt.legend()
plt.ylabel('b/c')

【散点矩阵】:
from pandas.plotting import scatter_matrix
scatter_matrix(df, diagonal='kde')
sns.pairplot(df, diag_kind='kde')

在这里插入图片描述

scatter_matrix(df, diagonal='kde')

在这里插入图片描述

sns.pairplot(df, diag_kind='kde')

在这里插入图片描述

6六边蜂箱图

适用于数据量大的情况, 类似散点图
df.plot.hexbin(x='col1', y='col2', gridsize=30):计算每对(x,y)值附近的点的数量
df.plot.hexbin(x='col1', y='col2', C='col3', reduce_C_function=函数, gridsize=30):以C中的值作为每对(x,y)对应的值,reduce_C_function应用于每个小区域的数据,得到一个标量,和C联用就是对'col3'的数据应用函数
df = pd.DataFrame(np.random.rand(360,360)+np.sin(np.linspace(-np.pi/4,(4/3)*np.pi,360)).reshape(1, 360).repeat(360, axis=0)*30, 
                  columns=np.linspace(0, 180, 360), index=np.linspace(-90,90,360))
df.index.name='经度'
df.columns.name='纬度'
df = df.stack().reset_index()
df.columns = ['经度', '纬度', '温度']
df
		经度	纬度	温度
0		-90.0	0.000000	-20.895695
1		-90.0	0.501393	-20.362729
2		-90.0	1.002786	-19.963455
3		-90.0	1.504178	-19.530852
4		-90.0	2.005571	-19.255508
...		...		...			...
129595	90.0	177.994429	-24.782752
129596	90.0	178.495822	-25.135172
129597	90.0	178.997214	-25.044194
129598	90.0	179.498607	-24.899114
129599	90.0	180.000000	-25.623183

fig,ax=plt.subplots(1,2, figsize=(12,5))
df.plot.hexbin(x='经度',y='纬度', gridsize=25,ax=ax[0])
df.plot.hexbin(x='经度',y='纬度',gridsize=25, C='温度', reduce_C_function=np.max,ax=ax[1])

在这里插入图片描述

7饼图

s.plot.pie(labels=[], colors=[], autopct='%.2f''%1.2%%'):类别为index,再根据值绘图
df.plot.pie(y='col1'):根据某一列绘图
df.plot.pie(subplots=True, legend=False):绘制全部列,取消图例
可使用小数表示百分比,如果和<1,饼图是不完整的
df = pd.DataFrame({'mass': [0.330, 4.87 , 5.97], 'radius': [2439.7, 6051.8, 6378.1]},  index=['Mercury', 'Venus', 'Earth'])
		mass	radius
Mercury	0.33	2439.7
Venus	4.87	6051.8
Earth	5.97	6378.1
df.plot.pie(subplots=True, figsize=(5, 5), colors=plt.cm.Pastel1([0,1,2]), legend=False)
plt.legend(df.index, bbox_to_anchor=(1,0.4),fontsize=8)
plt.subplots_adjust(wspace=0.4)

在这里插入图片描述

对于缺失值的处理

类型			处理
line			保留缺口
line(stacked)	填充0
bar				填充0
scatter			删除
histogram		删除(列向)
box				删除(列向)
area			填充0
kde				删除(列向)
hexbin			删除
pie				填充0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值