python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Matplotlib发散条形图

Python+Matplotlib绘制发散条形图的示例代码

作者:SpikeKing

发散条形图(Diverging Bar)是一种用于显示数据分布的图表,可以帮助我们比较不同类别或分组的数据的差异和相对性,本文介绍了Matplotlib绘制发散条形图的函数源码,需要的可以参考一下

发散条形图(Diverging Bar)是一种用于显示数据分布的图表,可以帮助我们比较不同类别或分组的数据的差异和相对性。发散条形图的特点是,以一个中心点为基准,将数据分为两个方向,通常用不同的颜色来表示正负或高低。

示例如下:

源码如下:

#!/usr/bin/env python
# -- coding: utf-8 --
"""
Copyright (c) 2022. All rights reserved.
Created by C. L. Wang on 2023/6/6
"""
import os

import matplotlib.pyplot as plt

from myutils.project_utils import read_excel_to_df
from root_dir import DATA_DIR


def diverging_bar(
  df, value_col, y_ticks_col, x_label="", y_label="", title="",
  is_grid=False, is_show=False, save_name=""
):
  """
  默认数据存储至 df["diff"] 字段
  :param df: 数据
  :param value_col: 数值列
  :param y_ticks_col: 标签列
  :return:
  """
  # 准备数据
  df['colors'] = ['red' if x < 0 else 'green' for x in df[value_col]]
  df.sort_values(value_col, inplace=True)
  df.reset_index(inplace=True)
  plt.figure(figsize=(12, 12), dpi=80)

  # 设置数据
  plt.hlines(y=df.index, xmin=0, xmax=df[value_col], color=df.colors, alpha=0.4, linewidth=8)
  # 设置标签
  # plt.yticks(df.index, df[y_ticks_col], fontsize=12)  # y轴
  plt.yticks(df.index, df[y_ticks_col], fontsize=12)  # y轴

  # 设置图表说明
  if x_label:
    plt.gca().set(xlabel=f'${x_label}$')
  if y_label:
    plt.gca().set(ylabel=f'${y_label}$')  # $$符号表示斜体
  plt.title(title, fontdict={'size': 12})

  if is_grid:  # 显示网格
    plt.grid(linestyle='--', alpha=0.5)
  if save_name:
    plt.savefig(save_name, bbox_inches='tight', format='png', transparent=True)
  if is_show:
    plt.show()

def main():
  # df = read_excel_to_df(os.path.join(DATA_DIR, "ourbest_20230605_dockq_9_final.xls"))
  df = read_excel_to_df(os.path.join(DATA_DIR, "ourbest_20230601_tmscore_56.xls"))
  x1 = df["m0-score"]
  x2 = df["m2-score"]
  # x2 = df["m1-score"]
  df["diff"] = x2 - x1
  df.info()
  diverging_bar(
    df, value_col="diff", y_ticks_col="target",
    x_label="DockQ", y_label="Target", title="",
    is_show=True, save_name="xxx.png")


if __name__ == '__main__':
  main()

到此这篇关于Python+Matplotlib绘制发散条形图的示例代码的文章就介绍到这了,更多相关Python Matplotlib发散条形图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文