matplotlib 如何将竖干图的值设置为xticks标签?

qlfbtfca  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(147)

我想扭转一个分组数据,并使用组名称作为xtick标签并排绘制它。下面的演示大多很好,但标签的位置不如预期。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

def main():
  data = [['AAAAAA',8],['AAAAAA',9],['AAAAAA',10],['BBBBBB',5],['BBBBBB',6],['BBBBBB',7],['CCCCCC',1],['CCCCCC',2],['CCCCCC',3],['CCCCCC',4]]
  df = pd.DataFrame(data,columns=['name','value'])

  dfg = df.groupby('name')
  fig, ax = plt.subplots(figsize=(8, 4))
  i = 0
  ymin = df['value'].min()
  c1='#ececec'
  c2='#bcbcbc'
  color=c1  
  for ix, row in reversed(tuple(dfg)):
    print(ix,row)
    n = len(row['name'])
    x = np.linspace(i,i + n,n)
    ax.stem(x,row['value'])

    font_dict = {'family':'serif','color':'darkred', 'size':8}
    ax.text(i + n/2,ymin,ix,ha='right',va='top',rotation=90, fontdict=font_dict)
    if color == c1:
        color = c2
    else:
        color = c1
    
    plt.axvspan(i, i+n, facecolor=color, alpha=0.5)    
    i += len(row)    
    
  ax.xaxis.set_ticks_position('none') 
  plt.setp( ax.get_xticklabels(), visible=False)
  ax.grid(axis='y',color='gray', linestyle='dashed', alpha=1)    
  ax.spines[["top", "right"]].set_visible(False)
  
  fig.tight_layout() 
    
  plt.show()
  return

main()

输出:

欢迎评论任何其他适当的方法来做到这一点,或如何改善xticks下来,使用ymin适当不好的方法来做到这一点。

8i9zcol2

8i9zcol21#

如果我对你想要达到的目标的理解是正确的,那么这里有一个方法:
第一个
输出量:

为了避免标签重复,您可以执行以下操作:
第一个
输出量:

相关问题