为了账号安全,请及时绑定邮箱和手机立即绑定

突出显示条形图中的特定条形

突出显示条形图中的特定条形

繁星点点滴滴 2021-07-22 22:14:18
我有两个数据框df1和df2. df2是 的子集df1。我想绘制df1已识别df2行(不同的条形颜色或其他东西)的水平条形图。谢谢你。%matplotlib inline import pandas as pdimport matplotlib as pltd1 = {    'index' : [1, 2, 3, 4, 5],     'col1'  : [5, 8, 6, 4, 2]}d2 = {    'index' : [3, 5],     'col1'  : [6, 2]}df1 = pd.DataFrame(d1).set_index(["index"])df2 = pd.DataFrame(d2).set_index(["index"])df1.plot(kind="barh", grid=False)
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

我认为要走的路是连接数据帧并为缺失值附加 nans


import pandas as pd

import matplotlib.pyplot as plt


d1 = {

    'index' : [1, 2, 3, 4, 5], 

    'col1'  : [5, 8, 6, 4, 2]

}


d2 = {

    'index' : [3, 5], 

    'col1'  : [6, 2]

}


df1 = pd.DataFrame(d1).set_index(["index"])

df2 = pd.DataFrame(d2).set_index(["index"])


plotThis = pd.concat([df1, df2], axis = 1, ignore_index = True)


plotThis.plot(kind = 'barh')


查看完整回答
反对 回复 2021-07-27
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

不幸的是,pandas 的barh功能不允许我们为每个条形选择不同的颜色。但既然情况似乎如此,我会选择不使用 Pandas 绘图函数,而是直接使用 matplotlib 的函数。


在这种情况下,有很多方法可以达到预期的结果。这是一种选择:


fig, ax = plt.subplots()

c = ['C2' if i in df2.index else 'C1' for i in df1.index]

ax.barh(y=df1.index,width=df1.col1,color=c)

ax.grid(False)

//img1.sycdn.imooc.com//60ffb7cf0001590405860446.jpg

df3 = df1.loc[df1.index.difference(df2.index)].append(df2, sort=False).sort_index()

df3.plot(kind='barh', stacked=True, grid=False)

第一行创建一个具有以下内容的新数据框:


    col1    col2

index       

1   5.0     NaN

2   8.0     NaN

3   NaN     6.0

4   4.0     NaN

5   NaN     2.0

绘制此数据框会产生所需的输出。

//img1.sycdn.imooc.com//60ffb7dc00016ea106440463.jpg

查看完整回答
反对 回复 2021-07-27
  • 2 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信