1
我設法查找並自定義了一些matplotlib代碼以創建分組條形圖。但是,代碼頂部沒有標籤。我嘗試了幾種方法,但我只是沒有把它做好。將數據標籤添加到MatPlotLib中的分組條形圖
我的最終目標將是:
- 數據標籤添加到每個酒吧
- 擺脫周圍的外部和y軸的黑色邊框的頂部標籤
任何幫助(特別是#1)非常感謝!
代碼:
#Code adapted from:
#https://chrisalbon.com/python/matplotlib_grouped_bar_plot.html
#matplotlib online
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
raw_data = {'plan_type': ['A1', 'A2', 'A3', 'A4', 'A5', 'A6'],
'Group A': [100, 0, 0, 0, 0, 0],
'Group B': [48, 16, 9, 22, 5, 0],
'Group C': [18, 28, 84, 34, 11, 0],
'Group D': [49, 13, 7, 23, 6, 0],
'Group E': [57, 16, 9, 26, 3, 0]
}
df = pd.DataFrame(raw_data, columns = ['plan_type', 'Group B', 'Group C', 'Group D', 'Group E'])
df2 =pd.DataFrame(raw_data, columns = ['plan_type', 'Group A'])
# Setting the positions and width for the bars
pos = list(range(len(df['Group B'])))
width = 0.2
# Plotting the bars
fig, ax = plt.subplots(figsize=(7, 2))
#This creates another y-axis that shares the same x-axis
# Create a bar with Group A data,
# in position pos + some width buffer,
plt.bar(pos,
#using df['Group E'] data,
df2['Group A'],
# of width
width*8,
# with alpha 0.5
alpha=1,
# with color
color='#E6E9ED',
# with label the fourth value in plan_type
label=df2['plan_type'][0])
# Create a bar with Group B data,
# in position pos,
plt.bar(pos,
#using df['Group B'] data,
df['Group B'],
# of width
width,
# with alpha 1
alpha=1,
# with color
color='#900C3F',
# with label the first value in plan_type
label=df['plan_type'][0])
# Create a bar with Group C data,
# in position pos + some width buffer,
plt.bar([p + width for p in pos],
#using df['Group C'] data,
df['Group C'],
# of width
width,
# with alpha 1
alpha=1.0,
# with color
color='#C70039',
# with label the second value in plan_type
label=df['plan_type'][1])
# Create a bar with Group D data,
# in position pos + some width buffer,
plt.bar([p + width*2 for p in pos],
#using df['Group D'] data,
df['Group D'],
# of width
width,
# with alpha 1
alpha=1,
# with color
color='#FF5733',
# with label the third value in plan_type
label=df['plan_type'][2])
# Create a bar with Group E data,
# in position pos + some width buffer,
plt.bar([p + width*3 for p in pos],
#using df['Group E'] data,
df['Group E'],
# of width
width,
# with alpha 1
alpha=1,
# with color
color='#FFC300',
# with label the fourth value in plan_type
label=df['plan_type'][3])
# Set the y axis label
ax.set_ylabel('Percent')
# Set the chart's title
ax.set_title('A GRAPH - YAY!', fontweight = "bold")
# Set the position of the x ticks
ax.set_xticks([p + 1.5 * width for p in pos])
# Set the labels for the x ticks
ax.set_xticklabels(df['plan_type'])
# Setting the x-axis and y-axis limits
plt.xlim(min(pos)-width, max(pos)+width*5)
plt.ylim([0, 100])
#plt.ylim([0, max(df['Group B'] + df['Group C'] + df['Group D'] + df['Group E'])])
# Adding the legend and showing the plot. Upper center location, 5 columns,
Expanded to fit on one line.
plt.legend(['Group A','Group B', 'Group C', 'Group D', 'Group E'], loc='upper center', ncol=5, mode='expand', fontsize ='x-small')
#plt.grid() --> This would add a Grid, but I don't want that.
plt.show()
plt.savefig("PlanOffered.jpg")