根据解释,为什么这个问题与此link不同
据我所知,此链接可以从图中获得高度,但就我而言,我在图中根本没有numpatients6month
列,而只是在数据框上有此列。
所以我有一个条形图。每个x-axis
都包含两个条,每个条从不同的数据帧中读取。
这是我正在绘制条形图的代码。
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['axes.prop_cycle'] = ("cycler('color', 'rg')")
dffinal['CI-noCI']='Cognitive Impairement'
nocidffinal['CI-noCI']='Non Cognitive Impairement'
res=pd.concat([dffinal,nocidffinal])
sns.barplot(x='6month',y='final-formula',data=res,hue='CI-noCI').set_title(fs)
plt.xticks(fontsize=8, rotation=45)
plt.show()
如您所见,有two data frame
。我用颜色dffinal
和green
用颜色nocidffinal
绘制了red
。
这是情节的结果:
更多说明: dffinal
基于(6month, final-formula)
nocidffinal
也基于(6month,final-formula)
。
这是我的nocidffinal
数据框:
6month final-formula numPatients6month
137797.0 1 0.035934 974
267492.0 2 0.021705 645
269542.0 3 0.022107 769
271950.0 4 0.020000 650
276638.0 5 0.015588 834
187719.0 6 0.019461 668
218512.0 7 0.011407 789
199830.0 8 0.008863 677
269469.0 9 0.003807 788
293390.0 10 0.009669 724
254783.0 11 0.012195 738
300974.0 12 0.009695 722
和dffinal
:
6month final-formula numPatients6month
166047.0 1 0.077941 680
82972.0 2 0.057208 437
107227.0 3 0.057348 558
111330.0 4 0.048387 434
95591.0 5 0.033708 534
95809.0 6 0.036117 443
98662.0 7 0.035524 563
192668.0 8 0.029979 467
89460.0 9 0.009709 515
192585.0 10 0.021654 508
184325.0 11 0.017274 521
85068.0 12 0.010438 479
如您所见,此数据框中有numPatients6month
列,我想在每个栏的顶部显示。
我确实NOT
想要更改条形图并根据此列对其进行分组,而我只是想将此数字显示为每个条形图上方的用户额外信息。
感谢您的时间:)
答案 0 :(得分:1)
如果将numPatients6month
列以一个可迭代的方式排列,并按顺序显示在图表中,则使用其他stackoverflow答案(同样在文档here中),可以将文本放在正确地排在顶部。
我在下面使用了代码(改编自this答案)。它一排又一排地合并了多列(即将按图表顺序显示所有numPatients6month
列)
vals = pd.concat([nocidffinal.numPatients6month, dffinal.numPatients6month], axis=1)
vals = vals.stack().reset_index(level=[0,1], drop=True)
这是我的完整代码
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['axes.prop_cycle'] = ("cycler('color', 'rg')")
dffinal['CI-noCI']='Cognitive Impairement'
nocidffinal['CI-noCI']='Non Cognitive Impairement'
res=pd.concat([dffinal,nocidffinal])
# Copied to clipboard from SO question above
# Comment out if you already have your dataframes
nocidffinal = pd.read_clipboard().reset_index()
dffinal = pd.read_clipboard().reset_index()
# This will merge columns in order of the chart
vals = pd.concat([nocidffinal.numPatients6month, dffinal.numPatients6month], axis=1)
vals = vals.stack().reset_index(level=[0,1], drop=True)
# Plot the chart
ax = sns.barplot(x='6month', y='final-formula', data=res, hue='CI-noCI')
_ = plt.xticks(fontsize=8, rotation=45)
# Add the values on top of each correct bar
for idx, p in enumerate(ax.patches):
height = p.get_height()
ax.text(p.get_x()+p.get_width()/2.,
height + height*.01,
vals[idx],
ha="center")