绘制堆积百分比条形图matplotlib

时间:2019-05-09 16:42:01

标签: python pandas matplotlib

假设我有以下具有两列的数据框: 标签:可以为-1、0或1。 years_of_expereicen:可以为0,1,2,3,4,5,6,7,8,9

label   SSP_years_of_experience
22640   -1.0    5.0
181487  1.0 3.0
327672  0.0 9.0
254919  0.0 6.0
136942  1.0 10.0

我在这里的目标是使用此数据框创建百分比堆叠的条形图,其中x轴是多年的经验,而条形图是不同的颜色,每种颜色都包含一年的经验值。换句话说,我们在x轴上有10个可能的值,然后对于对应于每个标签的不同颜色的每个值有3条。 y轴应以百分比为单位。

我想知道如何在R(使用ggplot)中执行此操作,但是我是matplotlib的新手,而python是新手。

奖金指向我可以在两列中作为变量传递的位置(例如x,y)。 MOre奖励积分,用于在图表中以文本形式显示每个条形图中的观察数。

1 个答案:

答案 0 :(得分:2)

如果数据框为public class RadioManager { @SuppressLint("StaticFieldLeak") private static RadioManager instance = null; private static RadioService service; private Context context; private boolean serviceBound; public RadioManager(Context context) { this.context = context; serviceBound = false; } public static RadioManager with(Context context) { if (instance == null) instance = new RadioManager(context); return instance; } public static RadioService getService() { return service; } public void playOrPause(String streamUrl) { service.playOrPause(streamUrl); } public boolean isPlaying() { if (service != null) { return service.isPlaying(); } return false; } public int getCurrentPosition() { if (service != null) { return service.getCurrentPosition(); } return 0; } public void bind() { Intent intent = new Intent(context, RadioService.class); context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); if (service != null) EventBus.getDefault().post(service.getStatus()); } public void unbind() { context.unbindService(serviceConnection); } private ServiceConnection serviceConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder binder) { RadioService.LocalBinder rl = (RadioService.LocalBinder) binder; service = rl.getService(); } public void onServiceDisconnected(ComponentName arg0) { serviceBound = false; } }; } ,请尝试:

pandas

玩具数据框:

exp_name = 'year_of_experience'
label_name = 'label'
new_df = (df.groupby(exp_name)[label_name]
            .value_counts(normalize=True)
            .sort_index()
            .unstack()
         )

new_df.plot.bar(stacked=True)

输出:

enter image description here