【发布时间】:2018-08-26 10:47:05
【问题描述】:
我正在使用以下代码使用 SNS 绘制以下类型的条形图。我使用了cubehelix_palette,因为我希望条形颜色强度根据值。我预计较高的值会变深紫色,而较低的值会变浅。但我在这里得到的似乎非常不同。 。似乎越来越少的负值越来越暗,而更多的正值被忽略了。我在这里做错了吗?
x = ["A","B","C","D"]
y = [-0.086552691,0.498737914,-0.090153413,-0.075941404]
sns.axes_style('white')
sns.set_style('white')
pal=sns.cubehelix_palette(5)
ax = sns.barplot(x, y,palette=pal)
for n, (label, _y) in enumerate(zip(x, y)):
ax.annotate(
s='{:.3f}'.format(_y),
xy=(n, _y),
ha='center',va='center',
xytext=(0,10*(1 if _y > 0 else -1)),
textcoords='offset points',
size = 8,
weight='bold'
)
ax.annotate(
s=label,
xy=(n, 0),
ha='left',va='center',
xytext=(0,50*(-1 if _y > 0 else 1)),
textcoords='offset points',
rotation=90,
size = 10,
weight='bold'
)
# axes formatting
#ax.set_yticks([])
ax.set_xticks([])
sns.despine(ax=ax, bottom=True, left=True)
已编辑 根据@ImportanceOfBeingErnest 的建议,我也尝试了以下代码。然而,负方向强度是错误的。同样令人不安的传说也是可见的。
import numpy as np, matplotlib.pyplot as plt, seaborn as sns
sns.set(style="whitegrid", color_codes=True)
pal = sns.color_palette("Greens_d", 5)
ax = sns.barplot(x=x, y=y, palette=pal,hue=y,dodge=False)
x = ["A","B","C","D","E","F","G","H","I","J","K"]
y = [-0.086552691,
0.498737914,
-0.090153413,
-0.075941404,
-0.089105985,
-0.05301275,
-0.095927691,
-0.083528335,
0.250680624,
-0.092506638,
-0.082689631,
]
for n, (label, _y) in enumerate(zip(x, y)):
ax.annotate(
s='{:.3f}'.format(_y),
xy=(n, _y),
ha='center',va='center',
xytext=(0,10*(1 if _y > 0 else -1)),
textcoords='offset points',
size = 8,
weight='bold'
)
ax.annotate(
s=label,
xy=(n, 0),
ha='left',va='center',
xytext=(0,50*(-1 if _y > 0 else 1)),
textcoords='offset points',
rotation=90,
size = 10,
weight='bold'
)
ax.set_xticks([])
sns.despine(ax=ax, bottom=True, left=True)
plt.show()
【问题讨论】:
-
@ImportanceOfBeingErnest 我不同意这是 100% 重复,因为此图表中负方向条的强度似乎有问题。由于没有针对此特定类型提出任何问题,我希望这对其他人有所帮助。
-
您是说链接问题的解决方案不能解决您的问题吗?
-
好像没有。我没有尝试,因为我的案例使用了多向条,并且我需要不同的条标记。事实上,与链接的问题相比,我需要对情节进行更多的自定义。
-
什么?要么有,要么没有。我刚刚对其进行了测试,效果很好。
-
是的,它确实有效,但有一些小问题。你可以检查编辑的问题吗?无论如何,谢谢你的建议。