一表联通三大绘图工具

一表联通三大绘图工具

绘图的三个步骤:1.设置绘图的style; 2.准备数据;3.绘图,特别是后两个步骤,讲究无缝衔接,一气呵成。
pandas本身设置了绘图的接口,dataframe.plot()和series.plot(), 另外, seaborn和plotly也实现了对df的支持,以上的操作,已经极大地增加了绘图的流畅度。说到这,大家以为我题目中的“表”指的是pandas的dataframe,也算对,更具体来说我指的是pandas的透视表。透视表在data frame的基础上提供了聚合函数的功能, Index和columns转换等功能,能够方便地获得符合绘图要求的数据表,使得数据整理和绘图无缝衔接,进一步提高了绘图的流畅度。或许有的已经在用,我这里给总结一下。

一、matplotlib

Pandas本身提供了matplotlib的接口,经过整理的透视表后面加上.plot(),不添加任何的参数就可以展示数据图形,其所绘的图形可以用任何matplotlib的命令进行修饰。值得一提,这里index是一个比较特殊的一个存在,在绘图中的有着重要的作用,而后面介绍的两个文库,他们没有index的这个概念。如果不指定X轴的情况下,index会作为X轴, Column的数据作为y轴。举个例子。

import pandas as pd 
import matplotlib.pyplot as plt
df=pd.read_csv('/home/mw/input/breast_cancer9185/SEER Breast Cancer Dataset .csv')
# df.info()
#最简单的用法,这里还没用到透视表,因为用到的数据都已经在df表里了
plt.style.use('ggplot')
_,(ax1,ax2)=plt.subplots(1,2,figsize=(10,6),sharey=True)
df.plot(x='Age',y='Tumor_Size',kind='scatter',ax=ax1)
ax1.set_title('DataFrame')

#接下来,我们用一下透视表
#绘图题目:不同Estrogen_Status(X轴)下的Tumor_Size
df_matplotlib=pd.pivot_table(data=df,index='Estrogen_Status',aggfunc=['mean','std'],values='Tumor_Size',columns='Race ')

df_matplotlib.plot(y='mean',kind='bar',ax=ax2,yerr='std',capsize=4)#不指定x的情况下,默认index是X轴;这里大家可以试一试不指定y的情况。
ax2.set_ylabel('Tumor Size')
ax2.set_title('Pivot_table')
plt.legend(loc='center right',bbox_to_anchor=(2.4,0.5))
df_matplotlib.head()

在这里插入图片描述

二、seaborn

seaborn是在matplotlib的基础上进行的高级封装,其的特点就是对data frame的支持以及具有统计属性,所以说用seaborn进行绘图代码,更加的简洁。与pandas的绘图功能相比,seaborn没有索引的概念,它对数据表里的所有的数据一视同仁,都是引用column里面的数据,也就是说必须指定x和y, 这也是后面要提到的plotly的一种方式,所以如果要用到索引里面的数据,就要用pandas reset_index命令的将index里边的数据释放到column里面。下面我们来看一个例子:

import seaborn as sns
df.info()
print('-'*100)
#我们还是使用上图的第二个题目:不同Estrogen_Status(X轴)下的Tumor_Size,上面是用pivot_table和matplotlib实现的
_,(ax1,ax2)=plt.subplots(1,2,figsize=(10,6))
sns.barplot(data=df,x='Estrogen_Status',y='Tumor_Size',hue='Race ',ci='sd',capsize=0.1,ax=ax1)
ax1.legend(loc='upper center',bbox_to_anchor=(0.5,1.2))

#下面我们使用透视表结合seaborn,绘图题目:每个年龄阶段的死亡和非死亡的人数,死亡的人数是原来表中没有的,我们用透视表来实现
df_sns=pd.pivot_table(df,index='Age',columns='Status',aggfunc='count',values='A_Stage')
df_sns=df_sns.reset_index()#释放所有的列
df_sns=pd.melt(df_sns,id_vars='Age',var_name='状态',value_name='人数')#melt也常用
sns.scatterplot(data=df_sns,x='Age',y='人数',size='人数',hue='状态',ax=ax2,legend='brief')
ax2.set_xlabel('年龄')

df_sns.info()

在这里插入图片描述

三、plotly

plotly据说是python绘图的天花板,支持的图表类型众多,功能也丰富,对机器学习、AI的绘图也有支持。 plotly提供了两种绘图模式,一种高级封装的绘图模式的叫做express模式,就是我所说的连接透视表的接口, 大家可以看到plotly这个对数据的引用形式和seaborn的引用形式,非常的类似。想来大家已经了解到这篇文章的核心内容了,plotly特色的一种图是动态图, 我们来看一看。

import plotly.express as px
df.info()
print('-'*100)

#绘图题目:不同年龄,不同肿瘤尺寸的生存时间的平均值的气泡动态图

df_plotly=pd.pivot_table(df,values='Survival_Months',index=['Age','Tumor_Size','Grade'],aggfunc='mean')#不想变化的column可以先藏到索引里
df_plotly=df_plotly.reset_index()#然后重置索引
print(df_plotly)
fig = px.scatter(df_plotly, x="Tumor_Size", y="Survival_Months",
	         size="Survival_Months",color='Grade',
                 hover_name="Age", size_max=60,animation_frame='Age')
fig.show()

#color部分还是有一个问题,本来是至少三个级别,只显示出两个级别,大家找到问题所在可以通知我😊。

在这里插入图片描述

四、总结

也略略地考察了pyecharts,似乎pyechart还不支持pandas,希望以后能支持吧。

有了透视表作为共同的支持,我们可以在几个绘图软件之间从容转换, 绘图本身也变得简洁,希望能对大家有所帮助,有不全面的地方,也请大家指出,共同学习进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

预测模型的开发与应用研究

文中代码请大家随意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值