0

我目前正在尝试为我的数据按分类属性(自由或幸福分数)分割绘制两条回归线。我目前的疑虑是我需要颜色来编码我的图表中的另一个单独的分类属性(GNI/capita 括号)。混合颜色似乎令人困惑,所以我决定使用不同的标记来区分数据点。但是,我无法将其中一条回归线更改为虚线,因为它们是相同的。我什至不想考虑我将如何为这一切创造一个传奇。如果您认为这是一个丑陋的图表,我同意,但在某些情况下,我必须在一个图表中编码四个属性。顺便说一句,如果有更好的方法,请接受任何建议。

sns.lmplot(data=combined_indicators, x='x', y='y', hue='Indicator', palette=["#000620"], markers=['x', '.'], ci=None)
plt.axvspan(0,1025, alpha=0.5, color='#de425b', zorder=-1)
plt.axvspan(1025,4035, alpha=0.5, color='#fbb862', zorder=-1)
plt.axvspan(4035,12475, alpha=0.5, color ='#afd17c', zorder=-1)
plt.axvspan(12475,100000, alpha=0.5, color='#00876c', zorder=-1)
plt.title("HFI & Happiness Regressed on GNI/capita")
plt.xlabel("GNI/Capita by Purchasing Power Parity (2017 International $)")
plt.ylabel("Standard Indicator Score (0-10)")

我现在的身材抬起了丑陋的脑袋

4

2 回答 2

0

据我所知,没有简单的方法可以更改lmplot. 但是如果你使用regplot而不是你可以实现你的目标lmplot,缺点是你必须hue“手动”实现 -splitting

x_col = 'total_bill'
y_col = 'tip'
hue_col = 'smoker'
df = sns.load_dataset('tips')

markers = ['x','.']
colors = ["#000620", "#000620"]
linestyles = ['-','--']

plt.figure()
for (hue,gr),m,c,ls in zip(df.groupby(hue_col),markers,colors,linestyles):
    sns.regplot(data=gr, x=x_col, y=y_col, marker=m, color=c, line_kws={'ls':ls}, ci=None, label=f'{hue_col}={hue}')
ax.legend()

在此处输入图像描述

于 2020-11-05T14:05:40.397 回答
0

只是想补充一下,如果以后有人偶然发现这篇文章,您可以使用 Line2D 手动为这个混乱创建一个图例。对我来说看起来像这样:

from matplotlib.patches import Patch
from matplotlib.lines import Line2D

legend_elements = [Line2D([0], [0], color='#000620', lw=2, label='Freedom', linestyle='--'),
                   Line2D([0],[0], color='#000620', lw=2, label='Happiness'),
                   Line2D([0], [0], marker='x', color='#000620', label='Freedom',
                          markerfacecolor='#000620', markersize=15),
                   Line2D([0], [0], marker='.', color='#000620', label='Happiness',
                          markerfacecolor='#000620', markersize=15),
                   Patch(facecolor='#de425b', label='Low-Income'),
                   Patch(facecolor='#fbb862', label='Lower Middle-Income'),
                   Patch(facecolor='#afd17c', label='Upper Middle-Income'),
                   Patch(facecolor='#00876c', label='High-Income')]

最终结果如下所示: 带有自定义图例的图表

于 2020-11-06T02:12:29.560 回答