首页 > 解决方案 > python中的分组图表(matplotlib.pyplot)

问题描述

作为 SQL 查询的结果,我有下表:

SYS|LOCKED|UNLOCKED|
 A |   2  |  3     |
 B |   1  |  2     |
 C |   4  |  1     |

这是放入 pandas 数据帧的 SQL 查询的结果,我想将其转换为分组图表,其中 X = SYS 和 Y = 第一列,其中包含 LOCKED 编号,第二列包含 UNLOCKED 项。这是迄今为止的代码,但它错过了情节代码。有任何想法吗?

import pyodbc
import os
import sys
import pandas as pd
import matplotlib.pyplot as plt

with open('serv1.txt', 'r') as servfile:
    serv = servfile.read()

with open('datab1.txt', 'r') as databfile:
    datab = databfile.read()

print(serv)
print(datab)
cnxn = pyodbc.connect('Trusted_Connection=yes', driver = '{ODBC Driver 13 for SQL Server}',server = serv, database = datab)
print(cnxn)
SQL_Query = pd.read_sql_query("""select SYS,
                                   sum(case when LOCK_STAT = 'Locked' then 1 else 0 end) as LOCKED,
                                   sum(case when LOCK_STAT = 'Unlocked' then 1 else 0 end) as UNLOCKED
                                from dbo.USR_02_ALL_RAW
                                group by SYS;""")
df = pd.DataFrame(SQL_Query, columns=['SYS', 'LOCKED','UNLOCKED'])

从这里开始,我不确定代码。SQL 查询如上创建表,但我不知道如何放入分组图表中,其中 Y 每组有两个条形图(X 轴上的 SYS)。

有任何想法吗?

标签: pythonmatplotlib

解决方案


使用set_indexpd.DataFrame.plot.bar

MCVE:

哪里df,

   SYS  LOCKED  UNLOCKED
0   A        2         3
1   B        1         2
2   C        4         1

然后,

df.set_index('SYS').plot.bar()

输出:

在此处输入图像描述


推荐阅读