代码之家  ›  专栏  ›  技术社区  ›  pookie

带表格格式的Matplotlib条形图

  •  1
  • pookie  · 技术社区  · 7 年前

    我在绘图的底部添加了一个表,但它存在一些问题:

    1. 左边的填充物太少。
    2. 单元格太小,无法容纳其中的文本。
    3. 表格离绘图底部太近了。
    4. 属于行名称的单元格的颜色与条形图的颜色不匹配。

    我把这个摆弄得快疯了。有人能帮我解决这些问题吗?

    import seaborn as sns
    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib
    # Set styles
    plt.style.use(['seaborn-paper', 'seaborn-whitegrid'])
    plt.style.use(['seaborn'])
    sns.set(palette='colorblind')
    matplotlib.rc("font", family="Times New Roman", size=12)
    
    labels = ['n=1','n=2','n=3','n=4','n=5']
    a = [98.8,98.8,98.8,98.8,98.8]
    b = [98.6,97.8,97.0,96.2,95.4]
    bar_width = 0.20
    data = [a,b]
    print(data)
    colors = plt.cm.BuPu(np.linspace(0, 0.5, len(labels)))
    columns = ('n=1', 'n=2', 'n=3', 'n=4', 'n=5')
    
    index = np.arange(len(labels))
    plt.bar(index, a, bar_width)
    plt.bar(index+bar_width+.02, b, bar_width)
    plt.table(cellText=data,
              rowLabels=['a', 'b'],
              rowColours=colors,
              colLabels=columns,
              loc='bottom')
    
    plt.subplots_adjust(bottom=0.7)
    
    plt.ylabel('Some y label which effect the bottom padding!')
    plt.xticks([])
    plt.title('Some title')
    plt.show()
    

    这是输出:

    enter image description here

    现在可以了,但如果其他人有问题:请确保您没有查看绘图以及您对绘图所做的更改 IntelliJ SciView 因为它不能准确地表示更改并引入一些格式问题!

    1 回复  |  直到 7 年前
        1
  •  2
  •   William Miller devops-admin    7 年前

    我认为可以通过在使用创建表时设置边界框来解决第一个问题 bbox 这样地:

    bbox=[0, 0.225, 1, 0.2]
    

    [left, bottom, width, height] .

    对于第二个问题(颜色),这是因为 color 数组不对应于 seaborn 着色。您可以查询 海本 颜色调色板

    sns.color_palette(palette='colorblind')
    

    海本 正在使用。

    检查以下修改:

    import seaborn as sns
    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib
    # Set styles
    plt.style.use(['seaborn-paper', 'seaborn-whitegrid'])
    plt.style.use(['seaborn'])
    sns.set(palette='colorblind')
    matplotlib.rc("font", family="Times New Roman", size=12)
    
    labels = ['n=1','n=2','n=3','n=4','n=5']
    a = [98.8,98.8,98.8,98.8,98.8]
    b = [98.6,97.8,97.0,96.2,95.4]
    bar_width = 0.20
    data = [a,b]
    
    colors = sns.color_palette(palette='colorblind')
    columns = ('n=1', 'n=2', 'n=3', 'n=4', 'n=5')
    
    index = np.arange(len(labels))
    fig = plt.figure(figsize=(12,9))
    plt.bar(index, a, bar_width)
    plt.bar(index+bar_width+.02, b, bar_width)
    plt.table(cellText=data,
              rowLabels=[' a ', ' b '],
              rowColours=colors,
              colLabels=columns,
              loc='bottom',
              bbox=[0, 0.225, 1, 0.2])
    
    fig.subplots_adjust(bottom=0.1)
    
    plt.ylabel('Some y label which effect the bottom padding!')
    plt.xticks([])
    plt.title('Some title')
    plt.show()
    

    我还将子批次调整更改为 subplot_adjust(bottom=0.1)

    Output