Вы можете просто изменить данные графика:
plot_data1 = atherosclerosis.xs(1, level=0, drop_level=False)
plot_data2 = atherosclerosis.xs(2, level=0, drop_level=False)
Вывод:
Обновление : чтобы получить то, что вы просите, я бы отсортировал данные и построил график по диапазону:
атеросклероз = атеросклероз.sort_index (level = (1,0)) атеросклероз ['range' ] = np.arange (len (атеросклероз))
plot_data1 = atherosclerosis.xs(1, level=0, drop_level=False)
plot_data2 = atherosclerosis.xs(2, level=0, drop_level=False)
plot_index1 = [str(idx) for idx in plot_data1.index]
plot_index2 = [str(idx) for idx in plot_data2.index]
# atherosclerosis.expr_mean.sort_index(level=['dose','age']).plot(alpha=0)
plt.errorbar(plot_data1['range'], plot_data1["expr_mean"],
yerr=plot_data1["expr_std"]/2,
marker="s", mfc='green',
markeredgewidth=2, capsize=4, capthick=2,
fmt='o-', ecolor="magenta")
plt.errorbar(plot_data2['range'], plot_data2["expr_mean"],
yerr=plot_data2["expr_std"]/2,
marker="s", mfc='green',
markeredgewidth=2, capsize=4, capthick=2,
fmt='o-', ecolor="magenta")
plt.xticks(atherosclerosis['range'], atherosclerosis.index);
Выход: