Python 如何使用matplotlib执行条件区域打印?

Python 如何使用matplotlib执行条件区域打印?,python,pandas,matplotlib,seaborn,Python,Pandas,Matplotlib,Seaborn,我已经基于一系列数据创建了以下dataframe df['data_classification'] = df.myDatarange.apply(lambda a:'Very good' if a>=-90 else ('Good' if (a>= -100 or a<=-91) else ('Modera

我已经基于一系列数据创建了以下dataframe

df['data_classification'] = df.myDatarange.apply(lambda a:'Very good' if a>=-90 
                                       else ('Good' if (a>= -100 or a<=-91) 
                                             else ('Moderate' if (a>= -110 or a<=-101) 
                                                   else ('Poor' if (a>= -123 or a<=-111) 
                                                         else ('Bad' if (a>= -140 or a<=-124) 
                                                               else 'Off' )))))
如何根据分类将上述数据范围绘制为面积图?有没有比面积图更好的方法来表达我的数据?网络上有一些例子,但在条件方面不是很清楚。

Seaborn's可以使用
hue
参数为每个与“数据分类”相对应的条形图上色。新的“数据分类”列可以更快地创建,并且更易于通过修改

条形图可用作线形图的背景,以显示每个值的分类

下面是一个让您开始学习的示例:

从matplotlib导入pyplot作为plt
将numpy作为np导入
作为pd进口熊猫
导入seaborn作为sns
df=pd.DataFrame({'myDatarange':np.random.randint(-150,-50,size=50)})
范围=[-10**6、-140、-123、-110、-100、-90、10**6]
df['data_classification']=pd.cut(df['myDatarange'],ranges,right=False,
标签=['Off','Bad','Poor','medium','Good','Very Good'])
图,ax1=plt.子批次(图大小=(12,4))
ax1.绘图(df.index,df['myDatarange',color='blue',linewidth=2,alpha=0.9,label=“myDatarange”)
条形图(x=df.index,y=[df['myDatarange'].min()]*len(df),
色调class='data_classification',alpha=0.5,调色板class='inferno',减淡=False,数据=df,ax=ax1)
对于ax1.patches中的条形图:#可选设置条形图以填充整个背景,默认seaborn将宽度设置为80%左右
条。设置宽度(1)
plt.图例(bbox_to_anchor=(1.02,1.05),位置=左上角)
plt.紧_布局()
plt.show()


PS:如果你想将0放在底部(由于y值为负值,现在是顶部),你可以调用
ax.inverte\u yaxis()

看看如何使用
pd.cut
而不是If-else结构,以获得我认为更清晰易读的代码。你好,约翰和斯科特。谢谢你的回复。我尝试了约翰的解决方案。它帮助我澄清了一些概念,但并不是我想要展示的输出。是否可以简单地有两个图,一个myDatarange线图。在这个情节下面,是另一个简单的情节,它显示了所提到的一个类别,即好的,坏的等等?我还想过简单地为myDatarange的不同类别使用不同的颜色。但是我对这个概念的理解还不足以实现它。你能编辑你的原始问题并添加更多的信息吗,也许是一些简单的数据作为例子和一个想要的图(可能带有使用绘画软件的注释)?你说的“面积图”到底是什么意思?当所有的信息都放在一个图中时,为什么要有两个子图?(如果您想将这两部分分开,只需调用上述代码并更改ax=ax2即可)。你最近的编辑回答了我的问题。谢谢你的支持对不起,我以前不能这么做,因为我的观点没有那么重要。现在我可以了
x1 = df1.index
y1 = df1.myDatarange
f, (ax1,ax2) = plt.subplots(2,figsize=(5, 5))
ax1.plot(x1,y1,color='red', linewidth=1.9, alpha=0.9, label="myDataRange")
plt.show()