【问题标题】:bar plot with vertical lines for each bar条形图,每个条形都有垂直线
【发布时间】:2020-05-28 07:20:06
【问题描述】:
%matplotlib inline
import matplotlib
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'index' : ['A', 'B', 'C', 'D'], 'first': [1.2, 1.23, 1.32, 1.08], 'second': [2, 2.2, 3, 1.08], 'max': [1.5, 3, 0.9, 'NaN']}).set_index('index')

我想绘制一个以firstsecond 为条形的水平条形图。 如果其他列,我想使用max 列在相应值处显示一条垂直线。

我现在只管理条形图。

像这样:

关于如何实现这一点的任何提示?

谢谢

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    我已将NaN 替换为一些有限值,然后您可以使用以下代码

    df = pd.DataFrame({'index' : ['A', 'B', 'C', 'D'], 'first': [1.2, 1.23, 1.32, 1.08], 
                       'second': [2, 2.2, 3, 1.08], 'max': [1.5, 3, 0.9, 2.5]}).set_index('index')
    
    plt.barh(range(4), df['first'], height=-0.25, align='edge')
    plt.barh(range(4), df['second'], height=0.25, align='edge', color='red')
    plt.yticks(range(4), df.index);
    
    for i, val in enumerate(df['max']):
        plt.vlines(val, i-0.25, i+0.25, color='limegreen')
    

    【讨论】:

    • 您可以添加一个测试 if value != 'NaN': 以跳过 max 为 'NaN' 的行。
    • 非常感谢! vlines 完成了这项工作。对我来说,即使NaN 也有效。
    猜你喜欢
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 2011-01-23
    • 2017-08-28
    相关资源
    最近更新 更多